Fixed #21200 -- Consistantly raise errors across all cache backends.
Thanks to tchaumeny for the patch.
This commit is contained in:
parent
0ec712dd11
commit
e112654fc8
|
@ -536,6 +536,18 @@ For apps with migrations, ``allow_migrate`` will now get passed
|
||||||
without custom attributes, methods or managers. Make sure your ``allow_migrate``
|
without custom attributes, methods or managers. Make sure your ``allow_migrate``
|
||||||
methods are only referring to fields or other items in ``model._meta``.
|
methods are only referring to fields or other items in ``model._meta``.
|
||||||
|
|
||||||
|
Behavior of ``LocMemCache`` regarding pickle errors
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
An inconsistency existed in previous versions of Django regarding how pickle
|
||||||
|
errors are handled by different cache backends.
|
||||||
|
``django.core.cache.backends.locmem.LocMemCache`` used to fail silently when
|
||||||
|
such an error occurs, which is inconsistent with other backends and leads to
|
||||||
|
cache-specific errors. This has been fixed in Django 1.7, see
|
||||||
|
`Ticket #21200`_ for more details.
|
||||||
|
|
||||||
|
.. _Ticket #21200: https://code.djangoproject.com/ticket/21200
|
||||||
|
|
||||||
Passing ``None`` to ``Manager.db_manager()``
|
Passing ``None`` to ``Manager.db_manager()``
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,11 @@ class C:
|
||||||
return 24
|
return 24
|
||||||
|
|
||||||
|
|
||||||
|
class Unpickable(object):
|
||||||
|
def __getstate__(self):
|
||||||
|
raise pickle.PickleError()
|
||||||
|
|
||||||
|
|
||||||
@override_settings(CACHES={
|
@override_settings(CACHES={
|
||||||
'default': {
|
'default': {
|
||||||
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
|
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
|
||||||
|
@ -847,6 +852,16 @@ class BaseCacheTests(object):
|
||||||
self.assertEqual(get_cache_data.content, content.encode('utf-8'))
|
self.assertEqual(get_cache_data.content, content.encode('utf-8'))
|
||||||
self.assertEqual(get_cache_data.cookies, response.cookies)
|
self.assertEqual(get_cache_data.cookies, response.cookies)
|
||||||
|
|
||||||
|
def test_add_fail_on_pickleerror(self):
|
||||||
|
"See https://code.djangoproject.com/ticket/21200"
|
||||||
|
with self.assertRaises(pickle.PickleError):
|
||||||
|
cache.add('unpickable', Unpickable())
|
||||||
|
|
||||||
|
def test_set_fail_on_pickleerror(self):
|
||||||
|
"See https://code.djangoproject.com/ticket/21200"
|
||||||
|
with self.assertRaises(pickle.PickleError):
|
||||||
|
cache.set('unpickable', Unpickable())
|
||||||
|
|
||||||
|
|
||||||
@override_settings(CACHES=caches_setting_for_tests(
|
@override_settings(CACHES=caches_setting_for_tests(
|
||||||
BACKEND='django.core.cache.backends.db.DatabaseCache',
|
BACKEND='django.core.cache.backends.db.DatabaseCache',
|
||||||
|
|
Loading…
Reference in New Issue