Beispiel #1
0
    def __call__(self, environ, start_response):
        if 'gunicorn.socket' in environ:
            # gunicorn saves the socket under environ['gunicorn.socket'], while
            # eventlet saves it under environ['eventlet.input']. Eventlet also
            # stores the socket inside a wrapper class, while gunicon writes it
            # directly into the environment. To give eventlet's WebSocket
            # module access to this socket when running under gunicorn, here we
            # copy the socket to the eventlet format.
            class Input(object):
                def __init__(self, socket):
                    self.socket = socket

                def get_socket(self):
                    return self.socket

            environ['eventlet.input'] = Input(environ['gunicorn.socket'])
        path = environ['PATH_INFO']
        if path is not None and \
                path.startswith('/{0}/'.format(self.engineio_path)):
            return self.engineio_app.handle_request(environ, start_response)
        else:
            static_file = get_static_file(path, self.static_files) \
                if self.static_files else None
            if static_file:
                if os.path.exists(static_file['filename']):
                    start_response(
                        '200 OK',
                        [('Content-Type', static_file['content_type'])])
                    with open(static_file['filename'], 'rb') as f:
                        return [f.read()]
                else:
                    return self.not_found(start_response)
            elif self.wsgi_app is not None:
                return self.wsgi_app(environ, start_response)
        return self.not_found(start_response)
Beispiel #2
0
 async def __call__(self, scope, receive, send):
     if scope['type'] in ['http', 'websocket'] and \
             scope['path'].startswith('/{0}/'.format(self.engineio_path)):
         await self.engineio_server.handle_request(scope, receive, send)
     else:
         static_file = get_static_file(scope['path'], self.static_files) \
             if scope['type'] == 'http' and self.static_files else None
         if static_file:
             await self.serve_static_file(static_file, receive, send)
         elif self.other_asgi_app is not None:
             await self.other_asgi_app(scope, receive, send)
         elif scope['type'] == 'lifespan':
             await self.lifespan(receive, send)
         else:
             await self.not_found(receive, send)