From 51d51cb63ed79029756816eea8711860038bc6b9 Mon Sep 17 00:00:00 2001 From: ENIO ROCHA Date: Thu, 16 Oct 2025 10:51:21 -0300 Subject: [PATCH] fix: improve Lock.extend() and Lock.do_extend() return type to Literal[True] (#3792) - Changed return type from to for better type safety - Updated both sync (redis/lock.py) and async (redis/asyncio/lock.py) versions - Methods only return True or raise LockError, never return False - Helps prevent developer confusion about error handling Changes: - redis/lock.py: extend() and do_extend() now return Literal[True] - redis/asyncio/lock.py: extend() returns Awaitable[Literal[True]], do_extend() returns Literal[True] This change improves type safety by clearly communicating to developers that these methods never return False - they either return True or raise a LockError exception. Fixes #3792 Sacred Code: 000.111.369.963.1618 --- redis/asyncio/lock.py | 6 +++--- redis/lock.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/redis/asyncio/lock.py b/redis/asyncio/lock.py index 16d7fb6957..5376dbf7e6 100644 --- a/redis/asyncio/lock.py +++ b/redis/asyncio/lock.py @@ -3,7 +3,7 @@ import threading import uuid from types import SimpleNamespace -from typing import TYPE_CHECKING, Awaitable, Optional, Union +from typing import TYPE_CHECKING, Awaitable, Literal, Optional, Union from redis.exceptions import LockError, LockNotOwnedError from redis.typing import Number @@ -284,7 +284,7 @@ async def do_release(self, expected_token: bytes) -> None: def extend( self, additional_time: Number, replace_ttl: bool = False - ) -> Awaitable[bool]: + ) -> Awaitable[Literal[True]]: """ Adds more time to an already acquired lock. @@ -301,7 +301,7 @@ def extend( raise LockError("Cannot extend a lock with no timeout") return self.do_extend(additional_time, replace_ttl) - async def do_extend(self, additional_time, replace_ttl) -> bool: + async def do_extend(self, additional_time, replace_ttl) -> Literal[True]: additional_time = int(additional_time * 1000) if not bool( await self.lua_extend( diff --git a/redis/lock.py b/redis/lock.py index 0288496e6f..8602e0aa06 100644 --- a/redis/lock.py +++ b/redis/lock.py @@ -3,7 +3,7 @@ import time as mod_time import uuid from types import SimpleNamespace, TracebackType -from typing import Optional, Type +from typing import Literal, Optional, Type from redis.exceptions import LockError, LockNotOwnedError from redis.typing import Number @@ -284,7 +284,7 @@ def do_release(self, expected_token: str) -> None: lock_name=self.name, ) - def extend(self, additional_time: Number, replace_ttl: bool = False) -> bool: + def extend(self, additional_time: Number, replace_ttl: bool = False) -> Literal[True]: """ Adds more time to an already acquired lock. @@ -301,7 +301,7 @@ def extend(self, additional_time: Number, replace_ttl: bool = False) -> bool: raise LockError("Cannot extend a lock with no timeout", lock_name=self.name) return self.do_extend(additional_time, replace_ttl) - def do_extend(self, additional_time: Number, replace_ttl: bool) -> bool: + def do_extend(self, additional_time: Number, replace_ttl: bool) -> Literal[True]: additional_time = int(additional_time * 1000) if not bool( self.lua_extend(