Esempio n. 1
0
File: use.py Progetto: void4/hug
    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, encoding) = separate_encoding(
            response.headers.get('content-type', ''), 'utf-8')
        if content_type in input_format:
            data = input_format[content_type](data, encoding)

        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)
Esempio n. 2
0
    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)
        interface.set_response_defaults(response)

        params.update(url_params)
        params = interface.gather_parameters(request, response, api_version=self.version, **params)
        errors = interface.validate(params)
        if errors:
            interface.render_errors(errors, request, response)
        else:
            interface.render_content(interface.call_function(**params), request, response)

        data = BytesIO(response.data)
        (content_type, encoding) = separate_encoding(response._headers.get('content-type', ''), 'utf-8')
        if content_type in input_format:
            data = input_format[content_type](data, encoding)

        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)
Esempio n. 3
0
    def gather_parameters(self, request, response, 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 is not None:
            body = request.stream
            content_type, encoding = separate_encoding(request.content_type)
            body_formatter = body and self.api.http.input_format(content_type)
            if body_formatter:
                body = body_formatter(body, encoding) if encoding is not None else body_formatter(body)
            if 'body' in self.parameters:
                input_parameters['body'] = body
            if isinstance(body, dict):
                input_parameters.update(body)
        elif 'body' in self.parameters:
            input_parameters['body'] = None

        if 'request' in self.parameters:
            input_parameters['request'] = request
        if 'response' in self.parameters:
            input_parameters['response'] = response
        if 'api_version' in self.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, interface=self)

        return input_parameters
Esempio n. 4
0
    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)
        interface.set_response_defaults(response)

        params.update(url_params)
        params = interface.gather_parameters(request, response, api_version=self.version, **params)
        errors = interface.validate(params)
        if errors:
            interface.render_errors(errors, request, response)
        else:
            interface.render_content(interface.call_function(**params), request, response)

        data = BytesIO(response.data)
        (content_type, encoding) = separate_encoding(response._headers.get('content-type', ''), 'utf-8')
        if content_type in input_format:
            data = input_format[content_type](data, encoding)

        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)
Esempio n. 5
0
    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, encoding) = separate_encoding(response.headers.get('content-type', ''), 'utf-8')
        if content_type in input_format:
            data = input_format[content_type](data, encoding)

        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)
Esempio n. 6
0
    def gather_parameters(self,
                          request,
                          response,
                          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 is not None:
            body = request.stream
            content_type, encoding = separate_encoding(request.content_type)
            body_formatter = body and self.api.http.input_format(content_type)
            if body_formatter:
                body = body_formatter(
                    body,
                    encoding) if encoding is not None else body_formatter(body)
            if 'body' in self.parameters:
                input_parameters['body'] = body
            if isinstance(body, dict):
                input_parameters.update(body)
        elif 'body' in self.parameters:
            input_parameters['body'] = None

        if 'request' in self.parameters:
            input_parameters['request'] = request
        if 'response' in self.parameters:
            input_parameters['response'] = response
        if 'api_version' in self.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,
                                                    interface=self)

        return input_parameters