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:
Malcolm Tredinnick 2009-03-01 08:13:38 +00:00
parent d77236960a
commit b740706707
2 changed files with 15 additions and 5 deletions

View File

@ -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:

View File

@ -316,7 +316,8 @@ class BaseDatabaseCreation(object):
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