Пример #1
0
    def test_specific_json_consumer(self):

        @consumes(MediaType.ApplicationJson, object, vendor='supercell')
        class MyHandler(RequestHandler):
            pass

        (_, consumer) = ConsumerBase.map_consumer(
            'application/vnd.supercell+json', handler=MyHandler)
        self.assertIs(consumer, MoreDetailedJsonConsumer)

        with self.assertRaises(NoConsumerFound):
            ConsumerBase.map_consumer(MediaType.ApplicationJson,
                                      handler=MyHandler)
Пример #2
0
    def test_json_consumer_with_version(self):

        @consumes(MediaType.ApplicationJson, object, vendor='supercell',
                  version=1.0)
        class MyHandler(RequestHandler):
            pass

        (_, consumer) = ConsumerBase.map_consumer(
            'application/vnd.supercell-v1.0+json', handler=MyHandler)
        self.assertIs(consumer, JsonConsumerWithVendorAndVersion)

        with self.assertRaises(NoConsumerFound):
            ConsumerBase.map_consumer(MediaType.ApplicationJson,
                                      handler=MyHandler)
Пример #3
0
    def test_default_json_consumer_with_encoding_in_ctype(self):

        @consumes(MediaType.ApplicationJson, object)
        class MyHandler(RequestHandler):
            pass

        (_, consumer) = ConsumerBase.map_consumer(
            'application/json; encoding=UTF-8', handler=MyHandler)

        self.assertIs(consumer, JsonConsumer)

        with self.assertRaises(NoConsumerFound):
            ConsumerBase.map_consumer('application/vnd.supercell-v1.1+json',
                                      handler=MyHandler)
Пример #4
0
    def _check_consumer(self):
        """For a POST or PUT request check if we can find a matching
        consumer for the incoming data."""
        verb = self.request.method.lower()
        headers = self.request.headers
        kwargs = self.path_kwargs

        if verb in ['post', 'put'] and 'Content-Type' in headers:
            # try to find a matching consumer
            try:
                (model, consumer_class) = ConsumerBase.map_consumer(
                    headers['Content-Type'], self)
                consumer = consumer_class()
                kwargs['model'] = consumer.consume(self, model)
            except NoConsumerFound:
                # TODO return available consumer types?!
                raise HTTPError(406)
            except Exception as e:
                raise HTTPError(400, reason=text_type(e))
Пример #5
0
    def _check_consumer(self):
        """For a POST or PUT request check if we can find a matching
        consumer for the incoming data."""
        verb = self.request.method.lower()
        headers = self.request.headers
        kwargs = self.path_kwargs

        if verb in ['post', 'put'] and 'Content-Type' in headers:
            # try to find a matching consumer
            try:
                (model, consumer_class) = ConsumerBase.map_consumer(
                    headers['Content-Type'], self)
                consumer = consumer_class()
                kwargs['model'] = consumer.consume(self, model)
            except NoConsumerFound:
                # TODO return available consumer types?!
                raise HTTPError(406)
            except Exception as e:
                raise HTTPError(400, reason=text_type(e))
Пример #6
0
    def _execute_method(self):
        '''Execute the request.

        The method to be executed is determined by the request method.
        '''
        if not self._finished:
            verb = self.request.method.lower()
            headers = self.request.headers
            method = getattr(self, verb)
            kwargs = self.path_kwargs

            if verb in ['post', 'put'] and 'Content-Type' in headers:
                # try to find a matching consumer
                try:
                    (model, consumer_class) = ConsumerBase.map_consumer(
                        headers['Content-Type'], self)
                    consumer = consumer_class()
                    kwargs['model'] = consumer.consume(self, model)
                except NoConsumerFound:
                    # TODO return available consumer types?!
                    raise HTTPError(406)
                except StandardError as e:
                    raise HTTPError(400, reason=unicode(e))

            if verb in ['get', 'head']:
                # check if there is caching information stored with the handler
                cache_config = self.environment.get_cache_info(self.__class__)
                if cache_config:
                    self.set_header('Cache-Control',
                                    compute_cache_header(cache_config))

                expires = self.environment.get_expires_info(self.__class__)
                if expires:
                    self.set_header('Expires', datetime.now() + expires)

            future_model = method(*self.path_args, **kwargs)
            if future_model:
                callback = partial(self._provide_result, verb, headers)
                future_model.add_done_callback(callback)