[Zope3-checkins] SVN: Zope3/trunk/ Attempt resolving issue http://www.zope.org/Collectors/Zope3-dev/655 by removing abort() calls from zope.app.form and modifying the publication object to not attempt a commit of doomed transactions.

Brian Sutherland jinty at web.de
Sat Mar 10 07:36:46 EST 2007


On Fri, Mar 09, 2007 at 09:59:43PM +0100, Christian Theune wrote:
> Hi,
> 
> thanks for starting to use txn.doom()!
> 
> However, I think this change in zope.app.publication needs a bit more
> testing than the one test in zope.app.form.browser.

No worries, I've added a test 73135. Let me know if you think there is
any more behaviour that needs testing.

> 
> Christian
> 
> Am Sonntag, den 04.03.2007, 17:19 -0500 schrieb Brian Sutherland:
> > Log message for revision 72976:
> >   Attempt resolving issue http://www.zope.org/Collectors/Zope3-dev/655 by removing abort() calls from zope.app.form and modifying the publication object to not attempt a commit of doomed transactions.
> > 
> > Changed:
> >   U   Zope3/trunk/doc/CHANGES.txt
> >   U   Zope3/trunk/src/zope/app/form/browser/editview.py
> >   U   Zope3/trunk/src/zope/app/form/browser/formview.py
> >   U   Zope3/trunk/src/zope/app/form/browser/ftests/test_editview.py
> >   U   Zope3/trunk/src/zope/app/publication/zopepublication.py
> > 
> > -=-
> > Modified: Zope3/trunk/doc/CHANGES.txt
> > ===================================================================
> > --- Zope3/trunk/doc/CHANGES.txt	2007-03-04 21:03:50 UTC (rev 72975)
> > +++ Zope3/trunk/doc/CHANGES.txt	2007-03-04 22:19:14 UTC (rev 72976)
> > @@ -102,6 +102,10 @@
> >          session data for anonymous requests. This reduces zodb
> >          conflicts for high-traffic sites with many anonymous requests.
> >  
> > +      - Change the publication object to abort the current transaction if
> > +        the trasaction was doomed. Related to:
> > +        http://www.zope.org/Collectors/Zope3-dev/655.
> > +
> >      Restructuring
> >  
> >        - Moved IBroken to zope.app.broken.interfaces to avoid cyclic imports.
> > @@ -355,10 +359,13 @@
> >        - Added ObjectModifiedEvent when a text file object is modified through
> >          the edit form in the ZMI.
> >  
> > +      - Resolved http://www.zope.org/Collectors/Zope3-dev/655 by having
> > +        zope.app.form use the transaction.doom() interface.
> > +
> >      Much thanks to everyone who contributed to this release:
> >  
> >        Jim Fulton, Dmitry Vasiliev, Martijn Faassen, Christian Theune, Wolfgang
> > -      Schnerring, Fred Drake, Marius Gedminas, Baiju M
> > +      Schnerring, Fred Drake, Marius Gedminas, Baiju M, Brian Sutherland
> >  
> >    ------------------------------------------------------------------
> >  
> > 
> > Modified: Zope3/trunk/src/zope/app/form/browser/editview.py
> > ===================================================================
> > --- Zope3/trunk/src/zope/app/form/browser/editview.py	2007-03-04 21:03:50 UTC (rev 72975)
> > +++ Zope3/trunk/src/zope/app/form/browser/editview.py	2007-03-04 22:19:14 UTC (rev 72976)
> > @@ -102,7 +102,7 @@
> >              except WidgetsError, errors:
> >                  self.errors = errors
> >                  status = _("An error occurred.")
> > -                transaction.abort()
> > +                transaction.doom()
> >              else:
> >                  setUpEditWidgets(self, self.schema, source=self.adapted,
> >                                   ignoreStickyValues=True, 
> > 
> > Modified: Zope3/trunk/src/zope/app/form/browser/formview.py
> > ===================================================================
> > --- Zope3/trunk/src/zope/app/form/browser/formview.py	2007-03-04 21:03:50 UTC (rev 72975)
> > +++ Zope3/trunk/src/zope/app/form/browser/formview.py	2007-03-04 22:19:14 UTC (rev 72976)
> > @@ -13,7 +13,7 @@
> >  ##############################################################################
> >  """Form View Classes
> >  
> > -$Id: editview.py 29143 2005-02-14 22:43:16Z srichter $
> > +$Id$
> >  """
> >  __docformat__ = 'restructuredtext'
> >  
> > @@ -76,7 +76,7 @@
> >              except WidgetsError, errors:
> >                  self.errors = errors
> >                  status = _("An error occurred.")
> > -                transaction.abort()
> > +                transaction.doom()
> >              else:
> >                  if changed:
> >                      status = self.setData(self.data)
> > 
> > Modified: Zope3/trunk/src/zope/app/form/browser/ftests/test_editview.py
> > ===================================================================
> > --- Zope3/trunk/src/zope/app/form/browser/ftests/test_editview.py	2007-03-04 21:03:50 UTC (rev 72975)
> > +++ Zope3/trunk/src/zope/app/form/browser/ftests/test_editview.py	2007-03-04 22:19:14 UTC (rev 72976)
> > @@ -24,6 +24,7 @@
> >  from zope.schema import TextLine
> >  from zope.traversing.api import traverse
> >  
> > +from zope.app.form.browser.editview import EditView
> >  from zope.app.form.testing import AppFormLayer
> >  from zope.app.form.browser.ftests.support import *
> >  from zope.app.testing.functional import BrowserTestCase
> > @@ -46,7 +47,7 @@
> >  
> >      def test_rollback_on_error(self):
> >          """Tests rollback when a widget error occurs.
> > -        
> > +
> >          When one or more errors are generated by input widgets, the current
> >          transaction should be rolledback to ensure object integrity.
> >          """
> > @@ -55,13 +56,25 @@
> >          self.getRootFolder()['foo'].optional_text = u'initial optional'
> >          transaction.commit()
> >  
> > -        # submit form with legal value for optional_text and invalid for 
> > +        # submit form with legal value for optional_text and invalid for
> >          # required_text
> > -        response = self.publish('/foo/edit.html', form={
> > -            'field.optional_text': u'',
> > -            'field.required_text': u'',
> > -            'UPDATE_SUBMIT': ''})
> > -        self.assertEqual(response.getStatus(), 200)
> > +        old_update = EditView.update
> > +        try:
> > +            def new_update(self):
> > +                # This update changes something after form validation has failed.
> > +                # Side effects like this should not be committed.
> > +                # http://www.zope.org/Collectors/Zope3-dev/655
> > +                result = old_update(self)
> > +                self.context.required_text = u'changed after form validation'
> > +                return result
> > +            EditView.update = new_update
> > +            response = self.publish('/foo/edit.html', form={
> > +                'field.optional_text': u'',
> > +                'field.required_text': u'',
> > +                'UPDATE_SUBMIT': ''})
> > +            self.assertEqual(response.getStatus(), 200)
> > +        finally:
> > +            EditView.update = old_update
> >  
> >          # confirm that one errors exists
> >          self.assert_(patternExists(
> > 
> > Modified: Zope3/trunk/src/zope/app/publication/zopepublication.py
> > ===================================================================
> > --- Zope3/trunk/src/zope/app/publication/zopepublication.py	2007-03-04 21:03:50 UTC (rev 72975)
> > +++ Zope3/trunk/src/zope/app/publication/zopepublication.py	2007-03-04 22:19:14 UTC (rev 72976)
> > @@ -162,10 +162,12 @@
> >  
> >      def afterCall(self, request, ob):
> >          txn = transaction.get()
> > -        self.annotateTransaction(txn, request, ob)
> > +        if txn.isDoomed():
> > +            txn.abort()
> > +        else:
> > +            self.annotateTransaction(txn, request, ob)
> > +            txn.commit()
> >  
> > -        txn.commit()
> > -
> >      def endRequest(self, request, ob):
> >          endInteraction()
> >          notify(EndRequestEvent(ob, request))
> > 
> > _______________________________________________
> > Zope3-Checkins mailing list
> > Zope3-Checkins at zope.org
> > http://mail.zope.org/mailman/listinfo/zope3-checkins
> -- 
> gocept gmbh & co. kg - forsterstraße 29 - 06112 halle/saale - germany
> www.gocept.com - ct at gocept.com - phone +49 345 122 9889 7 -
> fax +49 345 122 9889 1 - zope and plone consulting and development



-- 
Brian Sutherland


More information about the Zope3-Checkins mailing list