middleware.py 1.2 KB
Newer Older
1 2
import threading

3 4 5 6 7 8 9 10 11 12 13 14

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()
15

16

17 18
class RequestCache(object):
    @classmethod
19 20 21 22 23 24 25 26
    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, {})
27

28 29 30
    @classmethod
    def get_current_request(cls):
        """
31
        This method is deprecated. Please use :func:`request_cache.get_request`.
32
        """
33
        return REQUEST_CACHE.request
34

35 36 37 38 39
    @classmethod
    def clear_request_cache(cls):
        """
        Empty the request cache.
        """
40 41
        REQUEST_CACHE.data = {}
        REQUEST_CACHE.request = None
42 43 44

    def process_request(self, request):
        self.clear_request_cache()
45
        REQUEST_CACHE.request = request
46 47 48 49
        return None

    def process_response(self, request, response):
        self.clear_request_cache()
50
        return response