Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

BaseCache now has a no-op close method as per ticket #18582 #218

Merged
merged 1 commit into from

3 participants

Mike Grouchy Claude Paroz Aymeric Augustin
Mike Grouchy

Also removed the hasattr check when firing request_finished signal for
caches with a 'close' method. Should be safe to call cache.close
everywhere now

references ticket: https://code.djangoproject.com/ticket/18482

Claude Paroz claudep commented on the diff
tests/regressiontests/cache/tests.py
@@ -266,6 +266,10 @@ def test_decr(self):
self.assertEqual(self.cache.get('answer'), 32)
self.assertRaises(ValueError, self.cache.decr, 'does_not_exist')
+ def test_close(self):
+ self.assertEqual(hasattr(self.cache, 'close'), True)
+ self.cache.close()
+
def test_data_types(self):
# Many different data types can be cached
stuff = {
Claude Paroz Collaborator
claudep added a note

assertEqual(..., True) -> assertTrue(...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Mike Grouchy mgrouchy BaseCache now has a no-op close method as per ticket #18582
Also removed the hasattr check when firing request_finished signal for
caches with a 'close' method. Should be safe to call `cache.close`
everywhere now
a2e927b
Mike Grouchy

updated as per feedback from @claudep.

Mike Grouchy

Is there anything I can do to get this merged? Ticket says this is ready for checkin?

Mike Grouchy

Anything I can do to help this along to get it merged in before the code freeze for 1.5. No big deal, just trying to get this closed out.

Aymeric Augustin aaugustin merged commit 4c5cea7 into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jul 18, 2012
  1. Mike Grouchy

    BaseCache now has a no-op close method as per ticket #18582

    mgrouchy authored
    Also removed the hasattr check when firing request_finished signal for
    caches with a 'close' method. Should be safe to call `cache.close`
    everywhere now
This page is out of date. Refresh to see the latest.
1  AUTHORS
View
@@ -229,6 +229,7 @@ answer newbie questions, and generally made Django that much better:
Simon Greenhill <dev@simon.net.nz>
Owen Griffiths
Espen Grindhaug <http://grindhaug.org/>
+ Mike Grouchy <http://mikegrouchy.com/>
Janos Guljas
Thomas Güttler <hv@tbz-pariv.de>
Horst Gutmann <zerok@zerokspot.com>
8 django/core/cache/__init__.py
View
@@ -133,11 +133,9 @@ def get_cache(backend, **kwargs):
"Could not find backend '%s': %s" % (backend, e))
cache = backend_cls(location, params)
# Some caches -- python-memcached in particular -- need to do a cleanup at the
- # end of a request cycle. If the cache provides a close() method, wire it up
- # here.
- if hasattr(cache, 'close'):
- signals.request_finished.connect(cache.close)
+ # end of a request cycle. If not implemented in a particular backend
+ # cache.close is a no-op
+ signals.request_finished.connect(cache.close)
return cache
cache = get_cache(DEFAULT_CACHE_ALIAS)
-
9 django/core/cache/backends/base.py
View
@@ -6,15 +6,18 @@
from django.utils.encoding import smart_str
from django.utils.importlib import import_module
+
class InvalidCacheBackendError(ImproperlyConfigured):
pass
+
class CacheKeyWarning(DjangoRuntimeWarning):
pass
# Memcached does not accept keys longer than this.
MEMCACHE_MAX_KEY_LENGTH = 250
+
def default_key_func(key, key_prefix, version):
"""
Default function to generate keys.
@@ -25,6 +28,7 @@ def default_key_func(key, key_prefix, version):
"""
return ':'.join([key_prefix, str(version), smart_str(key)])
+
def get_key_func(key_func):
"""
Function to decide which key function to use.
@@ -40,6 +44,7 @@ def get_key_func(key_func):
return getattr(key_func_module, key_func_name)
return default_key_func
+
class BaseCache(object):
def __init__(self, params):
timeout = params.get('timeout', params.get('TIMEOUT', 300))
@@ -221,3 +226,7 @@ def decr_version(self, key, delta=1, version=None):
the new version.
"""
return self.incr_version(key, -delta, version)
+
+ def close(self, **kwargs):
+ """Close the cache connection"""
+ pass
10 docs/topics/cache.txt
View
@@ -779,6 +779,16 @@ nonexistent cache key.::
However, if the backend doesn't natively provide an increment/decrement
operation, it will be implemented using a two-step retrieve/update.
+
+You can close the connection to your cache with ``close()`` if implemented by
+the cache backend.
+
+ >>> cache.close()
+
+.. note::
+
+ For caches that don't implement ``close`` methods it is a no-op.
+
.. _cache_key_prefixing:
Cache key prefixing
4 tests/regressiontests/cache/tests.py
View
@@ -266,6 +266,10 @@ def test_decr(self):
self.assertEqual(self.cache.get('answer'), 32)
self.assertRaises(ValueError, self.cache.decr, 'does_not_exist')
+ def test_close(self):
+ self.assertTrue(hasattr(self.cache, 'close'))
+ self.cache.close()
+
def test_data_types(self):
# Many different data types can be cached
stuff = {
Claude Paroz Collaborator
claudep added a note

assertEqual(..., True) -> assertTrue(...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.