def render(self, request): """ Adds support for deferred render methods """ m = getattr(self, 'render_' + request.method, None) if not m: # This needs to be here until the deprecated subclasses of the # below three error resources in twisted.web.error are removed. from twisted.web.error import UnsupportedMethod allowedMethods = (getattr(self, 'allowedMethods', 0) or _computeAllowedMethods(self)) raise UnsupportedMethod(allowedMethods) result = defer.maybeDeferred(m, request) def write_rest(defer_result, request): request.write(defer_result) request.finish() def err_rest(defer_result=None): defer_result.printTraceback() request.finish() result.addCallback(write_rest, request) result.addErrback(err_rest) return server.NOT_DONE_YET
def login_successfully(ignored): m = getattr(self, 'render_' + request.method, None) if not m: # This needs to be here until the deprecated subclasses of the # below three error resources in twisted.web.error are removed. from twisted.web.error import UnsupportedMethod allowedMethods = (getattr(self, 'allowedMethods', 0) or resource._computeAllowedMethods(self)) raise UnsupportedMethod(allowedMethods) result = defer.maybeDeferred(m, request) def write_rest(defer_result, request): if defer_result: if IResource(defer_result, None): defer_result.render(request) else: request.write(self.serialize(request, defer_result)) request.finish() def err_rest(defer_result=None): log.err('Error while parsing request: %s' % defer_result) request.finish() result.addCallback(write_rest, request) result.addErrback(err_rest)
def render(self, request): """Render code used from http://twistedmatrix.com/trac/browser/tags/releases/twisted-11.0.0/twisted/web/resource.py """ m = getattr(self, 'render_' + request.method, None) if not m: from twisted.web.error import UnsupportedMethod allowedMethods = (getattr(self, 'allowedMethods', 0) or resource._computeAllowedMethods(self)) raise UnsupportedMethod(allowedMethods) return m(request)
def test_computeAllowedMethods(self): """ C{_computeAllowedMethods} will search through the 'gettableresource' for all attributes/methods of the form 'render_{method}' ('render_GET', for example) and return a list of the methods. 'HEAD' will always be included from the resource.Resource superclass. """ res = GettableResource() allowedMethods = resource._computeAllowedMethods(res) self.assertEqual(set(allowedMethods), set([b'GET', b'HEAD', b'fred_render_ethel']))
def __init__(self, collection): serializers.EncodingResource.__init__(self) self._collection = collection if hasattr(collection, 'encoders'): self.encoders = collection.encoders if hasattr(collection, 'decoders'): self.encoders = collection.decoders if hasattr(collection, 'defaultEncoder'): self.defaultEncoder = collection.defaultEncoder self.allowedMethods = ( getattr(collection, 'allowedMethods', False) or resource._computeAllowedMethods(self))
def _renderResource(resource, request): """ Render a given resource. See `IResource.render <twisted:twisted.web.resource.IResource.render>`. """ meth = getattr(resource, 'render_' + nativeString(request.method), None) if meth is None: try: allowedMethods = resource.allowedMethods except AttributeError: allowedMethods = _computeAllowedMethods(resource) raise UnsupportedMethod(allowedMethods) return meth(request)
def render(self, request): # Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== """ Adds support for deferred render methods """ auth_header = request.getHeader('Authorization') if self.username or self.password: authenticated = False if auth_header: auth_header = auth_header.split(' ') if len(auth_header) > 1 and auth_header[0] == 'Basic': userpass = auth_header[1].decode('base64').split(':') if len(userpass) == 2: username, password = userpass if self.username == username and self.password == password: authenticated = True if not authenticated: print auth_header print self.username, self.password request.setResponseCode(401) return 'Unauthorized' m = getattr(self, 'render_' + request.method, None) if not m: # This needs to be here until the deprecated subclasses of the # below three error resources in twisted.web.error are removed. from twisted.web.error import UnsupportedMethod allowedMethods = (getattr(self, 'allowedMethods', 0) or _computeAllowedMethods(self)) raise UnsupportedMethod(allowedMethods) result = defer.maybeDeferred(m, request) def write_rest(defer_result, request): request.write(defer_result) request.finish() def err_rest(defer_result=None): defer_result.printTraceback() request.finish() result.addCallback(write_rest, request) result.addErrback(err_rest) return server.NOT_DONE_YET
def render(self, request): """Render code used from http://twistedmatrix.com/trac/browser/tags/releases/twisted-11.0.0/twisted/web/resource.py """ m = getattr(self, 'render_' + request.method, None) if not m: allowedMethods = (getattr(self, 'allowedMethods', 0) or resource._computeAllowedMethods(self)) status = http.NOT_ALLOWED description = 'Unsupported method. Allowed methods: %s' \ % str(allowedMethods) json = {'error': 'method_not_allowed', 'error_description': description} request.setHeader('Allow', ', '.join(allowedMethods)) return _JSON_response(request, status, json) return m(request)
def render(self, request): """Render code used from http://twistedmatrix.com/trac/browser/tags/releases/twisted-11.0.0/twisted/web/resource.py """ m = getattr(self, 'render_' + request.method, None) if not m: allowedMethods = (getattr(self, 'allowedMethods', 0) or resource._computeAllowedMethods(self)) status = http.NOT_ALLOWED description = 'Unsupported method. Allowed methods: %s' \ % str(allowedMethods) json = { 'error': 'method_not_allowed', 'error_description': description } request.setHeader('Allow', ', '.join(allowedMethods)) return _JSON_response(request, status, json) return m(request)