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

[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
parent 4d2de7a3
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:
+2 −1
Original line number Diff line number Diff line
@@ -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