[Checkins] SVN: Products.GenericSetup/trunk/ - fixed two 'date' property issues
Yvo Schubbe
y.2011 at wcm-solutions.de
Thu Feb 24 03:28:59 EST 2011
Log message for revision 120559:
- fixed two 'date' property issues
- refactored PropertyManagerHelpers tests
Changed:
U Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
U Products.GenericSetup/trunk/Products/GenericSetup/utils.py
UU Products.GenericSetup/trunk/docs/CHANGES.rst
-=-
Modified: Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py 2011-02-23 19:42:14 UTC (rev 120558)
+++ Products.GenericSetup/trunk/Products/GenericSetup/tests/test_utils.py 2011-02-24 08:28:59 UTC (rev 120559)
@@ -16,11 +16,35 @@
import unittest
import Testing
+from DateTime.DateTime import DateTime
+from Testing.ZopeTestCase import installProduct
from Testing.ZopeTestCase import ZopeTestCase
-from Testing.ZopeTestCase import installProduct
installProduct('GenericSetup')
+_TESTED_PROPERTIES = (
+ {'id': 'foo_boolean', 'type': 'boolean', 'mode': 'wd'},
+ {'id': 'foo_date', 'type': 'date', 'mode': 'wd'},
+ {'id': 'foo_float', 'type': 'float', 'mode': 'wd'},
+ {'id': 'foo_int', 'type': 'int', 'mode': 'wd'},
+ {'id': 'foo_lines', 'type': 'lines', 'mode': 'wd'},
+ {'id': 'foo_long', 'type': 'long', 'mode': 'wd'},
+ {'id': 'foo_string', 'type': 'string', 'mode': 'wd'},
+ {'id': 'foo_text', 'type': 'text', 'mode': 'wd'},
+ {'id': 'foo_tokens', 'type': 'tokens', 'mode': 'wd'},
+ {'id': 'foo_selection', 'type': 'selection',
+ 'select_variable': 'foobarbaz', 'mode': 'wd'},
+ {'id': 'foo_mselection', 'type': 'multiple selection',
+ 'select_variable': 'foobarbaz', 'mode': 'wd'},
+ {'id': 'foo_boolean0', 'type': 'boolean', 'mode': 'wd'},
+ {'id': 'foo_date_naive', 'type': 'date', 'mode': 'wd'},
+ {'id': 'foo_ro', 'type': 'string', 'mode': ''},
+ {'id': 'foo_boolean_nodel', 'type': 'boolean', 'mode': 'w'},
+ {'id': 'foo_date_nodel', 'type': 'date', 'mode': 'w'},
+ {'id': 'foo_float_nodel', 'type': 'float', 'mode': 'w'},
+ {'id': 'foo_int_nodel', 'type': 'int', 'mode': 'w'},
+)
+
_EMPTY_PROPERTY_EXPORT = """\
<?xml version="1.0"?>
<dummy>
@@ -38,9 +62,11 @@
<property name="foo_mselection" select_variable="foobarbaz"
type="multiple selection"/>
<property name="foo_boolean0" type="boolean">False</property>
+ <property name="foo_date_naive" type="date">1970/01/01 00:00:00</property>
+ <property name="foo_boolean_nodel">False</property>
+ <property name="foo_date_nodel">1970/01/01 00:00:00 UTC</property>
+ <property name="foo_float_nodel">0.0</property>
<property name="foo_int_nodel">0</property>
- <property name="foo_float_nodel">0.0</property>
- <property name="foo_boolean_nodel">False</property>
</dummy>
"""
@@ -72,9 +98,11 @@
<element value="Baz"/>
</property>
<property name="foo_boolean0" type="boolean">False</property>
+ <property name="foo_date_naive" type="date">2000/01/01 00:00:00</property>
+ <property name="foo_boolean_nodel">True</property>
+ <property name="foo_date_nodel">2000/01/01 00:00:00 UTC</property>
+ <property name="foo_float_nodel">3.1415</property>
<property name="foo_int_nodel">1789</property>
- <property name="foo_float_nodel">3.1415</property>
- <property name="foo_boolean_nodel">True</property>
</dummy>
""".encode('utf-8')
@@ -104,9 +132,11 @@
<element value="Baz"/>
</property>
<property name="foo_boolean0">False</property>
+ <property name="foo_date_naive">2000/01/01 00:00:00</property>
+ <property name="foo_boolean_nodel">True</property>
+ <property name="foo_date_nodel">2000/01/01 00:00:00 UTC</property>
+ <property name="foo_float_nodel">3.1415</property>
<property name="foo_int_nodel">1789</property>
- <property name="foo_float_nodel">3.1415</property>
- <property name="foo_boolean_nodel">True</property>
</dummy>
""".encode('utf-8')
@@ -268,32 +298,34 @@
return Foo(context, environ)
+ def _getContextClass(self):
+ from OFS.PropertyManager import PropertyManager
+
+ class DummyContext(PropertyManager):
+ _properties = _TESTED_PROPERTIES
+ return DummyContext
+
def _makeContext(self):
- from OFS.PropertyManager import PropertyManager
- obj = PropertyManager('obj')
+ obj = self._getContextClass()()
obj.foobarbaz = ('Foo', 'Bar', 'Baz')
- obj._properties = ()
- obj.manage_addProperty('foo_boolean', '', 'boolean')
- obj.manage_addProperty('foo_date', '1970/01/01 00:00:00 UTC', 'date')
- obj.manage_addProperty('foo_float', '0', 'float')
- obj.manage_addProperty('foo_int', '0', 'int')
- obj.manage_addProperty('foo_lines', '', 'lines')
- obj.manage_addProperty('foo_long', '0', 'long')
- obj.manage_addProperty('foo_string', '', 'string')
- obj.manage_addProperty('foo_text', '', 'text')
- obj.manage_addProperty('foo_tokens', '', 'tokens')
- obj.manage_addProperty('foo_selection', 'foobarbaz', 'selection')
- obj.manage_addProperty('foo_mselection', 'foobarbaz',
- 'multiple selection')
- obj.manage_addProperty('foo_boolean0', '', 'boolean')
- obj.manage_addProperty('foo_ro', '', 'string')
- obj._properties[-1]['mode'] = '' # Read-only, not exported or purged
- obj.manage_addProperty('foo_int_nodel', 0, 'int')
- obj._properties[-1]['mode'] = 'w' # Not deletable
- obj.manage_addProperty('foo_float_nodel', 0, 'float')
- obj._properties[-1]['mode'] = 'w' # Not deletable
- obj.manage_addProperty('foo_boolean_nodel', '', 'boolean')
- obj._properties[-1]['mode'] = 'w' # Not deletable
+ obj.foo_boolean = False
+ obj.foo_date = DateTime('1970/01/01 00:00:00 UTC')
+ obj.foo_float = 0.0
+ obj.foo_int = 0
+ obj.foo_lines = []
+ obj.foo_long = 0
+ obj.foo_string = ''
+ obj.foo_text = ''
+ obj.foo_tokens = ()
+ obj.foo_selection = ''
+ obj.foo_mselection = ()
+ obj.foo_boolean0 = 0
+ obj.foo_date_naive = DateTime('1970/01/01 00:00:00')
+ obj.foo_ro = ''
+ obj.foo_boolean_nodel = False
+ obj.foo_date_nodel = DateTime('1970/01/01 00:00:00 UTC')
+ obj.foo_float_nodel = 0.0
+ obj.foo_int_nodel = 0
return obj
def _getReal(self, obj):
@@ -313,10 +345,12 @@
obj._updateProperty('foo_selection', 'Foo')
obj._updateProperty( 'foo_mselection', ('Foo', 'Baz') )
obj.foo_boolean0 = 0
+ obj._updateProperty('foo_date_naive', '2000/01/01 00:00:00')
obj._updateProperty('foo_ro', 'RO')
+ obj._updateProperty('foo_boolean_nodel', 'True')
+ obj._updateProperty('foo_date_nodel', '2000/01/01 00:00:00 UTC')
+ obj._updateProperty('foo_float_nodel', '3.1415')
obj._updateProperty('foo_int_nodel', '1789')
- obj._updateProperty('foo_float_nodel', '3.1415')
- obj._updateProperty('foo_boolean_nodel', 'True')
def test__extractProperties_empty(self):
from Products.GenericSetup.utils import PrettyDocument
@@ -364,7 +398,13 @@
self.assertEqual(getattr(obj, 'foo_selection', None), None)
self.assertEqual(getattr(obj, 'foo_mselection', None), None)
self.assertEqual(getattr(obj, 'foo_boolean0', None), None)
- self.assertEqual(getattr(obj, 'foo_ro', None), 'RO')
+ self.assertEqual(getattr(obj, 'foo_date_naive', None), None)
+ self.assertEqual(obj.foo_ro, 'RO')
+ self.assertEqual(obj.foo_boolean_nodel, False)
+ self.assertEqual(obj.foo_date_nodel,
+ DateTime('1970/01/01 00:00:00 UTC'))
+ self.assertEqual(obj.foo_float_nodel, 0.0)
+ self.assertEqual(obj.foo_int_nodel, 0)
def test__initProperties_normal(self):
from Products.GenericSetup.utils import PrettyDocument
@@ -469,26 +509,7 @@
from Products.GenericSetup.testing import DummySetupEnviron
class Foo(self._getTargetClass(), NodeAdapterBase):
- _PROPERTIES = (
- {'id': 'foo_boolean', 'type': 'boolean', 'mode': 'wd'},
- {'id': 'foo_date', 'type': 'date', 'mode': 'wd'},
- {'id': 'foo_float', 'type': 'float', 'mode': 'wd'},
- {'id': 'foo_int', 'type': 'int', 'mode': 'wd'},
- {'id': 'foo_lines', 'type': 'lines', 'mode': 'wd'},
- {'id': 'foo_long', 'type': 'long', 'mode': 'wd'},
- {'id': 'foo_string', 'type': 'string', 'mode': 'wd'},
- {'id': 'foo_text', 'type': 'text', 'mode': 'wd'},
- {'id': 'foo_tokens', 'type': 'tokens', 'mode': 'wd'},
- {'id': 'foo_selection', 'type': 'selection',
- 'select_variable': 'foobarbaz', 'mode': 'wd'},
- {'id': 'foo_mselection', 'type': 'multiple selection',
- 'select_variable': 'foobarbaz', 'mode': 'wd'},
- {'id': 'foo_boolean0', 'type': 'boolean', 'mode': 'wd'},
- {'id': 'foo_ro', 'type': 'string', 'mode': ''},
- {'id': 'foo_int_nodel', 'type': 'int', 'mode': 'w'},
- {'id': 'foo_float_nodel', 'type': 'float', 'mode': 'w'},
- {'id': 'foo_boolean_nodel', 'type': 'boolean', 'mode': 'w'},
- )
+ _PROPERTIES = _TESTED_PROPERTIES
if context is None:
context = self._makeContext()
@@ -498,35 +519,15 @@
return Foo(context, environ)
- def _makeContext(self):
- from DateTime.DateTime import DateTime
+ def _getContextClass(self):
class NonPropertyManager:
pass
- obj = NonPropertyManager()
- obj.foobarbaz = ('Foo', 'Bar', 'Baz')
- obj.foo_boolean = False
- obj.foo_date = DateTime('1970/01/01 00:00:00 UTC')
- obj.foo_float = 0.0
- obj.foo_int = 0
- obj.foo_lines = []
- obj.foo_long = 0
- obj.foo_string = ''
- obj.foo_text = ''
- obj.foo_tokens = ()
- obj.foo_selection = ''
- obj.foo_mselection = ()
- obj.foo_boolean0 = 0
- obj.foo_ro = ''
- obj.foo_int_nodel = 0
- obj.foo_float_nodel = 0.0
- obj.foo_boolean_nodel = False
- return obj
+ return NonPropertyManager
def _getReal(self, obj):
return obj._real
def _populate(self, obj):
- from DateTime.DateTime import DateTime
obj.foo_boolean = True
obj.foo_date = DateTime('2000/01/01 00:00:00 UTC')
obj.foo_float = 1.1
@@ -539,10 +540,12 @@
obj.foo_selection = 'Foo'
obj.foo_mselection = ('Foo', 'Baz')
obj.foo_boolean0 = 0
+ obj.foo_date_naive = DateTime('2000/01/01 00:00:00')
obj.foo_ro = 'RO'
+ obj.foo_boolean_nodel = True
+ obj.foo_date_nodel = DateTime('2000/01/01 00:00:00 UTC')
+ obj.foo_float_nodel = 3.1415
obj.foo_int_nodel = 1789
- obj.foo_float_nodel = 3.1415
- obj.foo_boolean_nodel = True
class MarkerInterfaceHelpersTests(unittest.TestCase):
Modified: Products.GenericSetup/trunk/Products/GenericSetup/utils.py
===================================================================
--- Products.GenericSetup/trunk/Products/GenericSetup/utils.py 2011-02-23 19:42:14 UTC (rev 120558)
+++ Products.GenericSetup/trunk/Products/GenericSetup/utils.py 2011-02-24 08:28:59 UTC (rev 120559)
@@ -655,6 +655,11 @@
else:
if prop_map.get('type') == 'boolean':
prop = unicode(bool(prop))
+ elif prop_map.get('type') == 'date':
+ if prop.timezoneNaive():
+ prop = unicode(prop).rsplit(' ', 1)[0]
+ else:
+ prop = unicode(prop)
elif isinstance(prop, str):
prop = prop.decode(self._encoding)
elif not isinstance(prop, basestring):
@@ -690,6 +695,8 @@
prop_value = ()
elif prop_type in ('int', 'float'):
prop_value = 0
+ elif prop_type == 'date':
+ prop_value = '1970/01/01 00:00:00 UTC' # DateTime(0) as UTC
else:
prop_value = ''
self.context._updateProperty(prop_id, prop_value)
Modified: Products.GenericSetup/trunk/docs/CHANGES.rst
===================================================================
--- Products.GenericSetup/trunk/docs/CHANGES.rst 2011-02-23 19:42:14 UTC (rev 120558)
+++ Products.GenericSetup/trunk/docs/CHANGES.rst 2011-02-24 08:28:59 UTC (rev 120559)
@@ -4,6 +4,10 @@
1.6.3 (unreleased)
------------------
+- Property import/export: Fixed two 'date' property issues.
+ Naive 'date' values are now exported without time zone. And purging
+ non-deletable 'date' properties is fixed.
+
- Export content objects whose 'manage_FTPget' returns a custom iterator
with 'file' and 'size' properties. https://bugs.launchpad.net/bugs/722726
Property changes on: Products.GenericSetup/trunk/docs/CHANGES.rst
___________________________________________________________________
Deleted: svn:mergeinfo
-
More information about the checkins
mailing list