Commit f1cc2be0 authored by Claude Paroz's avatar Claude Paroz
Browse files

Fixed #18575 -- Empty DATABASES should default to dummy backend

Thanks delormemarco@gmail.com for the report.
parent effe96b3
Loading
Loading
Loading
Loading
+2 −6
Original line number Diff line number Diff line
@@ -150,12 +150,8 @@ SERVER_EMAIL = 'root@localhost'
# Whether to send broken-link emails.
SEND_BROKEN_LINK_EMAILS = False

# Database connection info.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.dummy',
    },
}
# Database connection info. If left empty, will default to the dummy backend.
DATABASES = {}

# Classes used to implement DB routing behavior.
DATABASE_ROUTERS = []
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@ __all__ = ('backend', 'connection', 'connections', 'router', 'DatabaseError',
    'IntegrityError', 'DEFAULT_DB_ALIAS')


if DEFAULT_DB_ALIAS not in settings.DATABASES:
if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES:
    raise ImproperlyConfigured("You must define a '%s' database" % DEFAULT_DB_ALIAS)

connections = ConnectionHandler(settings.DATABASES)
+8 −1
Original line number Diff line number Diff line
@@ -53,6 +53,13 @@ class ConnectionDoesNotExist(Exception):

class ConnectionHandler(object):
    def __init__(self, databases):
        if not databases:
            self.databases = {
                DEFAULT_DB_ALIAS: {
                    'ENGINE': 'django.db.backends.dummy',
                },
            }
        else:
            self.databases = databases
        self._connections = local()

+11 −0
Original line number Diff line number Diff line
@@ -23,6 +23,17 @@ from django.utils import unittest
from . import models


class DummyBackendTest(TestCase):
    def test_no_databases(self):
        """
        Test that empty DATABASES setting default to the dummy backend.
        """
        DATABASES = {}
        conns = ConnectionHandler(DATABASES)
        self.assertEqual(conns[DEFAULT_DB_ALIAS].settings_dict['ENGINE'],
            'django.db.backends.dummy')


class OracleChecks(unittest.TestCase):

    @unittest.skipUnless(connection.vendor == 'oracle',