Skip to content

Instantly share code, notes, and snippets.

@mmerickel
Last active July 13, 2018 15:51
Show Gist options
  • Save mmerickel/7e1911df61cb2bf4007d35e8dbaae8a4 to your computer and use it in GitHub Desktop.
Save mmerickel/7e1911df61cb2bf4007d35e8dbaae8a4 to your computer and use it in GitHub Desktop.
a context for helping with explicit transaction managers
from contextlib import contextmanager, suppress
from transaction.interfaces import NoTransaction
class DoomedAbort(Exception):
pass
@contextmanager
def tm_context(tm):
tm.begin()
try:
yield tm.get()
with suppress(NoTransaction):
if tm.isDoomed():
raise DoomedAbort
tm.commit()
except DoomedAbort:
with suppress(NoTransaction):
tm.abort()
except BaseException as ex:
with suppress(NoTransaction):
tm.abort()
raise ex
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment