[Checkins] SVN: plone.z3cform/trunk/ Add monkey patch to work around z3c.form bug in 1.9.0

Martin Aspeli optilude at gmx.net
Sun Apr 5 08:40:35 EDT 2009


Log message for revision 98867:
  Add monkey patch to work around z3c.form bug in 1.9.0

Changed:
  U   plone.z3cform/trunk/docs/HISTORY.txt
  U   plone.z3cform/trunk/plone/z3cform/__init__.py
  A   plone.z3cform/trunk/plone/z3cform/bbb/
  A   plone.z3cform/trunk/plone/z3cform/bbb/__init__.py
  A   plone.z3cform/trunk/plone/z3cform/bbb/term.py

-=-
Modified: plone.z3cform/trunk/docs/HISTORY.txt
===================================================================
--- plone.z3cform/trunk/docs/HISTORY.txt	2009-04-05 07:38:44 UTC (rev 98866)
+++ plone.z3cform/trunk/docs/HISTORY.txt	2009-04-05 12:40:34 UTC (rev 98867)
@@ -4,6 +4,9 @@
 0.5.4 - unreleased
 ------------------
 
+* Added monkey patch to fix a bug in z3c.form's ChoiceTerms on z3c.form 1.9.0.
+  [optilude]
+
 * Fix obvious bugs and dodgy naming in SingleCheckBoxWidget.
   [optilude]
 

Modified: plone.z3cform/trunk/plone/z3cform/__init__.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/__init__.py	2009-04-05 07:38:44 UTC (rev 98866)
+++ plone.z3cform/trunk/plone/z3cform/__init__.py	2009-04-05 12:40:34 UTC (rev 98867)
@@ -1,2 +1,6 @@
 import zope.i18nmessageid
 MessageFactory = zope.i18nmessageid.MessageFactory('plone.z3cform')
+
+# backport bug fixes
+from bbb import term
+term.apply_patch()
\ No newline at end of file

Added: plone.z3cform/trunk/plone/z3cform/bbb/term.py
===================================================================
--- plone.z3cform/trunk/plone/z3cform/bbb/term.py	                        (rev 0)
+++ plone.z3cform/trunk/plone/z3cform/bbb/term.py	2009-04-05 12:40:34 UTC (rev 98867)
@@ -0,0 +1,37 @@
+"""Monkey patch in a bug fix for Choice terms. No longer needed in z3c.form
+2.0.
+"""
+
+import logging
+import types
+from zope.schema.interfaces import IContextSourceBinder
+    
+def patched_init(self, context, request, form, field, widget):
+    self.context = context
+    self.request = request
+    self.form = form
+    self.field = field
+    self.widget = widget
+    if field.vocabulary is None or IContextSourceBinder.providedBy(field.vocabulary):
+        field = field.bind(context)
+    self.terms = field.vocabulary
+
+def apply_patch():
+    try:
+        import pkg_resources
+        from z3c.form.term import ChoiceTerms
+    except ImportError:
+        return False
+    
+    if not isinstance(ChoiceTerms, types.TypeType):
+        return False
+    try:
+        version = pkg_resources.get_distribution('z3c.form').version
+    except AttributeError:
+        return False
+    
+    if version != '1.9.0':
+        return False
+    
+    logging.getLogger('plone.z3cform').warn("Monkey patching z3c.form.term.ChoiceTerms to correctly bind fields")
+    ChoiceTerms.__init__ = patched_init



More information about the Checkins mailing list