From ddc2a9ec8ad1e21be96caf9f84676371d404c224 Mon Sep 17 00:00:00 2001 From: Allan Saddi Date: Mon, 2 Feb 2009 23:55:25 -0800 Subject: Add forceCGI keyword argument to FastCGI servers to programmatically force CGI behavior. --- ChangeLog | 3 +++ flup/server/fcgi.py | 5 +++-- flup/server/fcgi_base.py | 6 ++++-- flup/server/fcgi_fork.py | 8 +++++--- flup/server/fcgi_single.py | 5 +++-- 5 files changed, 18 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a71c15..5554bb4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2009-02-02 Allan Saddi + * Add forceCGI keyword argument to FastCGI servers to + programmatically force CGI behavior. + * Merge Tommi Virtanen's "single server" (sequential server) patch. diff --git a/flup/server/fcgi.py b/flup/server/fcgi.py index d41b88f..ff03754 100644 --- a/flup/server/fcgi.py +++ b/flup/server/fcgi.py @@ -64,7 +64,7 @@ class WSGIServer(BaseFCGIServer, ThreadedServer): def __init__(self, application, environ=None, multithreaded=True, multiprocess=False, bindAddress=None, umask=None, multiplexed=False, - debug=True, roles=(FCGI_RESPONDER,), **kw): + debug=True, roles=(FCGI_RESPONDER,), forceCGI=False, **kw): """ environ, if present, must be a dictionary-like object. Its contents will be copied into application's environ. Useful @@ -87,7 +87,8 @@ class WSGIServer(BaseFCGIServer, ThreadedServer): umask=umask, multiplexed=multiplexed, debug=debug, - roles=roles) + roles=roles, + forceCGI=forceCGI) for key in ('jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] diff --git a/flup/server/fcgi_base.py b/flup/server/fcgi_base.py index 3c059f5..31e0ac6 100644 --- a/flup/server/fcgi_base.py +++ b/flup/server/fcgi_base.py @@ -902,7 +902,8 @@ class BaseFCGIServer(object): def __init__(self, application, environ=None, multithreaded=True, multiprocess=False, bindAddress=None, umask=None, multiplexed=False, - debug=True, roles=(FCGI_RESPONDER,)): + debug=True, roles=(FCGI_RESPONDER,), + forceCGI=False): """ bindAddress, if present, must either be a string or a 2-tuple. If present, run() will open its own listening socket. You would use @@ -934,6 +935,7 @@ class BaseFCGIServer(object): self.multiprocess = multiprocess self.debug = debug self.roles = roles + self.forceCGI = forceCGI self._bindAddress = bindAddress self._umask = umask @@ -989,7 +991,7 @@ class BaseFCGIServer(object): # if you want to run your app as a simple CGI. (You can do # this with Apache's mod_env [not loaded by default in OS X # client, ha ha] and the SetEnv directive.) - if not isFCGI or \ + if not isFCGI or self.forceCGI or \ os.environ.get('FCGI_FORCE_CGI', 'N').upper().startswith('Y'): req = self.cgirequest_class(self) req.run() diff --git a/flup/server/fcgi_fork.py b/flup/server/fcgi_fork.py index 53035a1..740e26b 100644 --- a/flup/server/fcgi_fork.py +++ b/flup/server/fcgi_fork.py @@ -51,7 +51,7 @@ __version__ = '$Revision$' import os -from flup.server.fcgi_base import BaseFCGIServer, \ +from flup.server.fcgi_base import BaseFCGIServer, FCGI_RESPONDER, \ FCGI_MAX_CONNS, FCGI_MAX_REQS, FCGI_MPXS_CONNS from flup.server.preforkserver import PreforkServer @@ -64,7 +64,7 @@ class WSGIServer(BaseFCGIServer, PreforkServer): """ def __init__(self, application, environ=None, bindAddress=None, umask=None, multiplexed=False, - debug=True, **kw): + debug=True, roles=(FCGI_RESPONDER,), forceCGI=False, **kw): """ environ, if present, must be a dictionary-like object. Its contents will be copied into application's environ. Useful @@ -86,7 +86,9 @@ class WSGIServer(BaseFCGIServer, PreforkServer): bindAddress=bindAddress, umask=umask, multiplexed=multiplexed, - debug=debug) + debug=debug, + roles=roles, + forceCGI=forceCGI) for key in ('multithreaded', 'multiprocess', 'jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] diff --git a/flup/server/fcgi_single.py b/flup/server/fcgi_single.py index 5c9367a..c2e63ff 100644 --- a/flup/server/fcgi_single.py +++ b/flup/server/fcgi_single.py @@ -64,7 +64,7 @@ class WSGIServer(BaseFCGIServer, SingleServer): """ def __init__(self, application, environ=None, bindAddress=None, umask=None, multiplexed=False, - debug=True, roles=(FCGI_RESPONDER,), **kw): + debug=True, roles=(FCGI_RESPONDER,), forceCGI=False, **kw): """ environ, if present, must be a dictionary-like object. Its contents will be copied into application's environ. Useful @@ -87,7 +87,8 @@ class WSGIServer(BaseFCGIServer, SingleServer): umask=umask, multiplexed=multiplexed, debug=debug, - roles=roles) + roles=roles, + forceCGI=forceCGI) for key in ('jobClass', 'jobArgs'): if kw.has_key(key): del kw[key] -- cgit v1.2.1