prozorro_sale.tools.errors module

Package to provide a middleware for catch error Exception.

async prozorro_sale.tools.errors.aiohttp_change_response(msg, status_code, request=None)[source]

Method for change response if error was occurred.

Parameters
  • msg – error message

  • status_code – response status code

  • request (object) – Request

Returns

Response object.

Return type

aiohttp.web.Response

prozorro_sale.tools.errors.catch_error_middleware(errors: dict = None, response_constructor: Optional[Coroutine] = None) Callable[[aiohttp.web_request.Request, Callable[[Request], Awaitable[StreamResponse]]], Awaitable[aiohttp.web_response.StreamResponse]][source]

Middleware to handle unique exceptions from handlers.

Parameters
  • errors (dict, optional) – Custom application exception dictionary

  • response_constructor (coroutine, optional) – Coroutine for make Response

Returns

aiohttp Middleware

Example

>>> from prozorro_sale.tools.errors import catch_error_middleware
...
...
... ERRORS = {
...     KeyError: 400,
...     AttributeError: 200,
...     ValueError: (403, 'Forbidden. {}'),
...     Exception: (500, '{}')
... }
...
... async def response_constructor(msg, status_code, request=None):
...     return web.json_response({'message': msg}, status=status_code)
...
... app = web.Application(middlewares=[catch_error_middleware(ERRORS, response_constructor),])
prozorro_sale.tools.errors.expects(errors: Optional[dict] = None, response_constructor: Optional[Coroutine] = None, catch_all: bool = False)[source]

Decorator to handle unique exceptions from handlers.

Parameters
  • errors (dict) – Custom application exception dictionary

  • response_constructor (coroutine) – Coroutine for make Response

  • catch_all (bool) – catch all exceptions

Example

>>> @expects({
...     SomeException: 404,
...     SomeAnotherException: (403, 'Forbidden. {}')
... })
... def handler(request):
...     pass