Fixed #8033 -- Explained app registry error during translation setup
Thanks Tim Graham and Aymeric Augustin for the review.
This commit is contained in:
parent
21c496ea52
commit
9618d68b34
|
@ -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
|
||||
|
|
|
@ -11,6 +11,7 @@ import warnings
|
|||
|
||||
from django.apps import apps
|
||||
from django.conf import settings
|
||||
from django.core.exceptions import AppRegistryNotReady
|
||||
from django.dispatch import receiver
|
||||
from django.test.signals import setting_changed
|
||||
from django.utils.deprecation import RemovedInDjango19Warning
|
||||
|
@ -160,7 +161,14 @@ class DjangoTranslation(gettext_module.GNUTranslations):
|
|||
|
||||
def _add_installed_apps_translations(self):
|
||||
"""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')
|
||||
translation = self._new_gnu_trans(localedir)
|
||||
self.merge(translation)
|
||||
|
|
|
@ -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
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
|
Loading…
Reference in New Issue