def __call__(self, _method, *args, **kwargs): """Dispatches the requested method. :param _method: The method to be dispatched: the request method in lower case (e.g., 'get', 'post', 'head', 'put' etc). :param args: Positional arguments to be passed to the method, coming from the matched :class:`Route`. :param kwargs: Keyword arguments to be passed to the method, coming from the matched :class:`Route`. :returns: None. """ method = getattr(self, _method, None) if method is None: # 405 Method Not Allowed. # The response MUST include an Allow header containing a # list of valid methods for the requested resource. # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6 valid = ', '.join(webapp2.get_valid_methods(self)) self.abort(405, headers=[('Allow', valid)]) # Give authentication Hooks opportunity to do their thing self.authchecker(method, *args, **kwargs) # Execute the method. method(*args, **kwargs)
def __call__(self, _method, *args, **kwargs): """Dispatches the requested method. """ # Lazily import hujson to allow using the other classes in this module to be used without # huTools beinin installed. import huTools.hujson # Find Method to be called. method = getattr(self, _method, None) if method is None: # No Mehtod is found. # Answer will be `405 Method Not Allowed`. # The response MUST include an Allow header containing a # list of valid methods for the requested resource. # http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.6 # so get a lsit of valid Methods and send them back. valid = ', '.join(webapp2.get_valid_methods(self)) # `self.abort()` will raise an Exception thus exiting this function self.abort(405, headers=[('Allow', valid)]) # Give authentication Hooks opportunity to do their thing self.authchecker(method, *args, **kwargs) # Execute the method. reply = method(*args, **kwargs) # find out which return convention was used - first set defaults ... content = reply statuscode = 200 cachingtime = self.default_cachingtime # ... then check if we got a 2-tuple reply ... if isinstance(reply, tuple) and len(reply) == 2: content, statuscode = reply # ... or a 3-tuple reply. if isinstance(reply, tuple) and len(reply) == 3: content, statuscode, cachingtime = reply # Finally begin sending the response response = huTools.hujson.dumps(content) if cachingtime: self.response.headers['Cache-Control'] = 'max-age=%d, public' % cachingtime # If we have gotten a `callback` parameter, we expect that this is a # [JSONP](http://en.wikipedia.org/wiki/JSONP#JSONP) cann and therefore add the padding if self.request.get('callback', None): response = "%s (%s)" % (self.request.get('callback', None), response) self.response.headers['Content-Type'] = 'text/javascript' else: self.response.headers['Content-Type'] = 'application/json' # Set status code and write JSON to output stream self.response.set_status(statuscode) self.response.out.write(response) self.response.out.write('\n')