Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions diskcache/djangocache.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

from functools import wraps

from asgiref.sync import sync_to_async
from django.core.cache.backends.base import BaseCache

try:
Expand Down Expand Up @@ -94,6 +95,9 @@ def add(
timeout = self.get_backend_timeout(timeout=timeout)
return self._cache.add(key, value, timeout, read, tag, retry)

async def aadd(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
return await sync_to_async(self.add, thread_sensitive=False)(key, value, timeout, version)

def get(
self,
key,
Expand Down Expand Up @@ -123,6 +127,9 @@ def get(
key = self.make_key(key, version=version)
return self._cache.get(key, default, read, expire_time, tag, retry)

async def aget(self, key, default=None, version=None):
return await sync_to_async(self.get, thread_sensitive=False)(key, default, version)

def read(self, key, version=None):
"""Return file handle corresponding to `key` from Cache.

Expand Down Expand Up @@ -164,6 +171,9 @@ def set(
timeout = self.get_backend_timeout(timeout=timeout)
return self._cache.set(key, value, timeout, read, tag, retry)

async def aset(self, key, value, timeout=DEFAULT_TIMEOUT, version=None):
return await sync_to_async(self.set, thread_sensitive=False)(key, value, timeout, version)

def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None, retry=True):
"""Touch a key in the cache. If timeout is given, that timeout will be
used for the key; otherwise the default cache timeout will be used.
Expand All @@ -181,6 +191,9 @@ def touch(self, key, timeout=DEFAULT_TIMEOUT, version=None, retry=True):
timeout = self.get_backend_timeout(timeout=timeout)
return self._cache.touch(key, timeout, retry)

async def atouch(self, key, timeout=DEFAULT_TIMEOUT, version=None):
return await sync_to_async(self.touch, thread_sensitive=False)(key, timeout, version)

def pop(
self,
key,
Expand Down Expand Up @@ -222,6 +235,9 @@ def delete(self, key, version=None, retry=True):
key = self.make_key(key, version=version)
self._cache.delete(key, retry)

async def adelete(self, key, version=None):
return await sync_to_async(self.delete, thread_sensitive=False)(key, version)

def incr(self, key, delta=1, version=None, default=None, retry=True):
"""Increment value by delta for item with key.

Expand Down Expand Up @@ -347,6 +363,9 @@ def clear(self):
"""Remove *all* values from the cache at once."""
return self._cache.clear()

async def aclear(self):
return await sync_to_async(self.clear, thread_sensitive=False)()

def close(self, **kwargs):
"""Close the cache connection."""
# pylint: disable=unused-argument
Expand Down