[Zope-dev] schema upgrades with zope.formlib + FIX

Johannes Raggam raggam-nl at adm.at
Tue Feb 15 08:34:39 EST 2011


well, for schema upgrades, also following patch seems to be necessary:


>From c11064b8d8a7607d41071250f587f097f8c130a3 Mon Sep 17 00:00:00 2001
From: Johannes Raggam <raggam-nl at adm.at>
Date: Tue, 15 Feb 2011 14:29:56 +0100
Subject: [PATCH 2/2] gracefully set newvalue for upgraded schemas, where
oldvalue isn't available.

---
 zope/formlib/form.py |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/zope/formlib/form.py b/zope/formlib/form.py
index 0d3ade3..ff10168 100755
--- a/zope/formlib/form.py
+++ b/zope/formlib/form.py
@@ -532,7 +532,13 @@ def applyData(context, form_fields, data,
adapters=None):
 
         name = form_field.__name__
         newvalue = data.get(name, form_field) # using form_field as
marker
-        if (newvalue is not form_field) and (field.get(adapter) !=
newvalue):
+        try:
+            oldvalue = field.get(adapter)
+        except AttributeError:
+            # value not available after schema upgrade
+            # make sure that oldvalue != newwalue
+            oldvalue = not bool(newvalue)
+        if (newvalue is not form_field) and (oldvalue != newvalue):
             descriptions.setdefault(interface,
[]).append(field.__name__)
             field.set(adapter, newvalue)
 
-- 
1.7.1


On Tue, 2011-02-15 at 13:25 +0100, Hanno Schlichting wrote:
> On Tue, Feb 15, 2011 at 1:21 PM, Johannes Raggam <raggam-nl at adm.at> wrote:
> > while - IMO - zope.schema throws that error justifiably, i think
> > zope.formlib should handle it more gracefully in setUpEditWidgets. i
> > think, this error comes with every schema upgrade for zope.formlib based
> > edit-forms. so, what do you think of following patch?
> 
> The usual approach is to add new attributes as class attributes to the
> persistent object. Or write an actual database upgrade step, either
> via something like zope.generations or with a GenericSetup upgrade
> step.
> 
> But for zope.formlib it make indeed make sense to be more lenient
> here. So +0 on your patch.
> 
> Hanno

-- 
johannes raggam / thet
python plone zope development
http://johannes.raggam.co.at/
mailto:johannes at raggam.co.at
http://bluedynamics.com/



More information about the Zope-Dev mailing list