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

@mgrouchy

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

@claudep 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 = {
@claudep 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
@mgrouchy 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
@mgrouchy

updated as per feedback from @claudep.

@mgrouchy

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

@mgrouchy

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.

@aaugustin 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. @mgrouchy

    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.
View
1  AUTHORS
@@ -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>
View
8 django/core/cache/__init__.py
@@ -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)
-
View
9 django/core/cache/backends/base.py
@@ -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
View
10 docs/topics/cache.txt
@@ -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
View
4 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.assertTrue(hasattr(self.cache, 'close'))
+ self.cache.close()
+
def test_data_types(self):
# Many different data types can be cached
stuff = {
@claudep 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.