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
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
 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']))
Example #5
0
 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']))
Example #6
0
 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))
Example #7
0
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
Example #9
0
 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
Example #10
0
    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)
Example #11
0
    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)