[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