Commit f50a1778 authored by Claude Paroz's avatar Claude Paroz
Browse files

[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.
parent 29582ad4
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
@@ -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)
+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
^^^^^^^^^^^^^^^^^^^^^^^^