From 8b2a30f6f16cb1f3538847954030d69da005bc7f Mon Sep 17 00:00:00 2001 From: Hasan Ramezani Date: Mon, 21 Dec 2020 14:21:25 +0100 Subject: [PATCH] Fixed #32285 -- Raised ImproperlyConfigured when AppConfig.label is not a valid Python identifier. --- django/apps/config.py | 4 ++++ tests/apps/tests.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/django/apps/config.py b/django/apps/config.py index 6d794eee3a..bced53d506 100644 --- a/django/apps/config.py +++ b/django/apps/config.py @@ -34,6 +34,10 @@ class AppConfig: # This value must be unique across a Django project. if not hasattr(self, 'label'): self.label = app_name.rpartition(".")[2] + if not self.label.isidentifier(): + raise ImproperlyConfigured( + "The app label '%s' is not a valid Python identifier." % self.label + ) # Human-readable name for the application e.g. "Admin". if not hasattr(self, 'verbose_name'): diff --git a/tests/apps/tests.py b/tests/apps/tests.py index 0e1f918bcc..a8a93ce683 100644 --- a/tests/apps/tests.py +++ b/tests/apps/tests.py @@ -436,6 +436,14 @@ class AppConfigTests(SimpleTestCase): ac = AppConfig('label', Stub(__path__=['a'])) self.assertEqual(repr(ac), '') + def test_invalid_label(self): + class MyAppConfig(AppConfig): + label = 'invalid.label' + + msg = "The app label 'invalid.label' is not a valid Python identifier." + with self.assertRaisesMessage(ImproperlyConfigured, msg): + MyAppConfig('test_app', Stub()) + @override_settings( INSTALLED_APPS=['apps.apps.ModelPKAppsConfig'], DEFAULT_AUTO_FIELD='django.db.models.SmallAutoField',