diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py index b76ddcf0384..b97c7469bbd 100644 --- a/django/core/cache/__init__.py +++ b/django/core/cache/__init__.py @@ -126,12 +126,12 @@ def parse_backend_conf(backend, **kwargs): location = args.pop('LOCATION', '') return backend, location, args else: - # Trying to import the given backend, in case it's a dotted path - mod_path, cls_name = backend.rsplit('.', 1) try: + # Trying to import the given backend, in case it's a dotted path + mod_path, cls_name = backend.rsplit('.', 1) mod = importlib.import_module(mod_path) backend_cls = getattr(mod, cls_name) - except (AttributeError, ImportError): + except (AttributeError, ImportError, ValueError): raise InvalidCacheBackendError("Could not find backend '%s'" % backend) location = kwargs.pop('LOCATION', '') return backend, location, kwargs diff --git a/tests/regressiontests/cache/tests.py b/tests/regressiontests/cache/tests.py index ad7a2f86dc1..6f1aa0d24f1 100644 --- a/tests/regressiontests/cache/tests.py +++ b/tests/regressiontests/cache/tests.py @@ -12,7 +12,7 @@ import warnings from django.conf import settings from django.core import management from django.core.cache import get_cache, DEFAULT_CACHE_ALIAS -from django.core.cache.backends.base import CacheKeyWarning +from django.core.cache.backends.base import CacheKeyWarning, InvalidCacheBackendError from django.db import connections, router from django.http import HttpResponse, HttpRequest, QueryDict from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware, CacheMiddleware @@ -938,6 +938,23 @@ class CustomCacheKeyValidationTests(unittest.TestCase): cache.set(key, val) self.assertEqual(cache.get(key), val) + +class GetCacheTests(unittest.TestCase): + + def test_simple(self): + cache = get_cache('locmem://') + from django.core.cache.backends.locmem import LocMemCache + self.assertTrue(isinstance(cache, LocMemCache)) + + from django.core.cache import cache + self.assertTrue(isinstance(cache, get_cache('default').__class__)) + + cache = get_cache( + 'django.core.cache.backends.dummy.DummyCache', **{'TIMEOUT': 120}) + self.assertEqual(cache.default_timeout, 120) + + self.assertRaises(InvalidCacheBackendError, get_cache, 'does_not_exist') + class CacheUtils(unittest.TestCase): """TestCase for django.utils.cache functions."""