def _add_cache_headers(self): """Maybe add cache headers on GET and HEAD requests.""" verb = self.request.method.lower() 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)
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)