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

Fixed #8033 -- Explained app registry error during translation setup

Thanks Tim Graham and Aymeric Augustin for the review.
üst 21c496ea
...@@ -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
......
...@@ -11,6 +11,7 @@ import warnings ...@@ -11,6 +11,7 @@ import warnings
from django.apps import apps from django.apps import apps
from django.conf import settings from django.conf import settings
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
...@@ -160,7 +161,14 @@ class DjangoTranslation(gettext_module.GNUTranslations): ...@@ -160,7 +161,14 @@ class DjangoTranslation(gettext_module.GNUTranslations):
def _add_installed_apps_translations(self): def _add_installed_apps_translations(self):
"""Merges translations from each installed app.""" """Merges translations from each installed app."""
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:
localedir = os.path.join(app_config.path, 'locale') localedir = os.path.join(app_config.path, 'locale')
translation = self._new_gnu_trans(localedir) translation = self._new_gnu_trans(localedir)
self.merge(translation) self.merge(translation)
......
...@@ -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