[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ - added export/import support for member data tool settings

Yvo Schubbe y.2011 at wcm-solutions.de
Fri Feb 25 08:45:36 EST 2011


Log message for revision 120575:
  - added export/import support for member data tool settings

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py
  U   Products.CMFCore/trunk/Products/CMFCore/exportimport/configure.zcml
  A   Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py
  A   Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py
  U   Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-02-25 13:14:38 UTC (rev 120574)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-02-25 13:45:36 UTC (rev 120575)
@@ -4,6 +4,8 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
+- setup handlers: Added export/import support for member data tool settings.
+
 - MemberDataTool: Fixed tool initialization.
   The default boolean and date property values were not set correctly.
 

Modified: Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py	2011-02-25 13:14:38 UTC (rev 120574)
+++ Products.CMFCore/trunk/Products/CMFCore/MemberDataTool.py	2011-02-25 13:45:36 UTC (rev 120575)
@@ -86,8 +86,8 @@
         self._updateProperty('email', '')
         self._updateProperty('portal_skin', '')
         self._updateProperty('listed', '')
-        self._updateProperty('login_time', '2000/01/01')
-        self._updateProperty('last_login_time', '2000/01/01')
+        self._updateProperty('login_time', '1970/01/01 00:00:00 UTC') # epoch
+        self._updateProperty('last_login_time', '1970/01/01 00:00:00 UTC') # epoch
 
     #
     #   'portal_memberdata' interface methods

Modified: Products.CMFCore/trunk/Products/CMFCore/exportimport/configure.zcml
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/configure.zcml	2011-02-25 13:14:38 UTC (rev 120574)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/configure.zcml	2011-02-25 13:45:36 UTC (rev 120575)
@@ -29,6 +29,8 @@
 
   <adapter factory=".cookieauth.CookieCrumblerXMLAdapter"/>
 
+  <adapter factory=".memberdata.MemberDataToolXMLAdapter"/>
+
   <adapter factory=".properties.PropertiesXMLAdapter"/>
 
   <adapter factory=".skins.DirectoryViewNodeAdapter"/>
@@ -132,6 +134,20 @@
       />
 
   <genericsetup:importStep
+      name="memberdata"
+      title="Member Data Tool"
+      description="Import member data tool settings."
+      handler="Products.CMFCore.exportimport.memberdata.importMemberDataTool"
+      />
+
+  <genericsetup:exportStep
+      name="memberdata"
+      title="Member Data Tool"
+      description="Export member data tool settings."
+      handler="Products.CMFCore.exportimport.memberdata.exportMemberDataTool"
+      />
+
+  <genericsetup:importStep
       name="properties"
       title="Site Properties"
       description="Import site properties."

Added: Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py	                        (rev 0)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py	2011-02-25 13:45:36 UTC (rev 120575)
@@ -0,0 +1,81 @@
+##############################################################################
+#
+# Copyright (c) 2011 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Member data tool xml adapter and setup handlers.
+"""
+
+from zope.component import adapts
+
+from Products.GenericSetup.interfaces import ISetupEnviron
+from Products.GenericSetup.utils import exportObjects
+from Products.GenericSetup.utils import importObjects
+from Products.GenericSetup.utils import PropertyManagerHelpers
+from Products.GenericSetup.utils import XMLAdapterBase
+
+from Products.CMFCore.interfaces import IMemberDataTool
+from Products.CMFCore.utils import getToolByName
+
+
+class MemberDataToolXMLAdapter(XMLAdapterBase, PropertyManagerHelpers):
+
+    """XML im- and exporter for MemberDataTool.
+    """
+
+    adapts(IMemberDataTool, ISetupEnviron)
+
+    _LOGGER_ID = 'memberdata'
+
+    name = 'memberdata'
+
+    def _exportNode(self):
+        """Export the object as a DOM node.
+        """
+        node = self._getObjectNode('object')
+        node.appendChild(self._extractProperties())
+
+        self._logger.info('Member data tool exported.')
+        return node
+
+    def _importNode(self, node):
+        """Import the object from the DOM node.
+        """
+        if self.environ.shouldPurge():
+            self._purgeProperties()
+
+        self._initProperties(node)
+
+        self._logger.info('Member data tool imported.')
+
+
+def importMemberDataTool(context):
+    """Import member data tool settings from an XML file.
+    """
+    site = context.getSite()
+    tool = getToolByName(site, 'portal_memberdata', None)
+    if tool is None:
+        logger = context.getLogger('memberdata')
+        logger.debug('Nothing to import.')
+        return
+
+    importObjects(tool, '', context)
+
+def exportMemberDataTool(context):
+    """Export member data tool settings as an XML file.
+    """
+    site = context.getSite()
+    tool = getToolByName(site, 'portal_memberdata', None)
+    if tool is None:
+        logger = context.getLogger('memberdata')
+        logger.debug('Nothing to export.')
+        return
+
+    exportObjects(tool, '', context)


Property changes on: Products.CMFCore/trunk/Products/CMFCore/exportimport/memberdata.py
___________________________________________________________________
Added: svn:eol-style
   + native

Added: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py	                        (rev 0)
+++ Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py	2011-02-25 13:45:36 UTC (rev 120575)
@@ -0,0 +1,160 @@
+##############################################################################
+#
+# Copyright (c) 2011 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""Member data tool xml adapter and setup handler unit tests.
+"""
+
+import unittest
+import Testing
+
+from DateTime.DateTime import DateTime
+from OFS.Folder import Folder
+
+from Products.GenericSetup.testing import BodyAdapterTestCase
+from Products.GenericSetup.tests.common import BaseRegistryTests
+from Products.GenericSetup.tests.common import DummyExportContext
+from Products.GenericSetup.tests.common import DummyImportContext
+
+from Products.CMFCore.MemberDataTool import MemberDataTool
+from Products.CMFCore.testing import ExportImportZCMLLayer
+
+_MEMBERDATATOOL_BODY = """\
+<?xml version="1.0"?>
+<object name="portal_memberdata" meta_type="CMF Member Data Tool">
+ <property name="email" type="string"></property>
+ <property name="portal_skin" type="string"></property>
+ <property name="listed" type="boolean">False</property>
+ <property name="login_time" type="date">1970/01/01 00:00:00 UTC</property>
+ <property name="last_login_time"
+    type="date">1970/01/01 00:00:00 UTC</property>
+</object>
+"""
+
+_DEFAULT_EXPORT = """\
+<?xml version="1.0"?>
+<object name="portal_memberdata" meta_type="CMF Member Data Tool">
+ <property name="email" type="string"></property>
+ <property name="portal_skin" type="string"></property>
+ <property name="listed" type="boolean">False</property>
+ <property name="login_time" type="date">1970/01/01 00:00:00 UTC</property>
+ <property name="last_login_time"
+    type="date">1970/01/01 00:00:00 UTC</property>
+</object>
+"""
+
+_CHANGED_EXPORT = """\
+<?xml version="1.0"?>
+<object name="portal_memberdata" meta_type="CMF Member Data Tool">
+ <property name="email" type="string">value1</property>
+ <property name="portal_skin" type="string">value2</property>
+ <property name="listed" type="boolean">True</property>
+ <property name="login_time" type="date">2010/01/01 00:00:00</property>
+ <property name="last_login_time" type="date">2010/01/01 00:00:00</property>
+ <property name="fullname" type="string"></property>
+</object>
+"""
+
+
+class MemberDataToolXMLAdapterTests(BodyAdapterTestCase, unittest.TestCase):
+
+    layer = ExportImportZCMLLayer
+
+    def _getTargetClass(self):
+        from Products.CMFCore.exportimport.memberdata \
+                import MemberDataToolXMLAdapter
+
+        return MemberDataToolXMLAdapter
+
+    def setUp(self):
+        self._obj = MemberDataTool()
+        self._BODY = _MEMBERDATATOOL_BODY
+
+
+class _MemberDataToolSetup(BaseRegistryTests):
+
+    def _initSite(self, use_changed=False):
+        self.root.site = Folder(id='site')
+        site = self.root.site
+        mdtool = site.portal_memberdata = MemberDataTool()
+
+        if use_changed:
+            mdtool._updateProperty('email', 'value1')
+            mdtool._updateProperty('portal_skin', 'value2')
+            mdtool._updateProperty('listed', 'True')
+            mdtool._updateProperty('login_time', '2010/01/01')
+            mdtool._updateProperty('last_login_time', '2010/01/01')
+            mdtool.manage_addProperty('fullname', '', 'string')
+
+        return site
+
+
+class exportMemberDataToolTests(_MemberDataToolSetup):
+
+    layer = ExportImportZCMLLayer
+
+    def test_unchanged(self):
+        from Products.CMFCore.exportimport.memberdata \
+                import exportMemberDataTool
+
+        site = self._initSite(use_changed=False)
+        context = DummyExportContext(site)
+        exportMemberDataTool(context)
+
+        self.assertEqual(len(context._wrote), 1)
+        filename, text, content_type = context._wrote[0]
+        self.assertEqual(filename, 'memberdata.xml')
+        self._compareDOM(text, _DEFAULT_EXPORT)
+        self.assertEqual(content_type, 'text/xml')
+
+    def test_changed(self):
+        from Products.CMFCore.exportimport.memberdata \
+                import exportMemberDataTool
+
+        site = self._initSite(use_changed=True)
+        context = DummyExportContext(site)
+        exportMemberDataTool(context)
+
+        self.assertEqual(len(context._wrote), 1)
+        filename, text, content_type = context._wrote[0]
+        self.assertEqual(filename, 'memberdata.xml')
+        self._compareDOM(text, _CHANGED_EXPORT)
+        self.assertEqual(content_type, 'text/xml')
+
+
+class importMemberDataToolTests(_MemberDataToolSetup):
+
+    layer = ExportImportZCMLLayer
+
+    def test_normal(self):
+        from Products.CMFCore.exportimport.memberdata \
+                import importMemberDataTool
+
+        site = self._initSite()
+        mdtool = site.portal_memberdata
+
+        context = DummyImportContext(site)
+        context._files['memberdata.xml'] = _CHANGED_EXPORT
+        importMemberDataTool(context)
+
+        self.assertEqual(mdtool.email, 'value1')
+        self.assertEqual(mdtool.portal_skin, 'value2')
+        self.assertEqual(mdtool.listed, True)
+        self.assertEqual(mdtool.login_time, DateTime('2010/01/01'))
+        self.assertEqual(mdtool.last_login_time, DateTime('2010/01/01'))
+
+
+def test_suite():
+    return unittest.TestSuite((
+        unittest.makeSuite(MemberDataToolXMLAdapterTests),
+        unittest.makeSuite(exportMemberDataToolTests),
+        unittest.makeSuite(importMemberDataToolTests),
+        ))


Property changes on: Products.CMFCore/trunk/Products/CMFCore/exportimport/tests/test_memberdata.py
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py	2011-02-25 13:14:38 UTC (rev 120574)
+++ Products.CMFCore/trunk/Products/CMFCore/tests/test_MemberDataTool.py	2011-02-25 13:45:36 UTC (rev 120575)
@@ -75,9 +75,9 @@
         self.assertEqual(tool.getProperty('portal_skin'), '')
         self.assertEqual(tool.getProperty('listed'), False)
         self.assertEqual(tool.getProperty('login_time'),
-                         DateTime('2000/01/01 00:00:00'))
+                         DateTime('1970/01/01 00:00:00 UTC'))
         self.assertEqual(tool.getProperty('last_login_time'),
-                         DateTime('2000/01/01 00:00:00'))
+                         DateTime('1970/01/01 00:00:00 UTC'))
 
     def test_deleteMemberData(self):
         tool = self._makeOne()
@@ -159,7 +159,7 @@
         member.setProperties()
         self.assertEqual(member.getProperty('email'), '')
         self.assertEqual(member.getProperty('login_time'),
-                         DateTime('2000/01/01 00:00:00'))
+                         DateTime('1970/01/01 00:00:00 UTC'))
 
         member.setProperties({'email': 'BOB at EXAMPLE.ORG',
                               'login_time': '2000/02/02'})



More information about the checkins mailing list