[Zope] preventing transaction rollback

Sean Hastings whysean at softhome.net
Sun Sep 19 03:38:26 EDT 2004


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.

How can I isolate a part of the code so that it can never roll back and
execute again?

--Sean



More information about the Zope mailing list