[Checkins] SVN: Products.CMFCore/branches/2.1/Products/CMFCore/ - Properties export/import: Get the string encoding for property
Jens Vagelpohl
jens at dataflake.org
Wed Sep 24 16:02:40 EDT 2008
Log message for revision 91452:
- Properties export/import: Get the string encoding for property
imports from the import context and fall back to UTF-8, which
mirrors the behavior for exports. This fixes property export/import
round tripping.
(https://bugs.launchpad.net/zope-cmf/+bug/248853)
Changed:
U Products.CMFCore/branches/2.1/Products/CMFCore/CHANGES.txt
U Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/properties.py
U Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/tests/test_properties.py
-=-
Modified: Products.CMFCore/branches/2.1/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/branches/2.1/Products/CMFCore/CHANGES.txt 2008-09-24 19:57:57 UTC (rev 91451)
+++ Products.CMFCore/branches/2.1/Products/CMFCore/CHANGES.txt 2008-09-24 20:02:40 UTC (rev 91452)
@@ -4,6 +4,12 @@
2.1.3-beta (unreleased)
-----------------------
+- Properties export/import: Get the string encoding for property
+ imports from the import context and fall back to UTF-8, which
+ mirrors the behavior for exports. This fixes property export/import
+ round tripping.
+ (https://bugs.launchpad.net/zope-cmf/+bug/248853)
+
- Skinstool import: Fix imports that manipulate existing skins.
(https://bugs.launchpad.net/zope-cmf/+bug/161732)
Modified: Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/properties.py
===================================================================
--- Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/properties.py 2008-09-24 19:57:57 UTC (rev 91451)
+++ Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/properties.py 2008-09-24 20:02:40 UTC (rev 91452)
@@ -51,6 +51,8 @@
def _importNode(self, node):
"""Import the object from the DOM node.
"""
+ self._encoding = self.context.getProperty('default_charset', 'utf-8')
+
for child in node.childNodes:
if child.nodeName != 'property':
continue
Modified: Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/tests/test_properties.py
===================================================================
--- Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/tests/test_properties.py 2008-09-24 19:57:57 UTC (rev 91451)
+++ Products.CMFCore/branches/2.1/Products/CMFCore/exportimport/tests/test_properties.py 2008-09-24 20:02:40 UTC (rev 91452)
@@ -32,7 +32,7 @@
<property name="title">Foo</property>
<property name="default_charset" type="string">iso-8859-1</property>
<property name="foo_string" type="string">foo</property>
- <property name="bar_string" type="string">Bär</property>
+ <property name="bar_string" type="string">B\xe4r</property>
<property name="foo_boolean" type="boolean">False</property>
</site>
""".encode('utf-8')
@@ -73,7 +73,7 @@
obj._setPropValue('title', 'Foo')
obj._setProperty('default_charset', 'iso-8859-1', 'string')
obj._setProperty('foo_string', 'foo', 'string')
- obj._setProperty('bar_string', 'Bär', 'string')
+ obj._setProperty('bar_string', u'B\xe4r'.encode('iso-8859-1'), 'string')
obj._setProperty('foo_boolean', False, 'boolean')
def _verifyImport(self, obj):
@@ -82,7 +82,7 @@
self.assertEqual(type(obj.foo_string), str)
self.assertEqual(obj.foo_string, 'foo')
self.assertEqual(type(obj.bar_string), str)
- self.assertEqual(obj.bar_string, 'Bär')
+ self.assertEqual(obj.bar_string, u'B\xe4r'.encode('iso-8859-1'))
self.assertEqual(type(obj.foo_boolean), bool)
self.assertEqual(obj.foo_boolean, False)
@@ -231,11 +231,45 @@
self.assertEqual( site.getProperty('bar'), ('Bar',) )
+class roundtripSitePropertiesTests(_SitePropertiesSetup):
+
+ layer = ExportImportZCMLLayer
+
+ def test_nonascii_no_default_charset(self):
+ from Products.CMFCore.exportimport.properties \
+ import exportSiteProperties
+ from Products.CMFCore.exportimport.properties \
+ import importSiteProperties
+
+ NONASCII = u'B\xe4r'.encode('utf-8')
+ site = self._initSite(foo=0, bar=0)
+ site._updateProperty('title', NONASCII)
+
+ self.assertEquals(site.title, NONASCII)
+
+ # export the site properties
+ context = DummyExportContext( site )
+ exportSiteProperties(context)
+ filename, text, content_type = context._wrote[0]
+
+ # Clear the title property
+ site._updateProperty('title', '')
+ self.assertEquals(site.title, '')
+
+ # Import from the previous export
+ context = DummyImportContext(site)
+ context._files['properties.xml'] = text
+ importSiteProperties(context)
+
+ self.assertEquals(site.title, NONASCII)
+
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(PropertiesXMLAdapterTests),
unittest.makeSuite(exportSitePropertiesTests),
unittest.makeSuite(importSitePropertiesTests),
+ unittest.makeSuite(roundtripSitePropertiesTests),
))
if __name__ == '__main__':
More information about the Checkins
mailing list