summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-01 08:15:52 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2009-03-01 08:15:52 +0000
commitec02cf7a856dcc2ebc4ec10a35d6e87c1400b8f6 (patch)
tree7da6f92114004063fc6ca2d88a823708a62f6db7
parent4d2de7a3074a56b8f373d3598dc36243091a4a45 (diff)
[1.0.X] 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. Backport of r9936 from trunk. git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.0.X@9937 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/cache/__init__.py11
-rw-r--r--django/db/backends/creation.py3
2 files changed, 12 insertions, 2 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 aba41fb3f9..1bdce1ee59 100644
--- a/django/db/backends/creation.py
+++ b/django/db/backends/creation.py
@@ -315,7 +315,8 @@ class BaseDatabaseCreation(object):
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