[Checkins] SVN: zope.schema/trunk/ fix KeyError on DefaultProperty if field doesn't have defaultFactory. this could happen for persistent fields created before defaultFactory was added

David Glick cvs-admin at zope.org
Fri Nov 9 20:06:39 UTC 2012


Log message for revision 128214:
  fix KeyError on DefaultProperty if field doesn't have defaultFactory. this could happen for persistent fields created before defaultFactory was added

Changed:
  U   zope.schema/trunk/CHANGES.txt
  U   zope.schema/trunk/src/zope/schema/_bootstrapfields.py
  U   zope.schema/trunk/src/zope/schema/tests/test__bootstrapfields.py

-=-
Modified: zope.schema/trunk/CHANGES.txt
===================================================================
--- zope.schema/trunk/CHANGES.txt	2012-11-09 20:05:41 UTC (rev 128213)
+++ zope.schema/trunk/CHANGES.txt	2012-11-09 20:06:38 UTC (rev 128214)
@@ -4,7 +4,7 @@
 4.2.1 (unreleased)
 ------------------
 
-- TBD
+- Fix the default property of fields that have no defaultFactory attribute.
 
 
 4.2.0 (2012-05-12)

Modified: zope.schema/trunk/src/zope/schema/_bootstrapfields.py
===================================================================
--- zope.schema/trunk/src/zope/schema/_bootstrapfields.py	2012-11-09 20:05:41 UTC (rev 128213)
+++ zope.schema/trunk/src/zope/schema/_bootstrapfields.py	2012-11-09 20:06:38 UTC (rev 128214)
@@ -61,7 +61,7 @@
 
     def __get__(self, inst, owner):
         name, check = self._info
-        defaultFactory = inst.__dict__['defaultFactory']
+        defaultFactory = inst.__dict__.get('defaultFactory')
         # If there is no default factory, simply return the default.
         if defaultFactory is None:
             return inst.__dict__[name]

Modified: zope.schema/trunk/src/zope/schema/tests/test__bootstrapfields.py
===================================================================
--- zope.schema/trunk/src/zope/schema/tests/test__bootstrapfields.py	2012-11-09 20:05:41 UTC (rev 128213)
+++ zope.schema/trunk/src/zope/schema/tests/test__bootstrapfields.py	2012-11-09 20:06:38 UTC (rev 128214)
@@ -90,6 +90,14 @@
         inst._prop = 'PROP'
         self.assertEqual(inst.prop, 'PROP')
 
+    def test__get___wo_defaultFactory_in_dict(self):
+        class Test(DummyInst):
+            _prop = None
+            prop = self._makeOne('_prop')
+        inst = Test()
+        inst._prop = 'PROP'
+        self.assertEqual(inst.prop, 'PROP')
+
     def test___get___w_defaultFactory_not_ICAF_no_check(self):
         class Test(DummyInst):
             _prop = None



More information about the checkins mailing list