#30071: Obscure error message when no default db provided
-------------------------------------+-------------------------------------
     Reporter:  Benjy Weinberger     |                    Owner:  Benjy
                                     |  Weinberger
         Type:  Uncategorized        |                   Status:  assigned
    Component:  Database layer       |                  Version:  2.1
  (models, ORM)                      |
     Severity:  Normal               |               Resolution:
     Keywords:                       |             Triage Stage:
                                     |  Unreviewed
    Has patch:  1                    |      Needs documentation:  0
  Needs tests:  0                    |  Patch needs improvement:  0
Easy pickings:  0                    |                    UI/UX:  0
-------------------------------------+-------------------------------------
Description changed by Benjy Weinberger:

Old description:

> In `ConnectionHandler`, the explicit check for the `DEFAULT_DB_ALIAS`
> key in the databases dict comes only after an attempt to lookup that key.
>
> If you have at least one non-default db, but no default db, no dummy
> default will be created for you, and the `DEFAULT_DB_ALIAS` key will
> not be present. Under these circumstances, referencing the `databases`
> property directly will give a `KeyError` instead of the intended
> `ImproperlyConfigured` error.
>
> Worse, if you try to access a non-default db, `ensure_defaults` will
> catch that `KeyError` but misinterpret it as being for the non-default
> db name (which does in fact exist in the dict).
>
> This change moves the explicit check before the attempt to use the key,
> so that no `KeyError` is ever raised for `DEFAULT_DB_ALIAS`. It adds
> a test for this case, and also adds a test for the case where the
> default db is explicitly set to an empty dict.

New description:

 In `ConnectionHandler`, the explicit check for the `DEFAULT_DB_ALIAS`
 key in the databases dict comes only after an attempt to lookup that key.

 If you have at least one non-default db, but no default db, no dummy
 default will be created for you, and the `DEFAULT_DB_ALIAS` key will
 not be present. Under these circumstances, referencing the `databases`
 property directly will give a `KeyError` instead of the intended
 `ImproperlyConfigured` error.

 Worse, if you try to access a non-default db, `ensure_defaults` will
 catch that `KeyError` but misinterpret it as being for the non-default
 db name (which does in fact exist in the dict).

--

-- 
Ticket URL: <https://code.djangoproject.com/ticket/30071#comment:3>
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/064.8cc98a453e17ca4ad0c826e2a0a748c7%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to