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
import threading
import warnings
from django.core.exceptions import ImproperlyConfigured
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
from django.utils import lru_cache
from django.utils.deprecation import RemovedInDjango19Warning
from django.utils._os import upath
......@@ -116,7 +116,7 @@ class Apps(object):
Raises an exception if the registry isn't ready.
"""
if not self.ready:
raise RuntimeError("App registry isn't ready yet.")
raise AppRegistryNotReady()
def get_app_configs(self):
"""
......
......@@ -12,6 +12,11 @@ class DjangoRuntimeWarning(RuntimeWarning):
pass
class AppRegistryNotReady(Exception):
"""The django.apps registry is not populated yet"""
pass
class ObjectDoesNotExist(Exception):
"""The requested object does not exist"""
silent_variable_failure = True
......
......@@ -10,6 +10,7 @@ from threading import local
import warnings
from django.apps import apps
from django.core.exceptions import AppRegistryNotReady
from django.dispatch import receiver
from django.test.signals import setting_changed
from django.utils.deprecation import RemovedInDjango19Warning
......@@ -181,7 +182,14 @@ def translation(language):
res.merge(t)
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')
if os.path.isdir(apppath):
res = _merge(apppath)
......
......@@ -382,9 +382,9 @@ Troubleshooting
Here are some common problems that you may encounter during initialization:
* ``RuntimeError: App registry isn't ready yet.`` This happens when importing
an application configuration or a models module triggers code that depends
on the app registry.
* ``AppRegistryNotReady`` This happens when importing an application
configuration or a models module triggers code that depends on the app
registry.
For example, :func:`~django.utils.translation.ugettext()` uses the app
registry to look up translation catalogs in applications. To translate at
......
......@@ -934,7 +934,7 @@ script with::
>>> import django
>>> django.setup()
Otherwise, you will hit ``RuntimeError: App registry isn't ready yet.``
Otherwise, you will hit an ``AppRegistryNotReady`` exception.
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