async def wrapper(request: ConnexionRequest): if "Authorization" not in request.headers: # Otherwise we will never reach self.extract_token and self._set_user request.headers = CIMultiDict(request.headers) request.headers["Authorization"] = "Bearer null" token_info = get_authorization_info(auth_funcs, request, required_scopes) # token_info = {"token": <token>} at this point, now do the real work await self._set_user(request.context, token_info["token"]) return await function(request)
def get_request(cls, req): """Convert aiohttp request to connexion :param req: instance of aiohttp.web.Request :return: connexion request instance :rtype: ConnexionRequest """ url = str(req.url) logger.debug('Getting data and status code', extra={ 'has_body': req.has_body, 'url': url }) query = parse_qs(req.rel_url.query_string) headers = {k.decode(): v.decode() for k, v in req.raw_headers} body = None if req.can_read_body: body = yield from req.read() return ConnexionRequest(url=url, method=req.method.lower(), path_params=dict(req.match_info), query=query, headers=headers, body=body, json_getter=lambda: cls.jsonifier.loads(body), files={}, context=req)
def get_request(cls, *args, **params): # type: (*Any, **Any) -> ConnexionRequest """Gets ConnexionRequest instance for the operation handler result. Status Code and Headers for response. If only body data is returned by the endpoint function, then the status code will be set to 200 and no headers will be added. If the returned object is a flask.Response then it will just pass the information needed to recreate it. :rtype: ConnexionRequest """ context_dict = {} setattr(flask._request_ctx_stack.top, 'connexion_context', context_dict) flask_request = flask.request request = ConnexionRequest( flask_request.url, flask_request.method, headers=flask_request.headers, form=flask_request.form, query=flask_request.args, body=flask_request.get_data(), json_getter=lambda: flask_request.get_json(silent=True), files=flask_request.files, path_params=params, context=context_dict ) logger.debug('Getting data and status code', extra={ 'data': request.body, 'data_type': type(request.body), 'url': request.url }) return request
def get_request(cls, req): """Convert aiohttp request to connexion :param req: instance of aiohttp.web.Request :return: connexion request instance :rtype: ConnexionRequest """ url = str(req.url) logger.debug('Getting data and status code', extra={'has_body': req.has_body, 'url': url}) query = parse_qs(req.rel_url.query_string) headers = req.headers body = None if req.body_exists: body = yield from req.read() data = yield from req.post() files = {k: v for k, v in data.items() if isinstance(v, FileField)} return ConnexionRequest(url=url, method=req.method.lower(), path_params=dict(req.match_info), query=query, headers=headers, body=body, json_getter=lambda: cls.jsonifier.loads(body), files=files, context=req)
def test_apiuriparser_call(q_value): query_dict.update({'q': q_value}) uri_parser = APIUriParser({}, {}) function = MagicMock() request = ConnexionRequest(url=q_value, method='method_value', query=query_dict) expected_request = ConnexionRequest( url=q_value, method='method_value', query={ k: v.lower() if k in LOWER_FIELDS else v for k, v in query_dict.items() }) # uri_parser(function)(request): # It's calling the __call__ class method. # The wrapper is being parametrized by the second parameter between brackets. if ';' in q_value: with pytest.raises(APIError, match='2009 .*'): uri_parser(function)(request) else: uri_parser(function)(request) assert request.query == expected_request.query