Changed the way cache specifiers are parsed.
Allows us to reuse the same code in multiple places, avoiding new and interesting bugs (the testing framework had a DIY version that was slightly wrong, for example). Fixed #9833. git-svn-id: http://code.djangoproject.com/svn/django/trunk@9936 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
d77236960a
commit
b740706707
|
@ -31,7 +31,12 @@ BACKENDS = {
|
||||||
'dummy': 'dummy',
|
'dummy': 'dummy',
|
||||||
}
|
}
|
||||||
|
|
||||||
def get_cache(backend_uri):
|
def parse_backend_uri(backend_uri):
|
||||||
|
"""
|
||||||
|
Converts the "backend_uri" into a cache scheme ('db', 'memcached', etc), a
|
||||||
|
host and any extra params that are required for the backend. Returns a
|
||||||
|
(scheme, host, params) tuple.
|
||||||
|
"""
|
||||||
if backend_uri.find(':') == -1:
|
if backend_uri.find(':') == -1:
|
||||||
raise InvalidCacheBackendError, "Backend URI must start with scheme://"
|
raise InvalidCacheBackendError, "Backend URI must start with scheme://"
|
||||||
scheme, rest = backend_uri.split(':', 1)
|
scheme, rest = backend_uri.split(':', 1)
|
||||||
|
@ -48,6 +53,10 @@ def get_cache(backend_uri):
|
||||||
if host.endswith('/'):
|
if host.endswith('/'):
|
||||||
host = host[:-1]
|
host = host[:-1]
|
||||||
|
|
||||||
|
return scheme, host, params
|
||||||
|
|
||||||
|
def get_cache(backend_uri):
|
||||||
|
scheme, host, params = parse_backend_uri(backend_uri)
|
||||||
if scheme in BACKENDS:
|
if scheme in BACKENDS:
|
||||||
module = __import__('django.core.cache.backends.%s' % BACKENDS[scheme], {}, {}, [''])
|
module = __import__('django.core.cache.backends.%s' % BACKENDS[scheme], {}, {}, [''])
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -312,11 +312,12 @@ class BaseDatabaseCreation(object):
|
||||||
self.connection.close()
|
self.connection.close()
|
||||||
settings.DATABASE_NAME = test_database_name
|
settings.DATABASE_NAME = test_database_name
|
||||||
settings.DATABASE_SUPPORTS_TRANSACTIONS = self._rollback_works()
|
settings.DATABASE_SUPPORTS_TRANSACTIONS = self._rollback_works()
|
||||||
|
|
||||||
call_command('syncdb', verbosity=verbosity, interactive=False)
|
call_command('syncdb', verbosity=verbosity, interactive=False)
|
||||||
|
|
||||||
if settings.CACHE_BACKEND.startswith('db://'):
|
if settings.CACHE_BACKEND.startswith('db://'):
|
||||||
cache_name = settings.CACHE_BACKEND[len('db://'):]
|
from django.core.cache import parse_backend_uri
|
||||||
|
_, cache_name, _ = parse_backend_uri(settings.CACHE_BACKEND)
|
||||||
call_command('createcachetable', cache_name)
|
call_command('createcachetable', cache_name)
|
||||||
|
|
||||||
# Get a cursor (even though we don't need one yet). This has
|
# Get a cursor (even though we don't need one yet). This has
|
||||||
|
@ -363,7 +364,7 @@ class BaseDatabaseCreation(object):
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
return test_database_name
|
return test_database_name
|
||||||
|
|
||||||
def _rollback_works(self):
|
def _rollback_works(self):
|
||||||
cursor = self.connection.cursor()
|
cursor = self.connection.cursor()
|
||||||
cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)')
|
cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)')
|
||||||
|
@ -375,7 +376,7 @@ class BaseDatabaseCreation(object):
|
||||||
cursor.execute('DROP TABLE ROLLBACK_TEST')
|
cursor.execute('DROP TABLE ROLLBACK_TEST')
|
||||||
self.connection._commit()
|
self.connection._commit()
|
||||||
return count == 0
|
return count == 0
|
||||||
|
|
||||||
def destroy_test_db(self, old_database_name, verbosity=1):
|
def destroy_test_db(self, old_database_name, verbosity=1):
|
||||||
"""
|
"""
|
||||||
Destroy a test database, prompting the user for confirmation if the
|
Destroy a test database, prompting the user for confirmation if the
|
||||||
|
|
Loading…
Reference in New Issue