Skip to content
Merged
Show file tree
Hide file tree
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
2 changes: 1 addition & 1 deletion pottery/aioredlock.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ async def locked(self) -> float:
else:
if ttl:
ttls.append(ttl)
if len(ttls) > len(self.masters) // 2: # pragma: no cover
if len(ttls) > len(self.masters) // 2:
index = len(self.masters) // 2 - (not len(self.masters) % 2)
validity_time: float = sorted(ttls)[index]
validity_time -= self.__drift()
Expand Down
8 changes: 4 additions & 4 deletions pottery/nextid.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
from .executor import BailOutExecutor


class _Scripts(Primitive):
class Scripts:
'''Parent class to define/register Lua scripts for Redis.

Note that we only have to register these Lua scripts once -- so we do it on
Expand All @@ -68,7 +68,7 @@ def __init__(self,
masters: Iterable[Redis] = frozenset(),
raise_on_redis_errors: bool = False,
) -> None:
super().__init__(
super().__init__( # type: ignore
key=key,
masters=masters,
raise_on_redis_errors=raise_on_redis_errors,
Expand All @@ -82,7 +82,7 @@ def __register_set_id_script(self) -> None:
if self._set_id_script is None:
class_name = self.__class__.__qualname__
logger.info('Registering %s._set_id_script', class_name)
master = next(iter(self.masters))
master = next(iter(self.masters)) # type: ignore
# Available since Redis 2.6.0:
self.__class__._set_id_script = master.register_script('''
local curr = tonumber(redis.call('get', KEYS[1]))
Expand All @@ -96,7 +96,7 @@ def __register_set_id_script(self) -> None:
''')


class NextId(_Scripts):
class NextId(Scripts, Primitive):
'''Distributed Redis-powered monotonically increasing ID generator.

This algorithm safely and reliably produces monotonically increasing IDs
Expand Down
3 changes: 2 additions & 1 deletion tests/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,5 @@ def wrapper(*args: Any, **kwargs: Any) -> Any:

def run_doctests() -> NoReturn: # pragma: no cover
results = doctest.testmod()
sys.exit(bool(results.failed))
status = bool(results.failed)
sys.exit(status)
29 changes: 21 additions & 8 deletions tests/test_aioredlock.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@


import asyncio
import sys
import unittest.mock

from redis.asyncio import Redis as AIORedis # type: ignore
Expand All @@ -37,17 +38,29 @@
class AIORedlockTests(TestCase):
'Asynchronous distributed Redis-powered lock tests.'

# TODO: When we drop support for Python 3.9, change the following method to
# setUp().
def setUp(self) -> None:
super().setUp()
# TODO: When we drop support for Python 3.9, delete the following if
# condition.
if sys.version_info > (3, 10):
self.aioredis = AIORedis.from_url(self.redis_url, socket_timeout=1)
self.aioredlock = AIORedlock(
masters={self.aioredis},
key='printer',
auto_release_time=.2,
)

# TODO: When we drop support for Python 3.9, delete the following method.
#
# https://github.com/brainix/pottery/runs/5384161828?check_suite_focus=true
def _setup(self) -> None:
self.aioredis = AIORedis.from_url(self.redis_url, socket_timeout=1)
self.aioredlock = AIORedlock(
masters={self.aioredis},
key='printer',
auto_release_time=.2,
)
if sys.version_info < (3, 10):
self.aioredis = AIORedis.from_url(self.redis_url, socket_timeout=1)
self.aioredlock = AIORedlock(
masters={self.aioredis},
key='printer',
auto_release_time=.2,
)

@async_test
async def test_locked_acquire_and_release(self):
Expand Down