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

2011-02-15 Thread Hanno Schlichting
On Tue, Feb 15, 2011 at 1:21 PM, Johannes Raggam raggam...@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
___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )


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

2011-02-15 Thread Johannes Raggam
well, for schema upgrades, also following patch seems to be necessary:


From c11064b8d8a7607d41071250f587f097f8c130a3 Mon Sep 17 00:00:00 2001
From: Johannes Raggam raggam...@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...@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:johan...@raggam.co.at
http://bluedynamics.com/

___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )