diff options
Diffstat (limited to 'django/db/utils.py')
| -rw-r--r-- | django/db/utils.py | 87 |
1 files changed, 46 insertions, 41 deletions
diff --git a/django/db/utils.py b/django/db/utils.py index 82498d1df6..7ef62ae5a2 100644 --- a/django/db/utils.py +++ b/django/db/utils.py @@ -3,14 +3,15 @@ from importlib import import_module from django.conf import settings from django.core.exceptions import ImproperlyConfigured + # For backwards compatibility with Django < 3.2 from django.utils.connection import ConnectionDoesNotExist # NOQA: F401 from django.utils.connection import BaseConnectionHandler from django.utils.functional import cached_property from django.utils.module_loading import import_string -DEFAULT_DB_ALIAS = 'default' -DJANGO_VERSION_PICKLE_KEY = '_django_version' +DEFAULT_DB_ALIAS = "default" +DJANGO_VERSION_PICKLE_KEY = "_django_version" class Error(Exception): @@ -70,15 +71,15 @@ class DatabaseErrorWrapper: if exc_type is None: return for dj_exc_type in ( - DataError, - OperationalError, - IntegrityError, - InternalError, - ProgrammingError, - NotSupportedError, - DatabaseError, - InterfaceError, - Error, + DataError, + OperationalError, + IntegrityError, + InternalError, + ProgrammingError, + NotSupportedError, + DatabaseError, + InterfaceError, + Error, ): db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__) if issubclass(exc_type, db_exc_type): @@ -95,6 +96,7 @@ class DatabaseErrorWrapper: def inner(*args, **kwargs): with self: return func(*args, **kwargs) + return inner @@ -104,20 +106,22 @@ def load_backend(backend_name): backend name, or raise an error if it doesn't exist. """ # This backend was renamed in Django 1.9. - if backend_name == 'django.db.backends.postgresql_psycopg2': - backend_name = 'django.db.backends.postgresql' + if backend_name == "django.db.backends.postgresql_psycopg2": + backend_name = "django.db.backends.postgresql" try: - return import_module('%s.base' % backend_name) + return import_module("%s.base" % backend_name) except ImportError as e_user: # The database backend wasn't found. Display a helpful error message # listing all built-in database backends. import django.db.backends + builtin_backends = [ - name for _, name, ispkg in pkgutil.iter_modules(django.db.backends.__path__) - if ispkg and name not in {'base', 'dummy'} + name + for _, name, ispkg in pkgutil.iter_modules(django.db.backends.__path__) + if ispkg and name not in {"base", "dummy"} ] - if backend_name not in ['django.db.backends.%s' % b for b in builtin_backends]: + if backend_name not in ["django.db.backends.%s" % b for b in builtin_backends]: backend_reprs = map(repr, sorted(builtin_backends)) raise ImproperlyConfigured( "%r isn't an available database backend or couldn't be " @@ -132,7 +136,7 @@ def load_backend(backend_name): class ConnectionHandler(BaseConnectionHandler): - settings_name = 'DATABASES' + settings_name = "DATABASES" # Connections needs to still be an actual thread local, as it's truly # thread-critical. Database backends should use @async_unsafe to protect # their code from async contexts, but this will give those contexts @@ -143,13 +147,13 @@ class ConnectionHandler(BaseConnectionHandler): def configure_settings(self, databases): databases = super().configure_settings(databases) if databases == {}: - databases[DEFAULT_DB_ALIAS] = {'ENGINE': 'django.db.backends.dummy'} + databases[DEFAULT_DB_ALIAS] = {"ENGINE": "django.db.backends.dummy"} elif DEFAULT_DB_ALIAS not in databases: raise ImproperlyConfigured( f"You must define a '{DEFAULT_DB_ALIAS}' database." ) elif databases[DEFAULT_DB_ALIAS] == {}: - databases[DEFAULT_DB_ALIAS]['ENGINE'] = 'django.db.backends.dummy' + databases[DEFAULT_DB_ALIAS]["ENGINE"] = "django.db.backends.dummy" return databases @property @@ -166,17 +170,17 @@ class ConnectionHandler(BaseConnectionHandler): except KeyError: raise self.exception_class(f"The connection '{alias}' doesn't exist.") - conn.setdefault('ATOMIC_REQUESTS', False) - conn.setdefault('AUTOCOMMIT', True) - conn.setdefault('ENGINE', 'django.db.backends.dummy') - if conn['ENGINE'] == 'django.db.backends.' or not conn['ENGINE']: - conn['ENGINE'] = 'django.db.backends.dummy' - conn.setdefault('CONN_MAX_AGE', 0) - conn.setdefault('CONN_HEALTH_CHECKS', False) - conn.setdefault('OPTIONS', {}) - conn.setdefault('TIME_ZONE', None) - for setting in ['NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']: - conn.setdefault(setting, '') + conn.setdefault("ATOMIC_REQUESTS", False) + conn.setdefault("AUTOCOMMIT", True) + conn.setdefault("ENGINE", "django.db.backends.dummy") + if conn["ENGINE"] == "django.db.backends." or not conn["ENGINE"]: + conn["ENGINE"] = "django.db.backends.dummy" + conn.setdefault("CONN_MAX_AGE", 0) + conn.setdefault("CONN_HEALTH_CHECKS", False) + conn.setdefault("OPTIONS", {}) + conn.setdefault("TIME_ZONE", None) + for setting in ["NAME", "USER", "PASSWORD", "HOST", "PORT"]: + conn.setdefault(setting, "") def prepare_test_settings(self, alias): """ @@ -187,13 +191,13 @@ class ConnectionHandler(BaseConnectionHandler): except KeyError: raise self.exception_class(f"The connection '{alias}' doesn't exist.") - test_settings = conn.setdefault('TEST', {}) + test_settings = conn.setdefault("TEST", {}) default_test_settings = [ - ('CHARSET', None), - ('COLLATION', None), - ('MIGRATE', True), - ('MIRROR', None), - ('NAME', None), + ("CHARSET", None), + ("COLLATION", None), + ("MIGRATE", True), + ("MIRROR", None), + ("NAME", None), ] for key, value in default_test_settings: test_settings.setdefault(key, value) @@ -202,7 +206,7 @@ class ConnectionHandler(BaseConnectionHandler): self.ensure_defaults(alias) self.prepare_test_settings(alias) db = self.databases[alias] - backend = load_backend(db['ENGINE']) + backend = load_backend(db["ENGINE"]) return backend.DatabaseWrapper(db, alias) def close_all(self): @@ -247,14 +251,15 @@ class ConnectionRouter: chosen_db = method(model, **hints) if chosen_db: return chosen_db - instance = hints.get('instance') + instance = hints.get("instance") if instance is not None and instance._state.db: return instance._state.db return DEFAULT_DB_ALIAS + return _route_db - db_for_read = _router_func('db_for_read') - db_for_write = _router_func('db_for_write') + db_for_read = _router_func("db_for_read") + db_for_write = _router_func("db_for_write") def allow_relation(self, obj1, obj2, **hints): for router in self.routers: |
