Commit 9033003d authored by Tim Graham's avatar Tim Graham
Browse files

Added check_apps_ready() to Apps.get_containing_app_config()

parent 540ca563
Loading
Loading
Loading
Loading
+1 −3
Original line number Diff line number Diff line
@@ -227,9 +227,7 @@ class Apps(object):
        Returns the app config for the inner application in case of nesting.
        Returns None if the object isn't in any registered app config.
        """
        # In Django 1.7 and 1.8, it's allowed to call this method at import
        # time, even while the registry is being populated. In Django 1.9 and
        # later, that should be forbidden with `self.check_apps_ready()`.
        self.check_apps_ready()
        candidates = []
        for app_config in self.app_configs.values():
            if object_name.startswith(app_config.name):
+13 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ from unittest import skipUnless
from django.apps import AppConfig, apps
from django.apps.registry import Apps
from django.contrib.admin.models import LogEntry
from django.core.exceptions import ImproperlyConfigured
from django.core.exceptions import AppRegistryNotReady, ImproperlyConfigured
from django.db import models
from django.test import TestCase, override_settings
from django.test.utils import extend_sys_path
@@ -247,6 +247,18 @@ class AppsTests(TestCase):
                "Conflicting 'southponies' models in application 'apps':.*"):
            type(str("SouthPonies"), (models.Model,), body)

    def test_get_containing_app_config_apps_not_ready(self):
        """
        apps.get_containing_app_config() should raise an exception if
        apps.apps_ready isn't True.
        """
        apps.apps_ready = False
        try:
            with self.assertRaisesMessage(AppRegistryNotReady, "Apps aren't loaded yet"):
                apps.get_containing_app_config('foo')
        finally:
            apps.apps_ready = True


class Stub(object):
    def __init__(self, **kwargs):