Example #1
0
 def __call__(self, environ, start_response):
     environ['paste.transaction_manager'] = manager = Manager()
     # This makes sure nothing else traps unexpected exceptions:
     environ['paste.throw_errors'] = True
     return catch_errors(self.application, environ, start_response,
                         error_callback=manager.error,
                         ok_callback=manager.finish)
Example #2
0
 def basic_transaction(environ, start_response):
     conn = factory(environ)
     environ['paste.connection'] = conn
     should_commit = [500]
     def finalizer(exc_info=None):
         if exc_info:
             if isinstance(exc_info[1], HTTPException):
                 should_commit.append(exc_info[1].code)
         if should_commit.pop() < 400:
             conn.commit()
         else:
             try:
                 conn.rollback()
             except:
                 # TODO: check if rollback has already happened
                 return
         conn.close()
     def basictrans_start_response(status, headers, exc_info = None):
         should_commit.append(int(status.split(" ")[0]))
         return start_response(status, headers, exc_info)
     return catch_errors(application, environ, basictrans_start_response,
                         finalizer, finalizer)