Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Fixed #12288 -- Validate that values in INSTALLED_APPS are unique #1626

Closed
wants to merge 3 commits into from

2 participants

@e0ne

No description provided.

django/conf/__init__.py
@@ -109,7 +109,8 @@ def __setattr__(self, name, value):
"to a tuple, not a string.")
elif name == "INSTALLED_APPS":
value = list(value) # force evaluation of generators on Python 3
- if len(value) != len(set(value)):
+ apps = map(lambda s: s.split('.')[-1], value)
@timgraham Owner

could we use a list comprehension here instead? do we still need len(value) != len(set(value)) in the condition below?

@e0ne
e0ne added a note

I don't understand your idea. But I found some redundant checks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
django/conf/__init__.py
@@ -109,7 +109,8 @@ def __setattr__(self, name, value):
"to a tuple, not a string.")
elif name == "INSTALLED_APPS":
value = list(value) # force evaluation of generators on Python 3
- if len(value) != len(set(value)):
+ apps = map(lambda s: s.split('.')[-1], value)
+ if len(value) != len(set(value)) or len(value) != len(set(apps)):
raise ImproperlyConfigured("The INSTALLED_APPS setting must contain unique values.")
@timgraham Owner

could we change "values" to "app names" in the error message?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
tests/settings_tests/tests.py
@@ -241,11 +241,14 @@ def tearDown(self):
def test_unique(self):
"""
An ImproperlyConfigured exception is raised if the INSTALLED_APPS contains
- any duplicate strings.
+ any duplicate appication name.
@timgraham Owner

name -> names

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
@timgraham
Owner

merged in c1ec089 - thanks!

@timgraham timgraham closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
This page is out of date. Refresh to see the latest.
Showing with 7 additions and 3 deletions.
  1. +3 −2 django/conf/__init__.py
  2. +4 −1 tests/settings_tests/tests.py
View
5 django/conf/__init__.py
@@ -109,8 +109,9 @@ def __setattr__(self, name, value):
"to a tuple, not a string.")
elif name == "INSTALLED_APPS":
value = list(value) # force evaluation of generators on Python 3
- if len(value) != len(set(value)):
- raise ImproperlyConfigured("The INSTALLED_APPS setting must contain unique values.")
+ apps = map(lambda s: s.split('.')[-1], value)
+ if len(value) != len(set(apps)):
+ raise ImproperlyConfigured("The INSTALLED_APPS setting must contain unique application names.")
object.__setattr__(self, name, value)
View
5 tests/settings_tests/tests.py
@@ -241,11 +241,14 @@ def tearDown(self):
def test_unique(self):
"""
An ImproperlyConfigured exception is raised if the INSTALLED_APPS contains
- any duplicate strings.
+ any duplicate appication names.
"""
with self.assertRaises(ImproperlyConfigured):
self.settings_module.INSTALLED_APPS = ("myApp1", "myApp1", "myApp2", "myApp3")
+ with self.assertRaises(ImproperlyConfigured):
+ self.settings_module.INSTALLED_APPS = ("package1.myApp1", "package2.myApp1")
+
class TrailingSlashURLTests(TestCase):
"""
Something went wrong with that request. Please try again.