Commit 9618d68b authored by Claude Paroz's avatar Claude Paroz
Browse files

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

Thanks Tim Graham and Aymeric Augustin for the review.
parent 21c496ea
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -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):
        """
+5 −0
Original line number Diff line number Diff line
@@ -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
+9 −1
Original line number Diff line number Diff line
@@ -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)
+3 −3
Original line number Diff line number Diff line
@@ -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
+1 −1
Original line number Diff line number Diff line
@@ -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
^^^^^^^^^^^^^^^^^^^^^^^^