Commits

Anonymous committed 2c3fb4e

[soc2010/app-loading] check if there is more than one app with the same db_prefix

Comments (0)

Files changed (3)

django/core/apps.py

     def __init__(self, name):
         self.name = name
         self.verbose_name = _(name.title())
-        self.verbose_name_plural = _(name.title())
         self.db_prefix = name
         self.errors = []
         self.models = []
                                 % app_label)
                     for model in models.itervalues():
                         app_instance.models.append(model)
+                # check if there is more than one app with the same
+                # db_prefix attribute
+                for app in self.app_instances:
+                    for app_cmp in self.app_instances:
+                        if app != app_cmp and \
+                                app.db_prefix == app_cmp.db_prefix:
+                            raise ImproperlyConfigured(
+                                'The apps "%s" and "%s" have the same '
+                                'db_prefix "%s"'
+                                % (app, app_cmp, app.db_prefix))
                 self.loaded = True
                 self.unbound_models = {}
         finally:

tests/appcachetests/model_app/__init__.py

     def __repr__(self):
         return '<MyApp: %s>' % self.name
 
+class MyOtherApp(MyApp):
+    def __init__(self, name):
+        super(MyOtherApp, self).__init__(name)
+        self.db_prefix = 'nomodel_app'

tests/appcachetests/runtests.py

         self.assertEqual(cache.get_apps(), [])
         self.assertTrue(cache.app_cache_ready())
 
+    def test_db_prefix_exception(self):
+        """
+        Test that an exception is raised if two app instances
+        have the same db_prefix attribute
+        """
+        settings.INSTALLED_APPS = ('nomodel_app.MyApp', 'model_app.MyOtherApp',)
+        self.assertRaises(ImproperlyConfigured, cache.get_apps)
+
 class GetAppTests(AppCacheTestCase):
     """Tests for the get_app function"""