Commit b7407067 authored by Malcolm Tredinnick's avatar Malcolm Tredinnick
Browse files

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
parent d7723696
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -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:
+5 −4
Original line number Diff line number Diff line
@@ -316,7 +316,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