On 24 February 2011 10:17, Chris Withers <ch...@simplistix.co.uk> wrote: > Hi Jim, > > The current __exit__ for transaction managers looks like this: > > def __exit__(self, t, v, tb): > if v is None: > self.commit() > else: > self.abort() > > ..which means that if you're using the transaction package as a context > manager and, say, a relational database integrity constraint is > violated, then you're left with a hosed transaction that still needs > aborting. > > How would you feel about the above changing to: > > def __exit__(self, t, v, tb): > if v is None: > try: > self.commit() > except: > self.abort() > raise > else: > self.abort() > > If this is okay, I'll be happy to write the tests and make the changes > provided someone does a release when I have...
Looking at the way ZPublisher handles this, I think you're right. I think you might also need to modify the __exit__ in Attempt, which additionally handles retrying transactions that fail. Laurence _______________________________________________ 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 )