from __future__ import absolute_import
import django
from contextlib import contextmanager
from django.db import transaction
if django.VERSION < (1, 6): # pragma: no cover
def get_queryset(s):
return s.get_query_set()
else:
def get_queryset(s): # noqa
return s.get_queryset()
try:
from django.db.transaction import atomic # noqa
except ImportError: # pragma: no cover
try:
from django.db.transaction import Transaction # noqa
except ImportError:
@contextmanager
def commit_on_success(*args, **kwargs):
try:
transaction.enter_transaction_management(*args, **kwargs)
transaction.managed(True, *args, **kwargs)
try:
yield
except:
if transaction.is_dirty(*args, **kwargs):
transaction.rollback(*args, **kwargs)
raise
else:
if transaction.is_dirty(*args, **kwargs):
try:
transaction.commit(*args, **kwargs)
except:
transaction.rollback(*args, **kwargs)
raise
finally:
transaction.leave_transaction_management(*args, **kwargs)
else: # pragma: no cover
from django.db.transaction import commit_on_success # noqa
commit_unless_managed = transaction.commit_unless_managed
rollback_unless_managed = transaction.rollback_unless_managed
else:
@contextmanager
def commit_on_success(using=None): # noqa
connection = transaction.get_connection(using)
if connection.features.autocommits_when_autocommit_is_off:
# ignore stupid warnings and errors
yield
else:
with transaction.atomic(using):
yield
def commit_unless_managed(*args, **kwargs): # noqa
pass
def rollback_unless_managed(*args, **kwargs): # noqa
pass