it works. but coverage is too low.
All checks were successful
buildbot/tox Build done.

This commit is contained in:
2019-11-07 17:01:53 +01:00
parent b4273d9fd7
commit 8e86233431
9 changed files with 151 additions and 118 deletions

View File

@@ -1,41 +1,29 @@
import importlib
import os
import sys
import django
import mock
from .config import DJANGO_SETTINGS_DIR
class DjangoEnvironment(object):
def __init__(self, project_dir=None, settings_module_name=None):
self.project_dir = project_dir
def get_root_urlconf(project_dir):
if 'django.contrib' in sys.modules:
original_contrib = sys.modules['django.contrib']
else:
original_contrib = None
mock_contrib = mock.Mock(name='django.contrib')
sys.modules['django.contrib'] = mock_contrib
if settings_module_name is not None:
self.settings_module_name = settings_module_name
else:
self.settings_module_name = '{}.settings'.format(DJANGO_SETTINGS_DIR)
settings_dir = os.path.join(project_dir, DJANGO_SETTINGS_DIR)
sys.path.insert(0, settings_dir)
root_urlconf = importlib.import_module('urls')
if sys.version_info.major == 2: # pragma: no cover
reload(root_urlconf) # pylint: disable=undefined-variable
else: # pragma: no cover
importlib.reload(root_urlconf) # pylint: disable=no-member
sys.path.pop(0)
self._original_sys_path = None
self._modified_sys_path = None
if original_contrib:
sys.modules['django.contrib'] = original_contrib
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
return root_urlconf