Removed support for old-style test database settings per deprecation timeline.

This commit is contained in:
Tim Graham 2014-12-26 12:45:40 -05:00
parent d038c547b5
commit f635d75935
3 changed files with 1 additions and 270 deletions

View File

@ -2,11 +2,9 @@ from importlib import import_module
import os import os
import pkgutil import pkgutil
from threading import local from threading import local
import warnings
from django.conf import settings from django.conf import settings
from django.core.exceptions import ImproperlyConfigured from django.core.exceptions import ImproperlyConfigured
from django.utils.deprecation import RemovedInDjango19Warning
from django.utils.functional import cached_property from django.utils.functional import cached_property
from django.utils.module_loading import import_string from django.utils.module_loading import import_string
from django.utils._os import upath from django.utils._os import upath
@ -178,13 +176,6 @@ class ConnectionHandler(object):
for setting in ['NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']: for setting in ['NAME', 'USER', 'PASSWORD', 'HOST', 'PORT']:
conn.setdefault(setting, '') conn.setdefault(setting, '')
TEST_SETTING_RENAMES = {
'CREATE': 'CREATE_DB',
'USER_CREATE': 'CREATE_USER',
'PASSWD': 'PASSWORD',
}
TEST_SETTING_RENAMES_REVERSE = {v: k for k, v in TEST_SETTING_RENAMES.items()}
def prepare_test_settings(self, alias): def prepare_test_settings(self, alias):
""" """
Makes sure the test settings are available in the 'TEST' sub-dictionary. Makes sure the test settings are available in the 'TEST' sub-dictionary.
@ -194,37 +185,7 @@ class ConnectionHandler(object):
except KeyError: except KeyError:
raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias)
test_dict_set = 'TEST' in conn
test_settings = conn.setdefault('TEST', {}) test_settings = conn.setdefault('TEST', {})
old_test_settings = {}
for key, value in six.iteritems(conn):
if key.startswith('TEST_'):
new_key = key[5:]
new_key = self.TEST_SETTING_RENAMES.get(new_key, new_key)
old_test_settings[new_key] = value
if old_test_settings:
if test_dict_set:
if test_settings != old_test_settings:
raise ImproperlyConfigured(
"Connection '%s' has mismatched TEST and TEST_* "
"database settings." % alias)
else:
test_settings.update(old_test_settings)
for key, _ in six.iteritems(old_test_settings):
warnings.warn("In Django 1.9 the TEST_%s connection setting will be moved "
"to a %s entry in the TEST setting" %
(self.TEST_SETTING_RENAMES_REVERSE.get(key, key), key),
RemovedInDjango19Warning, stacklevel=2)
for key in list(conn.keys()):
if key.startswith('TEST_'):
del conn[key]
# Check that they didn't just use the old name with 'TEST_' removed
for key, new_key in six.iteritems(self.TEST_SETTING_RENAMES):
if key in test_settings:
warnings.warn("Test setting %s was renamed to %s; specified value (%s) ignored" %
(key, new_key, test_settings[key]), stacklevel=2)
for key in ['CHARSET', 'COLLATION', 'NAME', 'MIRROR']: for key in ['CHARSET', 'COLLATION', 'NAME', 'MIRROR']:
test_settings.setdefault(key, None) test_settings.setdefault(key, None)

View File

@ -853,116 +853,6 @@ This is an Oracle-specific setting.
The maximum size that the DATAFILE_TMP is allowed to grow to. The maximum size that the DATAFILE_TMP is allowed to grow to.
.. setting:: OLD_TEST_CHARSET
TEST_CHARSET
~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`CHARSET <TEST_CHARSET>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_COLLATION
TEST_COLLATION
~~~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`COLLATION <TEST_COLLATION>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_DEPENDENCIES
TEST_DEPENDENCIES
~~~~~~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`DEPENDENCIES <TEST_DEPENDENCIES>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_MIRROR
TEST_MIRROR
~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`MIRROR <TEST_MIRROR>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_NAME
TEST_NAME
~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`NAME <TEST_NAME>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_CREATE
TEST_CREATE
~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`CREATE_DB <TEST_CREATE>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_USER
TEST_USER
~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`USER <TEST_USER>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_USER_CREATE
TEST_USER_CREATE
~~~~~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`CREATE_USER <TEST_USER_CREATE>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_PASSWD
TEST_PASSWD
~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`PASSWORD <TEST_PASSWD>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_TBLSPACE
TEST_TBLSPACE
~~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`TBLSPACE <TEST_TBLSPACE>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: OLD_TEST_TBLSPACE_TMP
TEST_TBLSPACE_TMP
~~~~~~~~~~~~~~~~~
.. deprecated:: 1.7
Use the :setting:`TBLSPACE_TMP <TEST_TBLSPACE_TMP>` entry in the
:setting:`TEST <DATABASE-TEST>` dictionary.
.. setting:: DATABASE_ROUTERS .. setting:: DATABASE_ROUTERS
DATABASE_ROUTERS DATABASE_ROUTERS

View File

@ -24,9 +24,8 @@ from django.db.models.sql.constants import CURSOR
from django.db.utils import ConnectionHandler from django.db.utils import ConnectionHandler
from django.test import (TestCase, TransactionTestCase, mock, override_settings, from django.test import (TestCase, TransactionTestCase, mock, override_settings,
skipUnlessDBFeature, skipIfDBFeature) skipUnlessDBFeature, skipIfDBFeature)
from django.test.utils import ignore_warnings, str_prefix from django.test.utils import str_prefix
from django.utils import six from django.utils import six
from django.utils.deprecation import RemovedInDjango19Warning
from django.utils.six.moves import range from django.utils.six.moves import range
from . import models from . import models
@ -1081,125 +1080,6 @@ class BackendUtilTests(TestCase):
'1234600000') '1234600000')
@ignore_warnings(category=UserWarning,
message="Overriding setting DATABASES can lead to unexpected behavior")
class DBTestSettingsRenamedTests(TestCase):
mismatch_msg = ("Connection 'test-deprecation' has mismatched TEST "
"and TEST_* database settings.")
def setUp(self):
super(DBTestSettingsRenamedTests, self).setUp()
self.handler = ConnectionHandler()
self.db_settings = {'default': {}}
def test_mismatched_database_test_settings_1(self):
# if the TEST setting is used, all TEST_* keys must appear in it.
self.db_settings.update({
'test-deprecation': {
'TEST': {},
'TEST_NAME': 'foo',
}
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_mismatched_database_test_settings_2(self):
# if the TEST setting is used, all TEST_* keys must match.
self.db_settings.update({
'test-deprecation': {
'TEST': {'NAME': 'foo'},
'TEST_NAME': 'bar',
},
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_mismatched_database_test_settings_3(self):
# Verifies the mapping of an aliased key.
self.db_settings.update({
'test-deprecation': {
'TEST': {'CREATE_DB': 'foo'},
'TEST_CREATE': 'bar',
},
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_mismatched_database_test_settings_4(self):
# Verifies the mapping of an aliased key when the aliased key is missing.
self.db_settings.update({
'test-deprecation': {
'TEST': {},
'TEST_CREATE': 'bar',
},
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_mismatched_settings_old_none(self):
self.db_settings.update({
'test-deprecation': {
'TEST': {'CREATE_DB': None},
'TEST_CREATE': '',
},
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_mismatched_settings_new_none(self):
self.db_settings.update({
'test-deprecation': {
'TEST': {},
'TEST_CREATE': None,
},
})
with override_settings(DATABASES=self.db_settings):
with self.assertRaisesMessage(ImproperlyConfigured, self.mismatch_msg):
self.handler.prepare_test_settings('test-deprecation')
def test_matched_test_settings(self):
# should be able to define new settings and the old, if they match
self.db_settings.update({
'test-deprecation': {
'TEST': {'NAME': 'foo'},
'TEST_NAME': 'foo',
},
})
with override_settings(DATABASES=self.db_settings):
self.handler.prepare_test_settings('test-deprecation')
def test_new_settings_only(self):
# should be able to define new settings without the old
self.db_settings.update({
'test-deprecation': {
'TEST': {'NAME': 'foo'},
},
})
with override_settings(DATABASES=self.db_settings):
self.handler.prepare_test_settings('test-deprecation')
@ignore_warnings(category=RemovedInDjango19Warning)
def test_old_settings_only(self):
# should be able to define old settings without the new
self.db_settings.update({
'test-deprecation': {
'TEST_NAME': 'foo',
},
})
with override_settings(DATABASES=self.db_settings):
self.handler.prepare_test_settings('test-deprecation')
def test_empty_settings(self):
with override_settings(DATABASES=self.db_settings):
self.handler.prepare_test_settings('default')
@unittest.skipUnless(connection.vendor == 'sqlite', 'SQLite specific test.') @unittest.skipUnless(connection.vendor == 'sqlite', 'SQLite specific test.')
@skipUnlessDBFeature('can_share_in_memory_db') @skipUnlessDBFeature('can_share_in_memory_db')
class TestSqliteThreadSharing(TransactionTestCase): class TestSqliteThreadSharing(TransactionTestCase):