mirror of
https://github.com/django/django.git
synced 2025-10-24 14:16:09 +00:00
[soc2009/multidb] Renaming of database attributes - you now use NAME, ENGINE, etc rather than DATABASE_NAME, DATABASE_ENGINE inside DATABASES. Also deprecates the use of short names (.e.g., `sqlite3` for backends in ENGINE). Patch from Russell Keith-Magee.
Conflicts: docs/releases/1.2.txt git-svn-id: http://code.djangoproject.com/svn/django/branches/soc2009/multidb@11775 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -61,23 +61,25 @@ class AdminScriptTestCase(unittest.TestCase):
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def _ext_backend_path(self):
|
||||
def _ext_backend_paths(self):
|
||||
"""
|
||||
Returns the path for the external backend package, or None if no
|
||||
external backend is detected.
|
||||
Returns the paths for any external backend packages.
|
||||
"""
|
||||
paths = []
|
||||
first_package_re = re.compile(r'(^[^\.]+)\.')
|
||||
result = first_package_re.findall(settings.DATABASE_ENGINE)
|
||||
if result:
|
||||
backend_pkg = __import__(result[0])
|
||||
backend_dir = os.path.dirname(backend_pkg.__file__)
|
||||
return os.path.dirname(backend_dir)
|
||||
for backend in settings.DATABASES.values():
|
||||
result = first_package_re.findall(backend['ENGINE'])
|
||||
if result and result != 'django':
|
||||
backend_pkg = __import__(result[0])
|
||||
backend_dir = os.path.dirname(backend_pkg.__file__)
|
||||
paths.append(os.path.dirname(backend_dir))
|
||||
return paths
|
||||
|
||||
def run_test(self, script, args, settings_file=None, apps=None):
|
||||
test_dir = os.path.dirname(os.path.dirname(__file__))
|
||||
project_dir = os.path.dirname(test_dir)
|
||||
base_dir = os.path.dirname(project_dir)
|
||||
ext_backend_base_dir = self._ext_backend_path()
|
||||
ext_backend_base_dirs = self._ext_backend_paths()
|
||||
|
||||
# Remember the old environment
|
||||
old_django_settings_module = os.environ.get('DJANGO_SETTINGS_MODULE', None)
|
||||
@@ -95,8 +97,7 @@ class AdminScriptTestCase(unittest.TestCase):
|
||||
elif 'DJANGO_SETTINGS_MODULE' in os.environ:
|
||||
del os.environ['DJANGO_SETTINGS_MODULE']
|
||||
python_path = [test_dir, base_dir]
|
||||
if ext_backend_base_dir:
|
||||
python_path.append(ext_backend_base_dir)
|
||||
python_path.extend(ext_backend_base_dirs)
|
||||
os.environ[python_path_var_name] = os.pathsep.join(python_path)
|
||||
|
||||
# Build the command line
|
||||
|
||||
@@ -327,7 +327,7 @@ def run_stddev_tests():
|
||||
Stddev and Variance are not guaranteed to be available for SQLite, and
|
||||
are not available for PostgreSQL before 8.2.
|
||||
"""
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'sqlite3':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.sqlite3':
|
||||
return False
|
||||
|
||||
class StdDevPop(object):
|
||||
|
||||
@@ -10,7 +10,7 @@ class Callproc(unittest.TestCase):
|
||||
def test_dbms_session(self):
|
||||
# If the backend is Oracle, test that we can call a standard
|
||||
# stored procedure through our cursor wrapper.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'oracle':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
|
||||
convert_unicode = backend.convert_unicode
|
||||
cursor = connection.cursor()
|
||||
cursor.callproc(convert_unicode('DBMS_SESSION.SET_IDENTIFIER'),
|
||||
@@ -39,7 +39,7 @@ class LongString(unittest.TestCase):
|
||||
def test_long_string(self):
|
||||
# If the backend is Oracle, test that we can save a text longer
|
||||
# than 4000 chars and read it properly
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'oracle':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
|
||||
c = connection.cursor()
|
||||
c.execute('CREATE TABLE ltext ("TEXT" NCLOB)')
|
||||
long_str = ''.join([unicode(x) for x in xrange(4000)])
|
||||
@@ -79,7 +79,7 @@ __test__ = {'API_TESTS': """
|
||||
# Unfortunately with sqlite3 the in-memory test database cannot be
|
||||
# closed, and so it cannot be re-opened during testing, and so we
|
||||
# sadly disable this test for now.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] != 'sqlite3':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.sqlite3':
|
||||
__test__['API_TESTS'] += """
|
||||
>>> connection_created.connect(connection_created_test)
|
||||
>>> connection.close() # Ensure the connection is closed
|
||||
|
||||
@@ -93,7 +93,7 @@ u'Outstanding'
|
||||
|
||||
# Regression test for #8354: the MySQL backend should raise an error if given
|
||||
# a timezone-aware datetime object.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'mysql':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.mysql':
|
||||
__test__['API_TESTS'] += """
|
||||
>>> from django.utils import tzinfo
|
||||
>>> dt = datetime.datetime(2008, 8, 31, 16, 20, tzinfo=tzinfo.FixedOffset(0))
|
||||
|
||||
@@ -8,18 +8,18 @@ class Book(models.Model):
|
||||
|
||||
# Can't run this test under SQLite, because you can't
|
||||
# get two connections to an in-memory database.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] != 'sqlite3':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.sqlite3':
|
||||
class DeleteLockingTest(TransactionTestCase):
|
||||
def setUp(self):
|
||||
# Create a second connection to the database
|
||||
conn_settings = settings.DATABASES[DEFAULT_DB_ALIAS]
|
||||
self.conn2 = backend.DatabaseWrapper({
|
||||
'DATABASE_HOST': conn_settings['DATABASE_HOST'],
|
||||
'DATABASE_NAME': conn_settings['DATABASE_NAME'],
|
||||
'DATABASE_OPTIONS': conn_settings['DATABASE_OPTIONS'],
|
||||
'DATABASE_PASSWORD': conn_settings['DATABASE_PASSWORD'],
|
||||
'DATABASE_PORT': conn_settings['DATABASE_PORT'],
|
||||
'DATABASE_USER': conn_settings['DATABASE_USER'],
|
||||
'HOST': conn_settings['HOST'],
|
||||
'NAME': conn_settings['NAME'],
|
||||
'OPTIONS': conn_settings['OPTIONS'],
|
||||
'PASSWORD': conn_settings['PASSWORD'],
|
||||
'PORT': conn_settings['PORT'],
|
||||
'USER': conn_settings['USER'],
|
||||
'TIME_ZONE': settings.TIME_ZONE,
|
||||
})
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ Complex expressions of different connection types are possible.
|
||||
"""}
|
||||
|
||||
# Oracle doesn't support the Bitwise OR operator.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] != 'oracle':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.oracle':
|
||||
__test__['API_TESTS'] += """
|
||||
|
||||
>>> _ = Number.objects.filter(pk=n.pk).update(integer=42, float=15.5)
|
||||
|
||||
@@ -35,7 +35,7 @@ class Stuff(models.Model):
|
||||
# Oracle doesn't distinguish between None and the empty string.
|
||||
# This hack makes the test case pass using Oracle.
|
||||
name = self.name
|
||||
if (settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'oracle'
|
||||
if (settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle'
|
||||
and name == u''):
|
||||
name = None
|
||||
return unicode(name) + u' is owned by ' + unicode(self.owner)
|
||||
|
||||
@@ -80,7 +80,7 @@ class IntrospectionTests(TestCase):
|
||||
['IntegerField', 'CharField', 'CharField', 'CharField'])
|
||||
|
||||
# Regression test for #9991 - 'real' types in postgres
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'].startswith('postgresql'):
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'].startswith('django.db.backends.postgresql'):
|
||||
def test_postgresql_real_type(self):
|
||||
cursor = connection.cursor()
|
||||
cursor.execute("CREATE TABLE django_ixn_real_test_table (number REAL);")
|
||||
|
||||
@@ -149,7 +149,9 @@ datetime.datetime(2000, 1, 1, 6, 1, 1)
|
||||
|
||||
"""}
|
||||
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] not in ("mysql", "oracle"):
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] not in (
|
||||
"django.db.backends.mysql",
|
||||
"django.db.backends.oracle"):
|
||||
__test__["timezone-tests"] = """
|
||||
# Saving an updating with timezone-aware datetime Python objects. Regression
|
||||
# test for #10443.
|
||||
|
||||
@@ -1223,13 +1223,13 @@ FieldError: Infinite loop caused by ordering.
|
||||
|
||||
|
||||
# In Oracle, we expect a null CharField to return u'' instead of None.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == "oracle":
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == "django.db.backends.oracle":
|
||||
__test__["API_TESTS"] = __test__["API_TESTS"].replace("<NONE_OR_EMPTY_UNICODE>", "u''")
|
||||
else:
|
||||
__test__["API_TESTS"] = __test__["API_TESTS"].replace("<NONE_OR_EMPTY_UNICODE>", "None")
|
||||
|
||||
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == "mysql":
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == "django.db.backends.mysql":
|
||||
__test__["API_TESTS"] += """
|
||||
When grouping without specifying ordering, we add an explicit "ORDER BY NULL"
|
||||
portion in MySQL to prevent unnecessary sorting.
|
||||
|
||||
@@ -326,7 +326,7 @@ The end."""),
|
||||
# Because Oracle treats the empty string as NULL, Oracle is expected to fail
|
||||
# when field.empty_strings_allowed is True and the value is None; skip these
|
||||
# tests.
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'oracle':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] == 'django.db.backends.oracle':
|
||||
test_data = [data for data in test_data
|
||||
if not (data[0] == data_obj and
|
||||
data[2]._meta.get_field('data').empty_strings_allowed and
|
||||
@@ -335,7 +335,7 @@ if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] == 'oracle':
|
||||
# Regression test for #8651 -- a FK to an object iwth PK of 0
|
||||
# This won't work on MySQL since it won't let you create an object
|
||||
# with a primary key of 0,
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['DATABASE_ENGINE'] != 'mysql':
|
||||
if settings.DATABASES[DEFAULT_DB_ALIAS]['ENGINE'] != 'django.db.backends.mysql':
|
||||
test_data.extend([
|
||||
(data_obj, 0, Anchor, "Anchor 0"),
|
||||
(fk_obj, 465, FKData, 0),
|
||||
|
||||
Reference in New Issue
Block a user