import uuid
from aiohttp import web
from prozorro_sale.tools.context_variables import REQUEST_ID, PROCEDURE_ID, AUCTION_ID
[docs]@web.middleware
async def request_id_middleware(request, handler, *args, **kwargs):
"""
middleware for the func views
to set context variable REQUEST_ID and update header
"""
REQUEST_ID.set(request.headers.get('X-Request-ID', str(uuid.uuid4())))
response = await handler(request, *args, **kwargs)
try:
response.headers['X-Request-ID'] = REQUEST_ID.get('unknown')
except (AttributeError, KeyError):
...
return response
[docs]@web.middleware
async def procedure_id_middleware(request: web.Request, handler, *args, **kwargs) -> web.Response:
"""
middleware for the func views
to set context variable PROCEDURE_ID
"""
PROCEDURE_ID.set(request.match_info.get('procedure_id'))
return await handler(request, *args, **kwargs)
[docs]@web.middleware
async def auction_id_middleware(request: web.Request, handler, *args, **kwargs) -> web.Response:
"""
middleware for the func views
to set context variable AUCTION_ID
"""
AUCTION_ID.set(request.match_info.get('auction_id'))
return await handler(request, *args, **kwargs)
[docs]@web.middleware
async def request_unpack_params(request, handler, *args, **kwargs):
"""
middleware for the func views
to pass variables from url
as kwargs
"""
if 'swagger' in request.path:
return await handler(request, *args, **kwargs)
return await handler(request, *args, **request.match_info, **kwargs)