aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/app.py31
-rw-r--r--paste.py3.ini2
-rw-r--r--setup.py3
3 files changed, 35 insertions, 1 deletions
diff --git a/mediagoblin/app.py b/mediagoblin/app.py
index b3e41835..9014bf47 100644
--- a/mediagoblin/app.py
+++ b/mediagoblin/app.py
@@ -290,3 +290,34 @@ def paste_app_factory(global_config, **app_config):
mgoblin_app = hook_transform('wrap_wsgi', mgoblin_app)
return mgoblin_app
+
+
+def paste_server_selector(wsgi_app, global_config=None, **app_config):
+ """
+ Select between gunicorn and paste depending on what ia available
+ """
+ # See if we can import the gunicorn server...
+ # otherwise we'll use the paste server
+ try:
+ import gunicorn
+ except ImportError:
+ gunicorn = None
+
+ if gunicorn is None:
+ # use paste
+ from paste.httpserver import server_runner
+
+ cleaned_app_config = dict(
+ [(key, app_config[key])
+ for key in app_config
+ if key in ["host", "port", "handler", "ssl_pem", "ssl_context",
+ "server_version", "protocol_version", "start_loop",
+ "daemon_threads", "socket_timeout", "use_threadpool",
+ "threadpool_workers", "threadpool_options",
+ "request_queue_size"]])
+
+ return server_runner(wsgi_app, global_config, **cleaned_app_config)
+ else:
+ # use gunicorn
+ from gunicorn.app.pasterapp import PasterServerApplication
+ return PasterServerApplication(wsgi_app, global_config, **app_config)
diff --git a/paste.py3.ini b/paste.py3.ini
index afd5982b..77364c09 100644
--- a/paste.py3.ini
+++ b/paste.py3.ini
@@ -52,7 +52,7 @@ debug = false
# The server that is run by default.
# By default, should only be accessable locally
[server:main]
-use = egg:gunicorn
+use = egg:mediagoblin#paste_server_selector
host = 127.0.0.1
port = 6543
# Gunicorn settings. See http://docs.gunicorn.org/en/19.0/settings.html
diff --git a/setup.py b/setup.py
index 562252e3..624aa409 100644
--- a/setup.py
+++ b/setup.py
@@ -123,6 +123,9 @@ try:
[paste.app_factory]
app = mediagoblin.app:paste_app_factory
+ [paste.server_runner]
+ paste_server_selector = mediagoblin.app:paste_server_selector
+
[paste.filter_app_factory]
errors = mediagoblin.errormiddleware:mgoblin_error_middleware