From aafdb7a9b8fdec6981b07c43beeabe522c832ac2 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Mon, 15 Sep 2025 10:46:54 -0400 Subject: [PATCH 1/2] Revert "ref: remove incr_version / decr_version (#15)" This reverts commit 1020f9a0e73b2f0a46b1ed5627cb2b2647cca077. --- django-stubs/core/cache/backends/base.pyi | 4 ++++ scripts/stubtest/allowlist.txt | 10 ---------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/django-stubs/core/cache/backends/base.pyi b/django-stubs/core/cache/backends/base.pyi index 46d484a3d..91f441f02 100644 --- a/django-stubs/core/cache/backends/base.pyi +++ b/django-stubs/core/cache/backends/base.pyi @@ -60,6 +60,10 @@ class BaseCache: async def adelete_many(self, keys: Iterable[Any], version: Any | None = None) -> None: ... def clear(self) -> None: ... async def aclear(self) -> None: ... + def incr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... + async def aincr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... + def decr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... + async def adecr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... def close(self, **kwargs: Any) -> None: ... async def aclose(self, **kwargs: Any) -> None: ... diff --git a/scripts/stubtest/allowlist.txt b/scripts/stubtest/allowlist.txt index b25829d22..a14f7a83a 100644 --- a/scripts/stubtest/allowlist.txt +++ b/scripts/stubtest/allowlist.txt @@ -228,16 +228,6 @@ django.contrib.auth.views.UserModel django.contrib.sessions.backends.base.SessionBase.get django.contrib.sessions.backends.base.SessionBase.setdefault -# sentry: we remove these methods because they are unsafe for our usage -django.core.cache.BaseCache.adecr_version -django.core.cache.BaseCache.aincr_version -django.core.cache.BaseCache.decr_version -django.core.cache.BaseCache.incr_version -django.core.cache.backends.base.BaseCache.adecr_version -django.core.cache.backends.base.BaseCache.aincr_version -django.core.cache.backends.base.BaseCache.decr_version -django.core.cache.backends.base.BaseCache.incr_version - # Limited stubtest support for enums (https://github.com/python/mypy/issues/16806) django.db.migrations.operations.base.OperationCategory.__new__ From 469a896da04a39668394d9d1c43441bd13b1cb51 Mon Sep 17 00:00:00 2001 From: anthony sottile Date: Mon, 15 Sep 2025 10:46:59 -0400 Subject: [PATCH 2/2] Revert "cache's version can be Any (#14)" This reverts commit fc8ff339446c79f7689230641d850fc7bc4d6a0e. --- django-stubs/core/cache/backends/base.pyi | 62 +++++++++++------------ 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/django-stubs/core/cache/backends/base.pyi b/django-stubs/core/cache/backends/base.pyi index 91f441f02..c87be3333 100644 --- a/django-stubs/core/cache/backends/base.pyi +++ b/django-stubs/core/cache/backends/base.pyi @@ -20,50 +20,50 @@ class BaseCache: _max_entries: int _cull_frequency: int key_prefix: str - version: Any + version: int key_func: Callable def __init__(self, params: dict[str, Any]) -> None: ... def get_backend_timeout(self, timeout: float | None = ...) -> float | None: ... - def make_key(self, key: Any, version: Any | None = None) -> str: ... + def make_key(self, key: Any, version: int | None = None) -> str: ... def validate_key(self, key: Any) -> None: ... - def make_and_validate_key(self, key: Any, version: Any | None = None) -> str: ... - def add(self, key: Any, value: Any, timeout: float | None = ..., version: Any | None = None) -> bool: ... - async def aadd(self, key: Any, value: Any, timeout: float | None = ..., version: Any | None = None) -> bool: ... - def get(self, key: Any, default: Any | None = None, version: Any | None = None) -> Any: ... - async def aget(self, key: Any, default: Any | None = None, version: Any | None = None) -> Any: ... - def set(self, key: Any, value: Any, timeout: float | None = ..., version: Any | None = None) -> None: ... - async def aset(self, key: Any, value: Any, timeout: float | None = ..., version: Any | None = None) -> None: ... - def touch(self, key: Any, timeout: float | None = ..., version: Any | None = None) -> bool: ... - async def atouch(self, key: Any, timeout: float | None = ..., version: Any | None = None) -> bool: ... - def delete(self, key: Any, version: Any | None = None) -> bool: ... - async def adelete(self, key: Any, version: Any | None = None) -> bool: ... - def get_many(self, keys: Iterable[Any], version: Any | None = None) -> dict[Any, Any]: ... - async def aget_many(self, keys: Iterable[Any], version: Any | None = None) -> dict[Any, Any]: ... + def make_and_validate_key(self, key: Any, version: int | None = None) -> str: ... + def add(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... + async def aadd(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... + def get(self, key: Any, default: Any | None = None, version: int | None = None) -> Any: ... + async def aget(self, key: Any, default: Any | None = None, version: int | None = None) -> Any: ... + def set(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> None: ... + async def aset(self, key: Any, value: Any, timeout: float | None = ..., version: int | None = None) -> None: ... + def touch(self, key: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... + async def atouch(self, key: Any, timeout: float | None = ..., version: int | None = None) -> bool: ... + def delete(self, key: Any, version: int | None = None) -> bool: ... + async def adelete(self, key: Any, version: int | None = None) -> bool: ... + def get_many(self, keys: Iterable[Any], version: int | None = None) -> dict[Any, Any]: ... + async def aget_many(self, keys: Iterable[Any], version: int | None = None) -> dict[Any, Any]: ... def get_or_set( - self, key: Any, default: Any | None, timeout: float | None = ..., version: Any | None = None + self, key: Any, default: Any | None, timeout: float | None = ..., version: int | None = None ) -> Any | None: ... async def aget_or_set( - self, key: Any, default: Any | None, timeout: float | None = ..., version: Any | None = None + self, key: Any, default: Any | None, timeout: float | None = ..., version: int | None = None ) -> Any | None: ... - def has_key(self, key: Any, version: Any | None = None) -> bool: ... - async def ahas_key(self, key: Any, version: Any | None = None) -> bool: ... - def incr(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - async def aincr(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - def decr(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - async def adecr(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... + def has_key(self, key: Any, version: int | None = None) -> bool: ... + async def ahas_key(self, key: Any, version: int | None = None) -> bool: ... + def incr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + async def aincr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + def decr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + async def adecr(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def __contains__(self, key: Any) -> bool: ... - def set_many(self, data: dict[Any, Any], timeout: float | None = ..., version: Any | None = None) -> list[Any]: ... + def set_many(self, data: dict[Any, Any], timeout: float | None = ..., version: int | None = None) -> list[Any]: ... async def aset_many( - self, data: dict[Any, Any], timeout: float | None = ..., version: Any | None = None + self, data: dict[Any, Any], timeout: float | None = ..., version: int | None = None ) -> list[Any]: ... - def delete_many(self, keys: Iterable[Any], version: Any | None = None) -> None: ... - async def adelete_many(self, keys: Iterable[Any], version: Any | None = None) -> None: ... + def delete_many(self, keys: Iterable[Any], version: int | None = None) -> None: ... + async def adelete_many(self, keys: Iterable[Any], version: int | None = None) -> None: ... def clear(self) -> None: ... async def aclear(self) -> None: ... - def incr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - async def aincr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - def decr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... - async def adecr_version(self, key: Any, delta: int = 1, version: Any | None = None) -> int: ... + def incr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + async def aincr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + def decr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... + async def adecr_version(self, key: Any, delta: int = 1, version: int | None = None) -> int: ... def close(self, **kwargs: Any) -> None: ... async def aclose(self, **kwargs: Any) -> None: ...