1
0
mirror of https://github.com/django/django.git synced 2025-07-04 17:59:13 +00:00

Added basic tests for settings.DATABASES populating

django.db.connections with lazy db connections. 


git-svn-id: http://code.djangoproject.com/svn/django/branches/multiple-db-support@3231 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Jason Pellerin 2006-06-28 19:26:33 +00:00
parent 966df94e75
commit 68cc8a1131

View File

@ -0,0 +1,116 @@
import copy
import os
import sys
import tempfile
from django.conf import settings
from django import db
from runtests import doctest, DjangoDoctestRunner, error_list
# database files
fh, db_a = tempfile.mkstemp()
os.close(fh)
fh, db_b = tempfile.mkstemp()
os.close(fh)
# patches
tmp_settings = None
tmp_connections = None
# tests
test = r"""
XXX. Using multiple database connections
Django normally uses only a single database connection. However, support is
available for connecting to any number of different, named databases.
Named connections are defined in your settings module. Create a
`DATABASES` variable that is a dict, mapping connection names to their
particulars. The particulars are defined in a dict with the same keys
as the variable names as are used to define the default connection.
.. note::
Please note that this uses the sqlite3 backend and writes temporary
database files to disk. This test will fail unless sqlite3 is
installed and your temp directory is writable.
>>> from django.conf import settings
>>> settings.DATABASES = {
... 'a': { 'DATABASE_ENGINE': 'sqlite3',
... 'DATABASE_NAME': db_a
... },
... 'b': { 'DATABASE_ENGINE': 'sqlite3',
... 'DATABASE_NAME': db_b
... }}
Connections are established lazily, when requested by name. When
accessed, `connections[database]` holds a `ConnectionInfo` instance,
with the attributes: `DatabaseError`, `backend`,
`get_introspection_module`, `get_creation_module`, and
`runshell`. Access connections through the `connections` property of
the `django.db` module:
>>> from django.db import connections
>>> connections['a'].settings.DATABASE_NAME == db_a
True
>>> connections['b'].settings.DATABASE_NAME == db_b
True
Invalid connection names raise ImproperlyConfigured:
>>> connections['bad']
Traceback (most recent call last):
...
ImproperlyConfigured: No database connection 'bad' has been configured
"""
def cleanup():
if os.path.exists(db_a):
os.unlink(db_a)
if os.path.exists(db_b):
os.unlink(db_b)
def setup():
global tmp_settings, tmp_connections
try:
tmp_connections = db.connections
db.connections = db.LazyConnectionManager()
tmp_settings = copy.copy(settings.DATABASES)
except AttributeError:
pass
def teardown():
try:
db.connections = tmp_connections
settings.DATABASES = tmp_settings
except AttributeError:
pass
cleanup()
def run_tests(verbosity_level):
setup()
try:
main(verbosity_level)
finally:
teardown()
def main(verbosity_level):
mod = sys.modules[__name__]
p = doctest.DocTestParser()
dtest = p.get_doctest(mod.test, mod.__dict__, __name__, None, None)
runner = DjangoDoctestRunner(verbosity_level=verbosity_level,
verbose=False)
runner.run(dtest, clear_globs=True, out=sys.stdout.write)
if error_list:
out = []
for d in error_list:
out.extend([d['title'], "=" * len(d['title']),
d['description']])
raise Exception, "%s multiple_databases test%s failed:\n\n %s" \
% (len(error_list),
len(error_list) != 1 and 's' or '',
'\n'.join(out))
if __name__ == '__main__':
run_tests(1)