summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-01 08:13:38 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-01 08:13:38 +0000
commitb740706707aed9f057a2f8badc31bc87997c6142 (patch)
tree30b00294c4be5d4d68bf75c9d3f0cfa843873c81
parentd77236960a5d3792bf9514fb7834d2813f531054 (diff)
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
-rw-r--r--django/core/cache/__init__.py11
-rw-r--r--django/db/backends/creation.py9
2 files changed, 15 insertions, 5 deletions
diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py
index 93e7adb76e..23a61ef859 100644
--- a/django/core/cache/__init__.py
+++ b/django/core/cache/__init__.py
@@ -31,7 +31,12 @@ BACKENDS = {
'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:
raise InvalidCacheBackendError, "Backend URI must start with scheme://"
scheme, rest = backend_uri.split(':', 1)
@@ -48,6 +53,10 @@ def get_cache(backend_uri):
if host.endswith('/'):
host = host[:-1]
+ return scheme, host, params
+
+def get_cache(backend_uri):
+ scheme, host, params = parse_backend_uri(backend_uri)
if scheme in BACKENDS:
module = __import__('django.core.cache.backends.%s' % BACKENDS[scheme], {}, {}, [''])
else:
diff --git a/django/db/backends/creation.py b/django/db/backends/creation.py
index b53e9f1007..e6399874ef 100644
--- a/django/db/backends/creation.py
+++ b/django/db/backends/creation.py
@@ -312,11 +312,12 @@ class BaseDatabaseCreation(object):
self.connection.close()
settings.DATABASE_NAME = test_database_name
settings.DATABASE_SUPPORTS_TRANSACTIONS = self._rollback_works()
-
+
call_command('syncdb', verbosity=verbosity, interactive=False)
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)
# Get a cursor (even though we don't need one yet). This has
@@ -363,7 +364,7 @@ class BaseDatabaseCreation(object):
sys.exit(1)
return test_database_name
-
+
def _rollback_works(self):
cursor = self.connection.cursor()
cursor.execute('CREATE TABLE ROLLBACK_TEST (X INT)')
@@ -375,7 +376,7 @@ class BaseDatabaseCreation(object):
cursor.execute('DROP TABLE ROLLBACK_TEST')
self.connection._commit()
return count == 0
-
+
def destroy_test_db(self, old_database_name, verbosity=1):
"""
Destroy a test database, prompting the user for confirmation if the