Skip to content

Commit

Permalink
Set CWD and Python path before and after config
Browse files Browse the repository at this point in the history
The config may be specified as a Python module, in which case we want
to ensure that the Python path is fixed up properly before we try to
load it. That means we should follow symlinks and add the current working
directory before and after the configuration is loaded.

Fix benoitc#1349
  • Loading branch information
tilgovi committed Oct 27, 2017
1 parent 502d175 commit fee0a0a
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 17 deletions.
17 changes: 17 additions & 0 deletions gunicorn/app/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,18 @@ def run(self):
sys.stderr.flush()
sys.exit(1)


class Application(BaseApplication):

def chdir(self):
# chdir to the configured path before loading,
# default is the current dir
os.chdir(self.cfg.chdir)

# add the path to sys.path
if self.cfg.chdir not in sys.path:
sys.path.insert(0, self.cfg.chdir)

def get_config_from_filename(self, filename):

if not os.path.exists(filename):
Expand Down Expand Up @@ -142,6 +152,9 @@ def load_config(self):
# optional settings from apps
cfg = self.init(parser, args, args.args)

# set up import paths and follow symlinks
self.chdir()

# Load up the any app specific configuration
if cfg:
for k, v in cfg.items():
Expand Down Expand Up @@ -174,6 +187,10 @@ def load_config(self):
continue
self.cfg.set(k.lower(), v)

# current directory might be changed by the config now
# set up import paths and follow symlinks
self.chdir()

def run(self):
if self.cfg.check_config:
try:
Expand Down
4 changes: 0 additions & 4 deletions gunicorn/app/pasterapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,10 +163,6 @@ def __init__(self, app, gcfg=None, host="127.0.0.1", port=None, *args, **kwargs)
self.load_config_from_file(default_config)

def load(self):
# chdir to the configured path before loading,
# default is the current dir
os.chdir(self.cfg.chdir)

return self.app


Expand Down
13 changes: 0 additions & 13 deletions gunicorn/app/wsgiapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
# See the NOTICE for more information.

import os
import sys

from gunicorn.errors import ConfigError
from gunicorn.app.base import Application
Expand Down Expand Up @@ -37,23 +36,11 @@ def init(self, parser, opts, args):
self.cfg.set("default_proc_name", args[0])
self.app_uri = args[0]

def chdir(self):
# chdir to the configured path before loading,
# default is the current dir
os.chdir(self.cfg.chdir)

# add the path to sys.path
sys.path.insert(0, self.cfg.chdir)

def load_wsgiapp(self):
self.chdir()

# load the app
return util.import_app(self.app_uri)

def load_pasteapp(self):
self.chdir()

# load the paste app
from .pasterapp import load_pasteapp
return load_pasteapp(self.cfgurl, self.relpath, global_conf=self.cfg.paste_global_conf)
Expand Down

0 comments on commit fee0a0a

Please sign in to comment.