From 90b6181657eafe1601ee90e4af26cd32cb301fb4 Mon Sep 17 00:00:00 2001 From: Jannis Leidel Date: Tue, 5 Jul 2011 09:10:58 +0000 Subject: [PATCH] Fixed #16410 -- Fixed get_cache to behave gracefully when given a string that can't be split. Thanks, jedie. git-svn-id: http://code.djangoproject.com/svn/django/trunk@16511 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/core/cache/__init__.py | 6 +++--- tests/regressiontests/cache/tests.py | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py index b76ddcf038..b97c7469bb 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 ad7a2f86dc..6f1aa0d24f 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."""