barker/barker/transactional_view_deriver.py

39 lines
1.1 KiB
Python

import transaction
from pyramid.response import Response
from sqlalchemy.exc import OperationalError, IntegrityError, DBAPIError
from barker.models.validation_exception import ValidationError
def transactional_view(view, info):
if info.options.get("trans"):
def wrapper_view(context, request):
try:
response = view(context, request)
except (
ValidationError,
ValueError,
KeyError,
AttributeError,
TypeError,
OperationalError,
IntegrityError,
DBAPIError,
) as ex:
transaction.abort()
response = Response()
response.status_int = 500
response.content_type = "application/json"
response.json = {"Error": "Failed validation: {0!s}".format(ex)}
return response
return wrapper_view
return view
# def transactional_view(view, info):
# return view
transactional_view.options = ("trans",)