def gather_parameters(self, request, response, context, api_version=None, **input_parameters): """Gathers and returns all parameters that will be used for this endpoint""" input_parameters.update(request.params) if self.parse_body and request.content_length: body = request.stream content_type, content_params = parse_content_type(request.content_type) body_formatter = body and self.inputs.get(content_type, self.api.http.input_format(content_type)) if body_formatter: body = body_formatter(body, **content_params) if 'body' in self.all_parameters: input_parameters['body'] = body if isinstance(body, dict): input_parameters.update(body) elif 'body' in self.all_parameters: input_parameters['body'] = None if 'request' in self.all_parameters: input_parameters['request'] = request if 'response' in self.all_parameters: input_parameters['response'] = response if 'api_version' in self.all_parameters: input_parameters['api_version'] = api_version for parameter, directive in self.directives.items(): arguments = (self.defaults[parameter], ) if parameter in self.defaults else () input_parameters[parameter] = directive(*arguments, response=response, request=request, api=self.api, api_version=api_version, context=context, interface=self) return input_parameters
def request(self, method, url, url_params=empty.dict, headers=empty.dict, timeout=None, **params): function = self.api.http.versioned.get(self.version, {}).get(url, None) if not function: function = self.api.http.versioned.get(None, {}).get(url, None) if not function: if 404 in self.raise_on: raise requests.HTTPError('404 Not Found occured for url: {0}'.format(url)) return Response('Not Found', 404, {'content-type', 'application/json'}) interface = function.interface.http response = falcon.Response() request = Request(None, None, empty.dict) context = self.api.context_factory(api=self.api, api_version=self.version, interface=interface) interface.set_response_defaults(response) params.update(url_params) params = interface.gather_parameters(request, response, context, api_version=self.version, **params) errors = interface.validate(params, context) if errors: interface.render_errors(errors, request, response) else: interface.render_content(interface.call_function(params), context, request, response) data = BytesIO(response.data) content_type, content_params = parse_content_type(response._headers.get('content-type', '')) if content_type in input_format: data = input_format[content_type](data, **content_params) status_code = int(''.join(re.findall('\d+', response.status))) if status_code in self.raise_on: raise requests.HTTPError('{0} occured for url: {1}'.format(response.status, url)) return Response(data, status_code, response._headers)
def request(self, method, url, url_params=empty.dict, headers=empty.dict, timeout=None, **params): url = "{0}/{1}".format(self.version, url.lstrip("/")) if self.version else url kwargs = {"json" if self.json_transport else "params": params} response = self.session.request(method, self.endpoint + url.format(url_params), headers=headers, **kwargs) data = BytesIO(response.content) content_type, content_params = parse_content_type( response.headers.get("content-type", "")) if content_type in input_format: data = input_format[content_type](data, **content_params) if response.status_code in self.raise_on: raise requests.HTTPError("{0} {1} occured for url: {2}".format( response.status_code, response.reason, url)) return Response(data, response.status_code, response.headers)
def gather_parameters(self, request, response, context, api_version=None, **input_parameters): """Gathers and returns all parameters that will be used for this endpoint""" input_parameters.update(request.params) if self.parse_body and request.content_length: body = request.stream content_type, content_params = parse_content_type(request.content_type) body_formatter = body and self.inputs.get(content_type, self.api.http.input_format(content_type)) if body_formatter: body = body_formatter(body, content_length=request.content_length, **content_params) if 'body' in self.all_parameters: input_parameters['body'] = body if isinstance(body, dict): input_parameters.update(body) elif 'body' in self.all_parameters: input_parameters['body'] = None if 'request' in self.all_parameters: input_parameters['request'] = request if 'response' in self.all_parameters: input_parameters['response'] = response if 'api_version' in self.all_parameters: input_parameters['api_version'] = api_version for parameter, directive in self.directives.items(): arguments = (self.defaults[parameter], ) if parameter in self.defaults else () input_parameters[parameter] = directive(*arguments, response=response, request=request, api=self.api, api_version=api_version, context=context, interface=self) return input_parameters
def request(self, method, url, url_params=empty.dict, headers=empty.dict, timeout=None, **params): function = self.api.http.versioned.get(self.version, {}).get(url, None) if not function: function = self.api.http.versioned.get(None, {}).get(url, None) if not function: if 404 in self.raise_on: raise requests.HTTPError( "404 Not Found occured for url: {0}".format(url)) return Response("Not Found", 404, {"content-type", "application/json"}) interface = function.interface.http response = falcon.Response() request = Request(None, None, empty.dict) context = self.api.context_factory(api=self.api, api_version=self.version, interface=interface) interface.set_response_defaults(response) params.update(url_params) params = interface.gather_parameters(request, response, context, api_version=self.version, **params) errors = interface.validate(params, context) if errors: interface.render_errors(errors, request, response) else: interface.render_content(interface.call_function(params), context, request, response) data = BytesIO(response.data) content_type, content_params = parse_content_type( response._headers.get("content-type", "")) if content_type in input_format: data = input_format[content_type](data, **content_params) status_code = int("".join(re.findall("\d+", response.status))) if status_code in self.raise_on: raise requests.HTTPError("{0} occured for url: {1}".format( response.status, url)) return Response(data, status_code, response._headers)
def request(self, method, url, url_params=empty.dict, headers=empty.dict, timeout=None, **params): url = "{0}/{1}".format(self.version, url.lstrip('/')) if self.version else url kwargs = {'json' if self.json_transport else 'params': params} response = self.session.request(method, self.endpoint + url.format(url_params), headers=headers, **kwargs) data = BytesIO(response.content) content_type, content_params = parse_content_type(response.headers.get('content-type', '')) if content_type in input_format: data = input_format[content_type](data, **content_params) if response.status_code in self.raise_on: raise requests.HTTPError('{0} {1} occured for url: {2}'.format(response.status_code, response.reason, url)) return Response(data, response.status_code, response.headers)