diff options
author | Claude Paroz <claude@2xlibre.net> | 2013-05-21 11:35:05 +0200 |
---|---|---|
committer | Claude Paroz <claude@2xlibre.net> | 2013-05-23 15:19:12 +0200 |
commit | 2d8c132b187d9dfefe0f409c4fb39b54a6645675 (patch) | |
tree | 7cdea292171a57c88b5ad811f494da5377f51403 /django/db/utils.py | |
parent | 499a745ae1b53614035b9993b148f32d4ce3f138 (diff) | |
download | django-2d8c132b187d9dfefe0f409c4fb39b54a6645675.tar.gz |
Delayed settings.DATABASES usage by ConnectionHandler
Refs #20474.
Diffstat (limited to 'django/db/utils.py')
-rw-r--r-- | django/db/utils.py | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/django/db/utils.py b/django/db/utils.py index e84060f9b3..0bc72fd768 100644 --- a/django/db/utils.py +++ b/django/db/utils.py @@ -6,6 +6,7 @@ import warnings from django.conf import settings from django.core.exceptions import ImproperlyConfigured +from django.utils.functional import cached_property from django.utils.importlib import import_module from django.utils.module_loading import import_by_path from django.utils._os import upath @@ -138,16 +139,27 @@ class ConnectionDoesNotExist(Exception): class ConnectionHandler(object): - def __init__(self, databases): - if not databases: - self.databases = { + def __init__(self, databases=None): + """ + databases is an optional dictionary of database definitions (structured + like settings.DATABASES). + """ + self._databases = databases + self._connections = local() + + @cached_property + 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', }, } - else: - self.databases = databases - self._connections = local() + if DEFAULT_DB_ALIAS not in self._databases: + raise ImproperlyConfigured("You must define a '%s' database" % DEFAULT_DB_ALIAS) + return self._databases def ensure_defaults(self, alias): """ |