mirror of
https://github.com/jazzband/django-configurations.git
synced 2026-03-16 22:20:27 +00:00
Merge pull request #191 from blueyed/setup-once
_setup: do not call django.setup() if settings are configured already
This commit is contained in:
commit
5ea0db0aee
6 changed files with 46 additions and 5 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,6 +1,5 @@
|
||||||
.coverage.*
|
.coverage
|
||||||
coverage.xml
|
coverage.xml
|
||||||
sitecustomize.py
|
|
||||||
docs/_build
|
docs/_build
|
||||||
*.egg-info
|
*.egg-info
|
||||||
*.egg
|
*.egg
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,10 @@ def _setup():
|
||||||
|
|
||||||
importer.install()
|
importer.install()
|
||||||
|
|
||||||
import django
|
from django.apps import apps
|
||||||
django.setup()
|
if not apps.ready:
|
||||||
|
import django
|
||||||
|
django.setup()
|
||||||
|
|
||||||
|
|
||||||
def load_ipython_extension(ipython):
|
def load_ipython_extension(ipython):
|
||||||
|
|
|
||||||
9
sitecustomize.py
Normal file
9
sitecustomize.py
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
"""Setup coverage tracking for subprocesses.
|
||||||
|
|
||||||
|
Any ImportError is silently ignored.
|
||||||
|
Requires COVERAGE_PROCESS_START in the environments, which gets set in
|
||||||
|
tox.ini.
|
||||||
|
"""
|
||||||
|
import coverage
|
||||||
|
|
||||||
|
coverage.process_startup()
|
||||||
17
tests/setup_test.py
Normal file
17
tests/setup_test.py
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
"""Used by tests to ensure logging is kept when calling setup() twice."""
|
||||||
|
|
||||||
|
try:
|
||||||
|
from unittest import mock
|
||||||
|
except ImportError:
|
||||||
|
from mock import mock
|
||||||
|
|
||||||
|
import configurations
|
||||||
|
|
||||||
|
print('setup_1')
|
||||||
|
configurations.setup()
|
||||||
|
|
||||||
|
with mock.patch('django.setup', side_effect=Exception('setup called twice')):
|
||||||
|
print('setup_2')
|
||||||
|
configurations.setup()
|
||||||
|
|
||||||
|
print('setup_done')
|
||||||
|
|
@ -105,3 +105,16 @@ class MainTests(TestCase):
|
||||||
proc = subprocess.Popen(['django-cadmin', 'runserver', '--help'],
|
proc = subprocess.Popen(['django-cadmin', 'runserver', '--help'],
|
||||||
stdout=subprocess.PIPE)
|
stdout=subprocess.PIPE)
|
||||||
self.assertIn('--configuration', proc.communicate()[0].decode('utf-8'))
|
self.assertIn('--configuration', proc.communicate()[0].decode('utf-8'))
|
||||||
|
|
||||||
|
def test_django_setup_only_called_once(self):
|
||||||
|
proc = subprocess.Popen(
|
||||||
|
[sys.executable, os.path.join(os.path.dirname(__file__),
|
||||||
|
'setup_test.py')],
|
||||||
|
stdout=subprocess.PIPE)
|
||||||
|
res = proc.communicate()
|
||||||
|
stdout = res[0].decode('utf-8')
|
||||||
|
|
||||||
|
self.assertIn('setup_1', stdout)
|
||||||
|
self.assertIn('setup_2', stdout)
|
||||||
|
self.assertIn('setup_done', stdout)
|
||||||
|
self.assertEqual(proc.returncode, 0)
|
||||||
|
|
|
||||||
3
tox.ini
3
tox.ini
|
|
@ -25,11 +25,12 @@ deps =
|
||||||
dj20: django>=2.0a1,<2.1
|
dj20: django>=2.0a1,<2.1
|
||||||
dj21: django>=2.1a1,<2.2
|
dj21: django>=2.1a1,<2.2
|
||||||
djmaster: https://github.com/django/django/archive/master.tar.gz#egg=django
|
djmaster: https://github.com/django/django/archive/master.tar.gz#egg=django
|
||||||
|
py27,pypy: mock
|
||||||
|
|
||||||
commands =
|
commands =
|
||||||
python --version
|
python --version
|
||||||
coverage run {envbindir}/django-cadmin test -v2 {posargs:tests}
|
coverage run {envbindir}/django-cadmin test -v2 {posargs:tests}
|
||||||
coverage combine
|
coverage combine . tests/docs
|
||||||
coverage report -m --skip-covered
|
coverage report -m --skip-covered
|
||||||
|
|
||||||
[testenv:readme-py27]
|
[testenv:readme-py27]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue