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
This commit is contained in:
Jannis Leidel 2011-07-05 09:10:58 +00:00
parent 6de65ab76f
commit 90b6181657
2 changed files with 21 additions and 4 deletions

View File

@ -126,12 +126,12 @@ def parse_backend_conf(backend, **kwargs):
location = args.pop('LOCATION', '') location = args.pop('LOCATION', '')
return backend, location, args return backend, location, args
else: else:
try:
# Trying to import the given backend, in case it's a dotted path # Trying to import the given backend, in case it's a dotted path
mod_path, cls_name = backend.rsplit('.', 1) mod_path, cls_name = backend.rsplit('.', 1)
try:
mod = importlib.import_module(mod_path) mod = importlib.import_module(mod_path)
backend_cls = getattr(mod, cls_name) backend_cls = getattr(mod, cls_name)
except (AttributeError, ImportError): except (AttributeError, ImportError, ValueError):
raise InvalidCacheBackendError("Could not find backend '%s'" % backend) raise InvalidCacheBackendError("Could not find backend '%s'" % backend)
location = kwargs.pop('LOCATION', '') location = kwargs.pop('LOCATION', '')
return backend, location, kwargs return backend, location, kwargs

View File

@ -12,7 +12,7 @@ import warnings
from django.conf import settings from django.conf import settings
from django.core import management from django.core import management
from django.core.cache import get_cache, DEFAULT_CACHE_ALIAS 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.db import connections, router
from django.http import HttpResponse, HttpRequest, QueryDict from django.http import HttpResponse, HttpRequest, QueryDict
from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware, CacheMiddleware from django.middleware.cache import FetchFromCacheMiddleware, UpdateCacheMiddleware, CacheMiddleware
@ -938,6 +938,23 @@ class CustomCacheKeyValidationTests(unittest.TestCase):
cache.set(key, val) cache.set(key, val)
self.assertEqual(cache.get(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): class CacheUtils(unittest.TestCase):
"""TestCase for django.utils.cache functions.""" """TestCase for django.utils.cache functions."""