#26540: Can't run tests without "default" connection set
----------------------------------------------+--------------------
     Reporter:  marcinn                       |      Owner:  nobody
         Type:  Bug                           |     Status:  new
    Component:  Database layer (models, ORM)  |    Version:  1.8
     Severity:  Normal                        |   Keywords:
 Triage Stage:  Unreviewed                    |  Has patch:  0
Easy pickings:  0                             |      UI/UX:  0
----------------------------------------------+--------------------
 According to use cases described in #19775 and #16752 I'm using project
 with explicit db routing and no "default" connection.

 When I'm trying to run tests with empty 'default' connection, I'm getting:

 {{{
 Traceback (most recent call last):
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/test/testcases.py",
 line 946, in setUpClass
     if not connections_support_transactions():
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/test/testcases.py",
 line 911, in connections_support_transactions
     for conn in connections.all())
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/test/testcases.py",
 line 911, in <genexpr>
     for conn in connections.all())
   File
 
"/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/utils/functional.py",
 line 59, in __get__
     res = instance.__dict__[self.name] = self.func(instance)
   File
 
"/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/backends/base/features.py",
 line 216, in supports_transactions
     with self.connection.cursor() as cursor:
   File
 
"/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/backends/base/base.py",
 line 164, in cursor
     cursor = self.make_cursor(self._cursor())
   File
 
"/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/backends/dummy/base.py",
 line 21, in complain
     raise ImproperlyConfigured("settings.DATABASES is improperly
 configured. "
 ImproperlyConfigured: settings.DATABASES is improperly configured. Please
 supply the ENGINE value. Check settings documentation for more details.

 }}}

 When running without "default" key configured, I'm getting an error
 probably on the first attempt to get specific connection (not the
 "default" one):

 {{{
 [...]
   File "/home/marcin/myproject/etl/analysis/etltoolkit.py", line 1098, in
 dimension_factory
     sequencer = sequencer or SurrogateKeySequencer(dwhmodel)
   File "/home/marcin/myproject/etl/analysis/etltoolkit.py", line 739, in
 __init__
     self.connection = connection or connections['etlstg']
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/utils.py",
 line 237, in __getitem__
     self.ensure_defaults(alias)
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/utils.py",
 line 168, in ensure_defaults
     conn = self.databases[alias]
   File
 
"/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/utils/functional.py",
 line 59, in __get__
     res = instance.__dict__[self.name] = self.func(instance)
   File
 "/home/marcin/myproject/eggs/Django-1.8.6-py2.7.egg/django/db/utils.py",
 line 159, in databases
     raise ImproperlyConfigured("You must define a '%s' database" %
 DEFAULT_DB_ALIAS)
 django.core.exceptions.ImproperlyConfigured: You must define a 'default'
 database
 }}}

 The bug lies in `ConnectionHandler.databases()`:

 {{{
     def databases(self):
         if self._databases is None:
             self._databases = settings.DATABASES
         if self._databases == {}:
             self._databases = {
                 DEFAULT_DB_ALIAS: {
                     'ENGINE': 'django.db.backends.dummy',
                 },
             }
         if DEFAULT_DB_ALIAS not in self._databases:
             raise ImproperlyConfigured("You must define a '%s' database" %
 DEFAULT_DB_ALIAS)
         return self._databases
 }}}

 When `ensure_defaults()` asks for specified connection (in my case -
 "etlstg" alias), the `databases()` is called as a property getter  and
 checks existence of DEFAULT_DB_ALIAS.

 Please do not force us to use DEFAULT_DB_ALIAS if you won't allow to
 rename it in settings (#26197).

--
Ticket URL: <https://code.djangoproject.com/ticket/26540>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/050.aecf71103f802ca8651ab0f8d73058bc%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to