from cgi import parse_qsl
from django.conf import settings
from django.core.cache.backends.base import InvalidCacheBackendError


def get_cache_manager(backend_uri):
    from django.core.cache import cache, BACKENDS
    if backend_uri.find(':') == -1:
        raise InvalidCacheBackendError, "Backend URI must start with scheme://"
    scheme, rest = backend_uri.split(':', 1)
    if not rest.startswith('//'):
        raise InvalidCacheBackendError, "Backend URI must start with scheme://"
    if scheme not in BACKENDS:
        raise InvalidCacheBackendError, (
            "%r is not a valid cache backend" % scheme)

    host = rest[2:]
    qpos = rest.find('?')
    if qpos != -1:
        params = dict(parse_qsl(rest[qpos+1:]))
        host = rest[2:qpos]
    else:
        params = {}
    if host.endswith('/'):
        host = host[:-1]
    exec 'import ' + BACKENDS[scheme] + ' as backend'
    cache_mgr = getattr(backend, 'CacheMgr')
    return cache_mgr(cache, host, params)

cachemgr = get_cache_manager(settings.CACHE_BACKEND)
