Make request_cache easier to use
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
"""
|
||||
A cache that is cleared after every request.
|
||||
|
||||
This module requires that :class:`request_cache.middleware.RequestCache`
|
||||
is installed in order to clear the cache after each request.
|
||||
"""
|
||||
|
||||
|
||||
from request_cache import middleware
|
||||
|
||||
|
||||
def get_cache(name):
|
||||
"""
|
||||
Return the request cache named ``name``.
|
||||
|
||||
Arguments:
|
||||
name (str): The name of the request cache to load
|
||||
|
||||
Returns: dict
|
||||
"""
|
||||
return middleware.RequestCache.get_request_cache(name)
|
||||
|
||||
|
||||
def get_request():
|
||||
"""
|
||||
Return the current request.
|
||||
"""
|
||||
return middleware.RequestCache.get_current_request()
|
||||
|
||||
@@ -1,34 +1,48 @@
|
||||
import threading
|
||||
|
||||
_request_cache_threadlocal = threading.local()
|
||||
_request_cache_threadlocal.data = {}
|
||||
_request_cache_threadlocal.request = None
|
||||
|
||||
class _RequestCache(threading.local):
|
||||
"""
|
||||
A thread-local for storing the per-request cache.
|
||||
"""
|
||||
def __init__(self):
|
||||
super(_RequestCache, self).__init__()
|
||||
self.data = {}
|
||||
self.request = None
|
||||
|
||||
|
||||
REQUEST_CACHE = _RequestCache()
|
||||
|
||||
|
||||
class RequestCache(object):
|
||||
@classmethod
|
||||
def get_request_cache(cls):
|
||||
return _request_cache_threadlocal
|
||||
def get_request_cache(cls, name=None):
|
||||
"""
|
||||
This method is deprecated. Please use :func:`request_cache.get_cache`.
|
||||
"""
|
||||
if name is None:
|
||||
return REQUEST_CACHE
|
||||
else:
|
||||
return REQUEST_CACHE.data.setdefault(name, {})
|
||||
|
||||
@classmethod
|
||||
def get_current_request(cls):
|
||||
"""
|
||||
Get a reference to the HttpRequest object, if we are presently
|
||||
servicing one.
|
||||
This method is deprecated. Please use :func:`request_cache.get_request`.
|
||||
"""
|
||||
return _request_cache_threadlocal.request
|
||||
return REQUEST_CACHE.request
|
||||
|
||||
@classmethod
|
||||
def clear_request_cache(cls):
|
||||
"""
|
||||
Empty the request cache.
|
||||
"""
|
||||
_request_cache_threadlocal.data = {}
|
||||
_request_cache_threadlocal.request = None
|
||||
REQUEST_CACHE.data = {}
|
||||
REQUEST_CACHE.request = None
|
||||
|
||||
def process_request(self, request):
|
||||
self.clear_request_cache()
|
||||
_request_cache_threadlocal.request = request
|
||||
REQUEST_CACHE.request = request
|
||||
return None
|
||||
|
||||
def process_response(self, request, response):
|
||||
|
||||
Reference in New Issue
Block a user