#21715 closed Bug (fixed)
Cannot run tests with the new changes on @master anymore
Reported by: | Matthias Kestenholz | Owned by: | nobody |
---|---|---|---|
Component: | Core (Other) | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
I tried running the of Towel (https://github.com/matthiask/towel/) with Django@master this morning. It does not really matter which project I'm taking though, none of them work right now.
For reference, the initial traceback:
mk@mbp:~/Projects/towel/tests$ .tox/py32-django17/bin/python manage.py runserver Traceback (most recent call last): File "manage.py", line 13, in <module> execute_from_command_line(sys.argv) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/core/management/__init__.py", line 427, in execute_from_command_line utility.execute() File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/core/management/__init__.py", line 419, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/core/management/__init__.py", line 287, in fetch_command commands = get_commands() File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/core/management/__init__.py", line 124, in get_commands apps.populate(installed_apps) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/apps/registry.py", line 87, in populate app_config.import_models(all_models) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/apps/base.py", line 160, in import_models self.models_module = import_module(models_module_name) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/__init__.py", line 124, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 821, in _gcd_import loader.load_module(name) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 436, in load_module return self._load_module(fullname) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 141, in decorated return fxn(self, module, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 342, in _load_module exec(code_object, module.__dict__) File "/Users/mk/Projects/towel/tests/testapp/models.py", line 9, in <module> from towel.modelview import ModelViewURLs File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 436, in load_module return self._load_module(fullname) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 141, in decorated return fxn(self, module, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/importlib/_bootstrap.py", line 342, in _load_module exec(code_object, module.__dict__) File "/Users/mk/Projects/towel/towel/modelview.py", line 24, in <module> class ModelView(object): File "/Users/mk/Projects/towel/towel/modelview.py", line 98, in ModelView _('The new object has been successfully created.')), File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/utils/translation/__init__.py", line 80, in ugettext return _trans.ugettext(message) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/utils/translation/trans_real.py", line 310, in gettext return do_translate(message, 'gettext') File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/utils/translation/trans_real.py", line 297, in do_translate _default = translation(settings.LANGUAGE_CODE) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/utils/translation/trans_real.py", line 199, in translation default_translation = _fetch(settings.LANGUAGE_CODE) File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/utils/translation/trans_real.py", line 182, in _fetch for app_config in reversed(list(apps.get_app_configs())): File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/apps/registry.py", line 108, in get_app_configs self.check_ready() File "/Users/mk/Projects/towel/tests/.tox/py32-django17/src/django/django/apps/registry.py", line 101, in check_ready "App registry isn't populated yet. " RuntimeError: App registry isn't populated yet. Have you called django.setup()?
I could not get it running after several attempts of adding django.setup()
to various places in manage.py
and django/core/management/base.py
The code always hits populate()
, ugettext()
, get_app_configs()
, check_ready
, only the first few lines of the traceback are different.
Change History (7)
comment:1 by , 11 years ago
comment:2 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
Thanks. I was obviously looking in the wrong direction. You also found a bug in my code. Sorry for the noise!
comment:3 by , 11 years ago
Hmm, well the error message could be improved. For example I know that django.setup()
is called by manage.py
but you don't, and it wasn't obvious from the message that this was the issue.
comment:4 by , 11 years ago
It's a purposeful side-effect of the recent app-loading changes that revealed a bug in your code -- it's always wrong to call ugettext at import time.
That said, at the very least, we need to improve the error message. I suspect this exception is going to be encountered often. In practice it happens as soon as importing modules triggers a call to the app registry. Not using lazy translations will be the most common culprit, but looking up templates would have the same effect.
EDIT: oops, I wrote this comment in an old tab that didn't show comments 2, 3, and 4.)
comment:5 by , 11 years ago
Resolution: | fixed |
---|---|
Status: | closed → new |
comment:6 by , 11 years ago
Resolution: | → fixed |
---|---|
Status: | new → closed |
I think you can fix this by using
ugettext_lazy
in place ofugettext
which is certainly advisable for module-level code.