summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAllan Saddi <allan@saddi.com>2009-05-18 16:01:13 -0700
committerAllan Saddi <allan@saddi.com>2009-05-18 16:01:13 -0700
commit556b1032196540271fa2b81dc0652b5630ff73cc (patch)
tree010c0864c809b493ca15e4feba8e370456ddfc0e
parentd68f57f284490f4d497dd8df6c3aa6588f8ec7a4 (diff)
downloadflup-556b1032196540271fa2b81dc0652b5630ff73cc.tar.gz
Import Paste factories (and dependencies...) from PasteScript
-rw-r--r--ChangeLog8
-rw-r--r--flup/server/ajp.py4
-rw-r--r--flup/server/ajp_fork.py4
-rw-r--r--flup/server/fcgi.py4
-rw-r--r--flup/server/fcgi_fork.py4
-rw-r--r--flup/server/fcgi_single.py4
-rw-r--r--flup/server/paste_factory.py131
-rw-r--r--flup/server/scgi.py4
-rw-r--r--flup/server/scgi_fork.py4
-rw-r--r--setup.py20
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 <allan@saddi.com>
+
+ * Import Paste factories (and dependencies...) from PasteScript
+
+2009-05-04 Allan Saddi <allan@saddi.com>
+
+ * Be tolerant of EAGAIN when sending messages to parent process.
+
2009-02-02 Allan Saddi <allan@saddi.com>
* 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',