From 9033003d97d29f7754b0840333f6f362c0cd31f7 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Sun, 8 Feb 2015 13:38:09 -0500 Subject: [PATCH] Added check_apps_ready() to Apps.get_containing_app_config() --- django/apps/registry.py | 4 +--- tests/apps/tests.py | 14 +++++++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/django/apps/registry.py b/django/apps/registry.py index c64106cd6f..e75bb99cfe 100644 --- a/django/apps/registry.py +++ b/django/apps/registry.py @@ -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): diff --git a/tests/apps/tests.py b/tests/apps/tests.py index 5e23ddb9d1..80cc088f42 100644 --- a/tests/apps/tests.py +++ b/tests/apps/tests.py @@ -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):