[Zope] preventing transaction rollback

Jonathan Hobbs toolkit at magma.ca
Sun Sep 19 08:55:47 EDT 2004


----- Original Message -----
From: "Sean Hastings" <whysean at softhome.net>
> I have a section of code that I want to have run only once during a
request.
> It mails out some information about the request. I want only one email per
> request even if a conflict occurs during the request. I am having no luck
> eliminating duplicate emails. I have tried this a few different ways now,
> but currently my code looks something like this:
>
> def theFunction(self,REQUEST):
> "docstring"
> ...do some stuff...
> get_transaction().commit()
> try:
> ...send the email...
> get_transaction().commit()
> except:
> pass
> ...do some more stuff...
> return self.return_page_template(REQUEST)
>
> I thought that this try block with a commit() would isolate the send mail
> code in its own transaction, and then catch any conflict exception and
> ignore it. But I am still getting multiple emails per transaction when
> multiple requests happen at the same time and conflicts occur.

An ugly solution:

Create a variable (property field) on a temporary folder (contents stored in
memory).  When you send an email have the emailer routine load a unique
identifier into the variable. In subsequent emails, check the contents of
the variable before sending the email.

As I said, 'ugly', but it should work!

HTH

Jonathan





More information about the Zope mailing list