Kaydet (Commit) f50a1778 authored tarafından Claude Paroz's avatar Claude Paroz

[1.7.x] Fixed #8033 -- Explained app registry error during translation setup

Thanks Tim Graham and Aymeric Augustin for the review.
Backport of 9618d68b from master.
üst 29582ad4
...@@ -4,7 +4,7 @@ import sys ...@@ -4,7 +4,7 @@ import sys
import threading import threading
import warnings import warnings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
from django.utils import lru_cache from django.utils import lru_cache
from django.utils.deprecation import RemovedInDjango19Warning from django.utils.deprecation import RemovedInDjango19Warning
from django.utils._os import upath from django.utils._os import upath
...@@ -116,7 +116,7 @@ class Apps(object): ...@@ -116,7 +116,7 @@ class Apps(object):
Raises an exception if the registry isn't ready. Raises an exception if the registry isn't ready.
""" """
if not self.ready: if not self.ready:
raise RuntimeError("App registry isn't ready yet.") raise AppRegistryNotReady()
def get_app_configs(self): def get_app_configs(self):
""" """
......
...@@ -12,6 +12,11 @@ class DjangoRuntimeWarning(RuntimeWarning): ...@@ -12,6 +12,11 @@ class DjangoRuntimeWarning(RuntimeWarning):
pass pass
class AppRegistryNotReady(Exception):
"""The django.apps registry is not populated yet"""
pass
class ObjectDoesNotExist(Exception): class ObjectDoesNotExist(Exception):
"""The requested object does not exist""" """The requested object does not exist"""
silent_variable_failure = True silent_variable_failure = True
......
...@@ -10,6 +10,7 @@ from threading import local ...@@ -10,6 +10,7 @@ from threading import local
import warnings import warnings
from django.apps import apps from django.apps import apps
from django.core.exceptions import AppRegistryNotReady
from django.dispatch import receiver from django.dispatch import receiver
from django.test.signals import setting_changed from django.test.signals import setting_changed
from django.utils.deprecation import RemovedInDjango19Warning from django.utils.deprecation import RemovedInDjango19Warning
...@@ -181,7 +182,14 @@ def translation(language): ...@@ -181,7 +182,14 @@ def translation(language):
res.merge(t) res.merge(t)
return res return res
for app_config in reversed(list(apps.get_app_configs())): try:
app_configs = reversed(list(apps.get_app_configs()))
except AppRegistryNotReady:
raise AppRegistryNotReady(
"The translation infrastructure cannot be initialized before the "
"apps registry is ready. Check that you don't make non-lazy "
"gettext calls at import time.")
for app_config in app_configs:
apppath = os.path.join(app_config.path, 'locale') apppath = os.path.join(app_config.path, 'locale')
if os.path.isdir(apppath): if os.path.isdir(apppath):
res = _merge(apppath) res = _merge(apppath)
......
...@@ -382,9 +382,9 @@ Troubleshooting ...@@ -382,9 +382,9 @@ Troubleshooting
Here are some common problems that you may encounter during initialization: Here are some common problems that you may encounter during initialization:
* ``RuntimeError: App registry isn't ready yet.`` This happens when importing * ``AppRegistryNotReady`` This happens when importing an application
an application configuration or a models module triggers code that depends configuration or a models module triggers code that depends on the app
on the app registry. registry.
For example, :func:`~django.utils.translation.ugettext()` uses the app For example, :func:`~django.utils.translation.ugettext()` uses the app
registry to look up translation catalogs in applications. To translate at registry to look up translation catalogs in applications. To translate at
......
...@@ -934,7 +934,7 @@ script with:: ...@@ -934,7 +934,7 @@ script with::
>>> import django >>> import django
>>> django.setup() >>> django.setup()
Otherwise, you will hit ``RuntimeError: App registry isn't ready yet.`` Otherwise, you will hit an ``AppRegistryNotReady`` exception.
App registry consistency App registry consistency
^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment