from webob.exc import HTTPRedirection

from bazbase import db
from . import util

class TransactionMiddleware(object):
    """Use bazbase's transactions for a request."""

    def __init__(self,app):
        self.app = app

    def __call__(self,environ,start_response):
        db.begin_transaction()
        try:
            res = self.app(environ, start_response)
        except:
            db.abort_transaction()
            raise
        else:
            if util.is_preview():
                db.abort_transaction()
            else:
                db.commit_transaction()
        return res
