summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2009-03-13 04:41:45 +0000
committerAdrian Holovaty <adrian@holovaty.com>2009-03-13 04:41:45 +0000
commitd8744cca265243386977e4fbea671a72e6550ac7 (patch)
treede61c21fe56080ee662ecbf1708477ebdf5f6cb4
parentc3dc837950966013ca5a4a235e85ed85595f7161 (diff)
Fixed #10487 -- Refactored the database-backend-selection logic into a function, django.db.load_backend. Thanks to Alex Gaynor for the initial patch
git-svn-id: http://code.djangoproject.com/svn/django/trunk@10045 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/db/__init__.py50
1 files changed, 26 insertions, 24 deletions
diff --git a/django/db/__init__.py b/django/db/__init__.py
index 517fec6e84..7d7f66290b 100644
--- a/django/db/__init__.py
+++ b/django/db/__init__.py
@@ -9,32 +9,34 @@ __all__ = ('backend', 'connection', 'DatabaseError', 'IntegrityError')
if not settings.DATABASE_ENGINE:
settings.DATABASE_ENGINE = 'dummy'
-try:
- # Most of the time, the database backend will be one of the official
- # backends that ships with Django, so look there first.
- _import_path = 'django.db.backends.'
- backend = __import__('%s%s.base' % (_import_path, settings.DATABASE_ENGINE), {}, {}, [''])
-except ImportError, e:
- # If the import failed, we might be looking for a database backend
- # distributed external to Django. So we'll try that next.
+def load_backend(backend_name):
try:
- _import_path = ''
- backend = __import__('%s.base' % settings.DATABASE_ENGINE, {}, {}, [''])
- except ImportError, e_user:
- # The database backend wasn't found. Display a helpful error message
- # listing all possible (built-in) database backends.
- backend_dir = os.path.join(__path__[0], 'backends')
+ # Most of the time, the database backend will be one of the official
+ # backends that ships with Django, so look there first.
+ return __import__('django.db.backends.%s.base' % backend_name, {}, {}, [''])
+ except ImportError, e:
+ # If the import failed, we might be looking for a database backend
+ # distributed external to Django. So we'll try that next.
try:
- available_backends = [f for f in os.listdir(backend_dir)
- if os.path.isdir(os.path.join(backend_dir, f))]
- except EnvironmentError:
- available_backends = []
- available_backends.sort()
- if settings.DATABASE_ENGINE not in available_backends:
- raise ImproperlyConfigured, "%r isn't an available database backend. Available options are: %s\nError was: %s" % \
- (settings.DATABASE_ENGINE, ", ".join(map(repr, available_backends)), e_user)
- else:
- raise # If there's some other error, this must be an error in Django itself.
+ return __import__('%s.base' % backend_name, {}, {}, [''])
+ except ImportError, e_user:
+ # The database backend wasn't found. Display a helpful error message
+ # listing all possible (built-in) database backends.
+ backend_dir = os.path.join(__path__[0], 'backends')
+ try:
+ available_backends = [f for f in os.listdir(backend_dir)
+ if os.path.isdir(os.path.join(backend_dir, f))]
+ except EnvironmentError:
+ available_backends = []
+ available_backends.sort()
+ if backend_name not in available_backends:
+ error_msg = "%r isn't an available database backend. Available options are: %s\nError was: %s" % \
+ (backend_name, ", ".join(map(repr, available_backends)), e_user)
+ raise ImproperlyConfigured(error_msg)
+ else:
+ raise # If there's some other error, this must be an error in Django itself.
+
+backend = load_backend(settings.DATABASE_ENGINE)
# `connection`, `DatabaseError` and `IntegrityError` are convenient aliases
# for backend bits.