# -*- coding: utf-8 -*-
"""
Module containing error views.
"""
import logging
from pyramid.view import view_config, notfound_view_config
from sqlalchemy.exc import IntegrityError
import sys
from atramhasis.errors import SkosRegistryNotFoundException, ValidationError
from atramhasis.protected_resources import ProtectedResourceException
from skosprovider.exceptions import ProviderUnavailableException
from pyramid.httpexceptions import HTTPMethodNotAllowed
log = logging.getLogger(__name__)
[docs]@notfound_view_config(renderer='json')
def failed_not_found(exc, request):
"""
View invoked when a resource could not be found.
"""
log.debug(exc.explanation)
request.response.status_int = 404
return {'message': exc.explanation}
[docs]@view_config(context=SkosRegistryNotFoundException, renderer='json')
def failed_skos(exc, request):
"""
View invoked when Atramhasis can't find a SKOS registry.
"""
log.error(exc.value, exc_info=sys.exc_info())
request.response.status_int = 500
return {'message': exc.value}
[docs]@view_config(context=ValidationError, renderer='json')
def failed_validation(exc, request):
"""
View invoked when bad data was submitted to Atramhasis.
"""
log.debug("'message': {0}, 'errors': {1}".format(exc.value, exc.errors))
request.response.status_int = 400
return {'message': exc.value, 'errors': exc.errors}
[docs]@view_config(context=ProtectedResourceException, renderer='json')
def protected(exc, request):
"""
when a protected operation is called on a resource that is still referenced
"""
log.warning("'message': {0}, 'referenced_in': {1}".format(exc.value, exc.referenced_in))
request.response.status_int = 409
return {'message': exc.value, 'referenced_in': exc.referenced_in}
[docs]@view_config(context=ProviderUnavailableException, renderer='json')
def provider_unavailable(exc, request):
"""
View invoked when ProviderUnavailableException was raised.
"""
log.error(exc, exc_info=sys.exc_info())
request.response.status_int = 503
return {'message': exc.message}
[docs]@view_config(context=IntegrityError, renderer='json')
def data_integrity(exc, request):
"""
View invoked when IntegrityError was raised.
"""
log.warning(exc)
request.response.status_int = 409
return {'message': 'this operation violates the data integrity and could not be executed '}
[docs]@view_config(context=Exception, renderer='json')
def failed(exc, request): # pragma no cover
"""
View invoked when bad data was submitted to Atramhasis.
"""
log.error(exc, exc_info=sys.exc_info())
request.response.status_int = 500
return {'message': 'unexpected server error'}
[docs]@view_config(context=HTTPMethodNotAllowed, renderer='json')
def failed_not_method_not_allowed(exc, request):
"""
View invoked when a method is not allowed.
"""
log.debug(exc.explanation)
request.response.status_int = 405
return {'message': exc.explanation}