[Checkins] SVN: z3c.form/trunk/ Allowed persistent.mapping.PersistentMapping and persistent.dict.PersistentDict as data classes for datamanager.DictionaryField.
Michael Howitz
mh at gocept.com
Thu Jul 16 14:41:15 EDT 2009
Log message for revision 101947:
Allowed persistent.mapping.PersistentMapping and persistent.dict.PersistentDict as data classes for datamanager.DictionaryField.
Changed:
U z3c.form/trunk/CHANGES.txt
U z3c.form/trunk/src/z3c/form/datamanager.py
U z3c.form/trunk/src/z3c/form/datamanager.txt
-=-
Modified: z3c.form/trunk/CHANGES.txt
===================================================================
--- z3c.form/trunk/CHANGES.txt 2009-07-16 16:36:04 UTC (rev 101946)
+++ z3c.form/trunk/CHANGES.txt 2009-07-16 18:41:15 UTC (rev 101947)
@@ -5,9 +5,12 @@
Version 2.1.0 (unreleased)
--------------------------
-- Feature: The `DictionaryFieldManager` now allows all mappings. By default,
- however, the field manager is only registered for dict, because it would
- otherwise get picked up in undesired scenarios.
+- Feature: The `DictionaryFieldManager` now allows all mappings
+ (``zope.interface.common.mapping.IMapping``), even
+ ``persistent.mapping.PersistentMapping`` and
+ ``persistent.dict.PersistentDict``. By default, however, the field
+ manager is only registered for dict, because it would otherwise get
+ picked up in undesired scenarios.
Version 2.0.0 (2009-06-14)
--------------------------
Modified: z3c.form/trunk/src/z3c/form/datamanager.py
===================================================================
--- z3c.form/trunk/src/z3c/form/datamanager.py 2009-07-16 16:36:04 UTC (rev 101946)
+++ z3c.form/trunk/src/z3c/form/datamanager.py 2009-07-16 18:41:15 UTC (rev 101947)
@@ -20,6 +20,8 @@
import zope.interface
import zope.component
import zope.schema
+import persistent.mapping
+import persistent.dict
from zope.interface.common import mapping
from zope.security.interfaces import ForbiddenAttribute
from zope.security.checker import canAccess, canWrite, Proxy
@@ -90,12 +92,27 @@
return True
class DictionaryField(DataManager):
- """Dictionary field."""
+ """Dictionary field.
+
+ NOTE: Even though, this data manager allows nearly all kinds of
+ mappings, by default it is only registered for dict, because it
+ would otherwise get picked up in undesired scenarios. If you want
+ to use for another mapping, register the appropriate adapter in
+ your application.
+
+ """
+
zope.component.adapts(
dict, zope.schema.interfaces.IField)
+ _allowed_data_classes = (
+ dict,
+ persistent.mapping.PersistentMapping,
+ persistent.dict.PersistentDict,
+ )
+
def __init__(self, data, field):
- if (not isinstance(data, dict) and
+ if (not isinstance(data, self._allowed_data_classes) and
not mapping.IMapping.providedBy(data)):
raise ValueError("Data are not a dictionary: %s" %type(data))
self.data = data
Modified: z3c.form/trunk/src/z3c/form/datamanager.txt
===================================================================
--- z3c.form/trunk/src/z3c/form/datamanager.txt 2009-07-16 16:36:04 UTC (rev 101946)
+++ z3c.form/trunk/src/z3c/form/datamanager.txt 2009-07-16 18:41:15 UTC (rev 101947)
@@ -262,10 +262,18 @@
The datamanager can really only deal with dictionaries and mapping types:
>>> import zope.interface.common.mapping
+ >>> import persistent.mapping
+ >>> import persistent.dict
>>> class MyMapping(object):
... zope.interface.implements(zope.interface.common.mapping.IMapping)
>>> datamanager.DictionaryField(MyMapping(), IPerson['name'])
<z3c.form.datamanager.DictionaryField object at ...>
+ >>> datamanager.DictionaryField(persistent.mapping.PersistentMapping(),
+ ... IPerson['name'])
+ <z3c.form.datamanager.DictionaryField object at ...>
+ >>> datamanager.DictionaryField(persistent.dict.PersistentDict(),
+ ... IPerson['name'])
+ <z3c.form.datamanager.DictionaryField object at ...>
>>> datamanager.DictionaryField([], IPerson['name'])
Traceback (most recent call last):
More information about the Checkins
mailing list