You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.8 KiB
65 lines
1.8 KiB
# -*- coding: utf-8 -
|
|
#
|
|
# This file is part of gunicorn released under the MIT license.
|
|
# See the NOTICE for more information.
|
|
|
|
import os
|
|
|
|
from gunicorn.errors import ConfigError
|
|
from gunicorn.app.base import Application
|
|
from gunicorn import util
|
|
|
|
|
|
class WSGIApplication(Application):
|
|
def init(self, parser, opts, args):
|
|
if opts.paste:
|
|
app_name = 'main'
|
|
path = opts.paste
|
|
if '#' in path:
|
|
path, app_name = path.split('#')
|
|
path = os.path.abspath(os.path.normpath(
|
|
os.path.join(util.getcwd(), path)))
|
|
|
|
if not os.path.exists(path):
|
|
raise ConfigError("%r not found" % path)
|
|
|
|
# paste application, load the config
|
|
self.cfgurl = 'config:%s#%s' % (path, app_name)
|
|
self.relpath = os.path.dirname(path)
|
|
|
|
from .pasterapp import paste_config
|
|
return paste_config(self.cfg, self.cfgurl, self.relpath)
|
|
|
|
if len(args) < 1:
|
|
parser.error("No application module specified.")
|
|
|
|
self.cfg.set("default_proc_name", args[0])
|
|
self.app_uri = args[0]
|
|
|
|
def load_wsgiapp(self):
|
|
# load the app
|
|
return util.import_app(self.app_uri)
|
|
|
|
def load_pasteapp(self):
|
|
# load the paste app
|
|
from .pasterapp import load_pasteapp
|
|
return load_pasteapp(self.cfgurl, self.relpath, global_conf=self.cfg.paste_global_conf)
|
|
|
|
def load(self):
|
|
if self.cfg.paste is not None:
|
|
return self.load_pasteapp()
|
|
else:
|
|
return self.load_wsgiapp()
|
|
|
|
|
|
def run():
|
|
"""\
|
|
The ``gunicorn`` command line runner for launching Gunicorn with
|
|
generic WSGI applications.
|
|
"""
|
|
from gunicorn.app.wsgiapp import WSGIApplication
|
|
WSGIApplication("%(prog)s [OPTIONS] [APP_MODULE]").run()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
run()
|
|
|