WsgiStack class, eventletserver.serve.
Trying to work toward a simple API that anyone can use to start an eventlet-based server composed of several WSGI apps.
This commit is contained in:
7
nova/endpoint/eventletserver.py
Normal file
7
nova/endpoint/eventletserver.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
import eventlet
|
||||||
|
import eventlet.wsgi
|
||||||
|
eventlet.patcher.monkey_patch(all=False, socket=True)
|
||||||
|
|
||||||
|
def serve(app, port):
|
||||||
|
sock = eventlet.listen(('0.0.0.0', port))
|
||||||
|
eventlet.wsgi.server(sock, app)
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
import eventlet
|
import eventletserver
|
||||||
import eventlet.wsgi
|
|
||||||
eventlet.patcher.monkey_patch(all=False, socket=True)
|
|
||||||
import carrot.connection
|
import carrot.connection
|
||||||
import carrot.messaging
|
import carrot.messaging
|
||||||
import itertools
|
import itertools
|
||||||
import routes
|
import routes
|
||||||
|
|
||||||
|
|
||||||
# See http://pythonpaste.org/webob/ for usage
|
# See http://pythonpaste.org/webob/ for usage
|
||||||
from webob.dec import wsgify
|
from webob.dec import wsgify
|
||||||
from webob import exc, Request, Response
|
from webob import exc, Request, Response
|
||||||
@@ -49,6 +48,19 @@ class WSGILayer(object):
|
|||||||
raise NotImplementedError("You must implement __call__")
|
raise NotImplementedError("You must implement __call__")
|
||||||
|
|
||||||
|
|
||||||
|
class WsgiStack(WSGILayer):
|
||||||
|
def __init__(self, wsgi_layers):
|
||||||
|
bottom_up = list(reversed(wsgi_layers))
|
||||||
|
app, remaining = bottom_up[0], bottom_up[1:]
|
||||||
|
for layer in remaining:
|
||||||
|
layer.application = app
|
||||||
|
app = layer
|
||||||
|
super(WsgiStack, self).__init__(app)
|
||||||
|
|
||||||
|
@wsgify
|
||||||
|
def __call__(self, req):
|
||||||
|
return self.application
|
||||||
|
|
||||||
class Debug(WSGILayer):
|
class Debug(WSGILayer):
|
||||||
@wsgify
|
@wsgify
|
||||||
def __call__(self, req):
|
def __call__(self, req):
|
||||||
@@ -101,9 +113,6 @@ class Reverse(WSGILayer):
|
|||||||
@wsgify
|
@wsgify
|
||||||
def __call__(self, req):
|
def __call__(self, req):
|
||||||
inner_resp = req.get_response(self.application)
|
inner_resp = req.get_response(self.application)
|
||||||
print "+" * 80
|
|
||||||
Debug()(req)
|
|
||||||
print "*" * 80
|
|
||||||
resp = Response()
|
resp = Response()
|
||||||
resp.app_iter = itertools.imap(lambda x: x[::-1], inner_resp.app_iter)
|
resp.app_iter = itertools.imap(lambda x: x[::-1], inner_resp.app_iter)
|
||||||
return resp
|
return resp
|
||||||
@@ -118,5 +127,10 @@ class File(WSGILayer):
|
|||||||
req.response = Response()
|
req.response = Response()
|
||||||
req.response.app_iter = myfile
|
req.response.app_iter = myfile
|
||||||
|
|
||||||
sock = eventlet.listen(('localhost', 12345))
|
wsgi_layers = [
|
||||||
eventlet.wsgi.server(sock, Debug(Auth(FileRouter(Message()))))
|
Auth(),
|
||||||
|
Debug(),
|
||||||
|
FileRouter(),
|
||||||
|
Message(),
|
||||||
|
]
|
||||||
|
eventletserver.serve(app=WsgiStack(wsgi_layers), port=12345)
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ import logging
|
|||||||
import multiprocessing
|
import multiprocessing
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import tornado.web
|
|
||||||
from twisted.internet import defer
|
|
||||||
|
|
||||||
from nova import datastore
|
from nova import datastore
|
||||||
from nova import exception
|
from nova import exception
|
||||||
|
|||||||
Reference in New Issue
Block a user