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

Thanks Tim Graham and Aymeric Augustin for the review.
This commit is contained in:
Claude Paroz 2014-06-21 15:00:35 +02:00
parent 21c496ea52
commit 9618d68b34
5 changed files with 20 additions and 7 deletions

View File

@ -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):
"""

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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
^^^^^^^^^^^^^^^^^^^^^^^^