diff --git a/gunicorn/config.py b/gunicorn/config.py index e61bb2c0..47e512d8 100644 --- a/gunicorn/config.py +++ b/gunicorn/config.py @@ -123,8 +123,13 @@ class Config(object): @property def logger_class(self): uri = self.settings['logger_class'].get() - logger_class = util.load_class(uri, default="simple", - section="gunicorn.loggers") + if uri == "simple": + # support the default + uri = "gunicorn.glogging.Logger" + else: + logger_class = util.load_class(uri, + default="gunicorn.glogging.Logger", + section="gunicorn.loggers") if hasattr(logger_class, "install"): logger_class.install() @@ -1005,7 +1010,7 @@ class LoggerClass(Setting): cli = ["--logger-class"] meta = "STRING" validator = validate_class - default = "simple" + default = "gunicorn.glogging.Logger" desc = """\ The logger you want to use to log events in gunicorn. diff --git a/gunicorn/util.py b/gunicorn/util.py index d632b2c4..48ad846e 100644 --- a/gunicorn/util.py +++ b/gunicorn/util.py @@ -21,6 +21,7 @@ import warnings from gunicorn.errors import AppImportError from gunicorn.six import text_type, string_types +from gunicorn.workers import SUPPORTED_WORKERS MAXFD = 1024 REDIRECT_TO = getattr(os, 'devnull', '/dev/null') @@ -96,7 +97,8 @@ relative import to an absolute import. return sys.modules[name] -def load_class(uri, default="sync", section="gunicorn.workers"): +def load_class(uri, default="gunicorn.workers.sync.SyncWorker", + section="gunicorn.workers"): if inspect.isclass(uri): return uri if uri.startswith("egg:"): @@ -117,16 +119,21 @@ def load_class(uri, default="sync", section="gunicorn.workers"): else: components = uri.split('.') if len(components) == 1: - try: + while True: if uri.startswith("#"): uri = uri[1:] - return pkg_resources.load_entry_point("gunicorn", - section, uri) - except: - exc = traceback.format_exc() - raise RuntimeError("class uri %r invalid or not found: \n\n[%s]" % (uri, - exc)) + if uri in SUPPORTED_WORKERS: + components = SUPPORTED_WORKERS[uri].split(".") + break + + try: + return pkg_resources.load_entry_point("gunicorn", + section, uri) + except: + exc = traceback.format_exc() + raise RuntimeError("class uri %r invalid or not found: \n\n[%s]" % (uri, + exc)) klass = components.pop(-1) try: diff --git a/gunicorn/workers/__init__.py b/gunicorn/workers/__init__.py index e69de29b..6c769f83 100644 --- a/gunicorn/workers/__init__.py +++ b/gunicorn/workers/__init__.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 - +# +# This file is part of gunicorn released under the MIT license. +# See the NOTICE for more information. + +# supported gunicorn workers. +SUPPORTED_WORKERS={ + "sync": "gunicorn.workers.sync.SyncWorker", + "eventlet": "gunicorn.workers.geventlet.EventletWorker", + "gevent": "gunicorn.workers.ggevent.GeventWorker", + "gevent_wsgi": "gunicorn.workers.ggevent.GeventPyWSGIWorker", + "gevent_pywsgi": "gunicorn.workers.ggevent.GeventPyWSGIWorker", + "tornado": "gunicorn.workers.gtornado.TornadoWorker"} + diff --git a/requirements_dev.txt b/requirements_dev.txt index 9955decc..b7ebf797 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,2 +1,4 @@ -pytest -pytest-cov +py==1.4.19 +pytest==2.5.1 +pytest-cov==1.6 +wsgiref==0.1.2 diff --git a/setup.py b/setup.py index b947fceb..16e20e6c 100644 --- a/setup.py +++ b/setup.py @@ -89,17 +89,6 @@ setup( gunicorn_django=gunicorn.app.djangoapp:run gunicorn_paster=gunicorn.app.pasterapp:run - [gunicorn.workers] - sync=gunicorn.workers.sync:SyncWorker - eventlet=gunicorn.workers.geventlet:EventletWorker - gevent=gunicorn.workers.ggevent:GeventWorker - gevent_wsgi=gunicorn.workers.ggevent:GeventPyWSGIWorker - gevent_pywsgi=gunicorn.workers.ggevent:GeventPyWSGIWorker - tornado=gunicorn.workers.gtornado:TornadoWorker - - [gunicorn.loggers] - simple=gunicorn.glogging:Logger - [paste.server_runner] main=gunicorn.app.pasterapp:paste_server """