From 556b1032196540271fa2b81dc0652b5630ff73cc Mon Sep 17 00:00:00 2001 From: Allan Saddi Date: Mon, 18 May 2009 16:01:13 -0700 Subject: Import Paste factories (and dependencies...) from PasteScript --- ChangeLog | 8 +++ flup/server/ajp.py | 4 -- flup/server/ajp_fork.py | 4 -- flup/server/fcgi.py | 4 -- flup/server/fcgi_fork.py | 4 -- flup/server/fcgi_single.py | 4 -- flup/server/paste_factory.py | 131 ++++++++++++++++++++++++++++++++++++++----- flup/server/scgi.py | 4 -- flup/server/scgi_fork.py | 4 -- setup.py | 20 +++---- 10 files changed, 135 insertions(+), 52 deletions(-) diff --git a/ChangeLog b/ChangeLog index 5554bb4..399917e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-05-18 Allan Saddi + + * Import Paste factories (and dependencies...) from PasteScript + +2009-05-04 Allan Saddi + + * Be tolerant of EAGAIN when sending messages to parent process. + 2009-02-02 Allan Saddi * Add forceCGI keyword argument to FastCGI servers to diff --git a/flup/server/ajp.py b/flup/server/ajp.py index b70624d..3dca295 100644 --- a/flup/server/ajp.py +++ b/flup/server/ajp.py @@ -162,10 +162,6 @@ class WSGIServer(BaseAJPServer, ThreadedServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/ajp_fork.py b/flup/server/ajp_fork.py index e798920..111b29c 100644 --- a/flup/server/ajp_fork.py +++ b/flup/server/ajp_fork.py @@ -160,10 +160,6 @@ class WSGIServer(BaseAJPServer, PreforkServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/fcgi.py b/flup/server/fcgi.py index ff03754..ab160e9 100644 --- a/flup/server/fcgi.py +++ b/flup/server/fcgi.py @@ -117,10 +117,6 @@ class WSGIServer(BaseFCGIServer, ThreadedServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/fcgi_fork.py b/flup/server/fcgi_fork.py index 740e26b..d79b777 100644 --- a/flup/server/fcgi_fork.py +++ b/flup/server/fcgi_fork.py @@ -136,10 +136,6 @@ class WSGIServer(BaseFCGIServer, PreforkServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/fcgi_single.py b/flup/server/fcgi_single.py index c2e63ff..e62b08f 100644 --- a/flup/server/fcgi_single.py +++ b/flup/server/fcgi_single.py @@ -122,10 +122,6 @@ class WSGIServer(BaseFCGIServer, SingleServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/paste_factory.py b/flup/server/paste_factory.py index ec0c322..1bcc867 100644 --- a/flup/server/paste_factory.py +++ b/flup/server/paste_factory.py @@ -1,18 +1,121 @@ -def helper(wsgiServerClass, global_conf, host, port, **local_conf): - # I think I can't write a tuple for bindAddress in .ini file - host = host or global_conf.get('host', 'localhost') - port = port or global_conf.get('port', 4000) +# (c) 2005 Ian Bicking and contributors; written for Paste (http://pythonpaste.org) +# Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php +def asbool(obj): + if isinstance(obj, (str, unicode)): + obj = obj.strip().lower() + if obj in ['true', 'yes', 'on', 'y', 't', '1']: + return True + elif obj in ['false', 'no', 'off', 'n', 'f', '0']: + return False + else: + raise ValueError( + "String is not true/false: %r" % obj) + return bool(obj) - if 'socket' in local_conf: - local_conf['bindAddress'] = local_conf['socket'] - del local_conf['socket'] - if 'umask' in local_conf: - local_conf['umask'] = int(local_conf['umask'], 8) +def aslist(obj, sep=None, strip=True): + if isinstance(obj, (str, unicode)): + lst = obj.split(sep) + if strip: + lst = [v.strip() for v in lst] + return lst + elif isinstance(obj, (list, tuple)): + return obj + elif obj is None: + return [] else: - local_conf['bindAddress'] = (host, int(port)) + return [obj] + +def run_ajp_thread(wsgi_app, global_conf, + scriptName='', host='localhost', port='8009', + allowedServers='127.0.0.1'): + import flup.server.ajp + addr = (host, int(port)) + s = flup.server.ajp.WSGIServer( + wsgi_app, + scriptName=scriptName, + bindAddress=addr, + allowedServers=aslist(allowedServers), + ) + s.run() - def server(application): - server = wsgiServerClass(application, **local_conf) - server.run() +def run_ajp_fork(wsgi_app, global_conf, + scriptName='', host='localhost', port='8009', + allowedServers='127.0.0.1'): + import flup.server.ajp_fork + addr = (host, int(port)) + s = flup.server.ajp_fork.WSGIServer( + wsgi_app, + scriptName=scriptName, + bindAddress=addr, + allowedServers=aslist(allowedServers), + ) + s.run() + +def run_fcgi_thread(wsgi_app, global_conf, + host=None, port=None, + socket=None, umask=None, + multiplexed=False): + import flup.server.fcgi + if socket: + assert host is None and port is None + sock = socket + elif host: + assert host is not None and port is not None + sock = (host, int(port)) + else: + sock = None + if umask is not None: + umask = int(umask) + s = flup.server.fcgi.WSGIServer( + wsgi_app, + bindAddress=sock, umask=umask, + multiplexed=asbool(multiplexed)) + s.run() - return server +def run_fcgi_fork(wsgi_app, global_conf, + host=None, port=None, + socket=None, umask=None, + multiplexed=False): + import flup.server.fcgi_fork + if socket: + assert host is None and port is None + sock = socket + elif host: + assert host is not None and port is not None + sock = (host, int(port)) + else: + sock = None + if umask is not None: + umask = int(umask) + s = flup.server.fcgi_fork.WSGIServer( + wsgi_app, + bindAddress=sock, umask=umask, + multiplexed=asbool(multiplexed)) + s.run() + +def run_scgi_thread(wsgi_app, global_conf, + scriptName='', host='localhost', port='4000', + allowedServers='127.0.0.1'): + import flup.server.scgi + addr = (host, int(port)) + s = flup.server.scgi.WSGIServer( + wsgi_app, + scriptName=scriptName, + bindAddress=addr, + allowedServers=aslist(allowedServers), + ) + s.run() + +def run_scgi_fork(wsgi_app, global_conf, + scriptName='', host='localhost', port='4000', + allowedServers='127.0.0.1'): + import flup.server.scgi_fork + addr = (host, int(port)) + s = flup.server.scgi_fork.WSGIServer( + wsgi_app, + scriptName=scriptName, + bindAddress=addr, + allowedServers=aslist(allowedServers), + ) + s.run() + diff --git a/flup/server/scgi.py b/flup/server/scgi.py index ada352e..aad3d7b 100644 --- a/flup/server/scgi.py +++ b/flup/server/scgi.py @@ -157,10 +157,6 @@ class WSGIServer(BaseSCGIServer, ThreadedServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/flup/server/scgi_fork.py b/flup/server/scgi_fork.py index ce04899..1c7506f 100644 --- a/flup/server/scgi_fork.py +++ b/flup/server/scgi_fork.py @@ -155,10 +155,6 @@ class WSGIServer(BaseSCGIServer, PreforkServer): return ret -def factory(global_conf, host=None, port=None, **local): - import paste_factory - return paste_factory.helper(WSGIServer, global_conf, host, port, **local) - if __name__ == '__main__': def test_app(environ, start_response): """Probably not the most efficient example.""" diff --git a/setup.py b/setup.py index bd51379..ddef944 100644 --- a/setup.py +++ b/setup.py @@ -10,16 +10,16 @@ setup( zip_safe = True, entry_points = """ - [paste.server_factory] - ajp = flup.server.ajp:factory - fcgi = flup.server.fcgi:factory - scgi = flup.server.scgi:factory - ajp_thread = flup.server.ajp:factory - fcgi_thread = flup.server.fcgi:factory - scgi_thread = flup.server.scgi:factory - ajp_fork = flup.server.ajp_fork:factory - fcgi_fork = flup.server.fcgi_fork:factory - scgi_fork = flup.server.scgi_fork:factory + [paste.server_runner] + ajp = flup.server.paste_factory:run_ajp_thread + fcgi = flup.server.paste_factory:run_fcgi_thread + scgi = flup.server.paste_factory:run_scgi_thread + ajp_thread = flup.server.paste_factory:run_ajp_thread + fcgi_thread = flup.server.paste_factory:run_fcgi_thread + scgi_thread = flup.server.paste_factory:run_scgi_thread + ajp_fork = flup.server.paste_factory:run_ajp_fork + fcgi_fork = flup.server.paste_factory:run_fcgi_fork + scgi_fork = flup.server.paste_factory:run_scgi_fork """, author = 'Allan Saddi', -- cgit v1.2.1