This commit is contained in:
41
src/django_deploy/utils.py
Normal file
41
src/django_deploy/utils.py
Normal file
@@ -0,0 +1,41 @@
|
||||
import importlib
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
|
||||
from .config import DJANGO_SETTINGS_DIR
|
||||
|
||||
|
||||
class DjangoEnvironment(object):
|
||||
def __init__(self, project_dir=None, settings_module_name=None):
|
||||
self.project_dir = project_dir
|
||||
|
||||
if settings_module_name is not None:
|
||||
self.settings_module_name = settings_module_name
|
||||
else:
|
||||
self.settings_module_name = '{}.settings'.format(DJANGO_SETTINGS_DIR)
|
||||
|
||||
self._original_sys_path = None
|
||||
self._modified_sys_path = None
|
||||
|
||||
def __enter__(self):
|
||||
if self.project_dir:
|
||||
self._original_sys_path = sys.path
|
||||
sys.path.insert(0, self.project_dir)
|
||||
self._modified_sys_path = sys.path
|
||||
|
||||
print('Debug: %s' % self.settings_module_name)
|
||||
os.environ['DJANGO_SETTINGS_MODULE'] = self.settings_module_name
|
||||
django.setup()
|
||||
|
||||
from django.conf import settings
|
||||
self.settings = settings
|
||||
if hasattr(settings, 'ROOT_URLCONF'):
|
||||
self.root_urlconf = importlib.import_module(settings.ROOT_URLCONF)
|
||||
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
if self._modified_sys_path is not None and self._original_sys_path is not None:
|
||||
if sys.path == self._modified_sys_path:
|
||||
sys.path = self._original_sys_path
|
||||
Reference in New Issue
Block a user