From 227a81b534c2f77f6cdb10a5936c6b1dfb8c3ec6 Mon Sep 17 00:00:00 2001 From: Christopher Allan Webber Date: Thu, 9 Oct 2014 18:24:14 -0500 Subject: [PATCH] Add and use paste server selector. Yeah! Smart solutions! MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit sponsored by Tryggvi Björgvinsson. Thank you! --- mediagoblin/app.py | 31 +++++++++++++++++++++++++++++++ paste.py3.ini | 2 +- setup.py | 3 +++ 3 files changed, 35 insertions(+), 1 deletion(-) 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