redis-allocator 0.4.0__py3-none-any.whl → 0.4.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redis_allocator/_version.py +1 -1
- redis_allocator/allocator.py +18 -18
- {redis_allocator-0.4.0.dist-info → redis_allocator-0.4.1.dist-info}/METADATA +1 -1
- {redis_allocator-0.4.0.dist-info → redis_allocator-0.4.1.dist-info}/RECORD +7 -7
- {redis_allocator-0.4.0.dist-info → redis_allocator-0.4.1.dist-info}/WHEEL +0 -0
- {redis_allocator-0.4.0.dist-info → redis_allocator-0.4.1.dist-info}/licenses/LICENSE +0 -0
- {redis_allocator-0.4.0.dist-info → redis_allocator-0.4.1.dist-info}/top_level.txt +0 -0
redis_allocator/_version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = '0.4.
|
1
|
+
__version__ = '0.4.1'
|
redis_allocator/allocator.py
CHANGED
@@ -257,14 +257,14 @@ class RedisAllocatorUpdater:
|
|
257
257
|
return len(self.params)
|
258
258
|
|
259
259
|
|
260
|
-
class RedisAllocatorPolicy(ABC):
|
260
|
+
class RedisAllocatorPolicy(ABC, Generic[U]):
|
261
261
|
"""Abstract base class for Redis allocator policies.
|
262
262
|
|
263
263
|
This class defines the interface for allocation policies that can be used
|
264
264
|
with RedisAllocator to control allocation behavior.
|
265
265
|
"""
|
266
266
|
|
267
|
-
def initialize(self, allocator: 'RedisAllocator'):
|
267
|
+
def initialize(self, allocator: 'RedisAllocator[U]'):
|
268
268
|
"""Initialize the policy with an allocator instance.
|
269
269
|
|
270
270
|
Args:
|
@@ -273,9 +273,9 @@ class RedisAllocatorPolicy(ABC):
|
|
273
273
|
pass
|
274
274
|
|
275
275
|
@abstractmethod
|
276
|
-
def malloc(self, allocator: 'RedisAllocator', timeout: Timeout = 120,
|
277
|
-
obj: Optional[
|
278
|
-
cache_timeout: Timeout = 3600) -> Optional[RedisAllocatorObject]:
|
276
|
+
def malloc(self, allocator: 'RedisAllocator[U]', timeout: Timeout = 120,
|
277
|
+
obj: Optional[U] = None, params: Optional[dict] = None,
|
278
|
+
cache_timeout: Timeout = 3600) -> Optional[RedisAllocatorObject[U]]:
|
279
279
|
"""Allocate a resource according to the policy.
|
280
280
|
|
281
281
|
Args:
|
@@ -292,7 +292,7 @@ class RedisAllocatorPolicy(ABC):
|
|
292
292
|
pass
|
293
293
|
|
294
294
|
@abstractmethod
|
295
|
-
def refresh_pool(self, allocator: 'RedisAllocator'):
|
295
|
+
def refresh_pool(self, allocator: 'RedisAllocator[U]'):
|
296
296
|
"""Refresh the allocation pool.
|
297
297
|
|
298
298
|
This method is called periodically to update the pool with new resources.
|
@@ -302,7 +302,7 @@ class RedisAllocatorPolicy(ABC):
|
|
302
302
|
"""
|
303
303
|
pass
|
304
304
|
|
305
|
-
def check_health_once(self, r_obj: RedisAllocatorObject, duration: int = 3600) -> bool:
|
305
|
+
def check_health_once(self, r_obj: RedisAllocatorObject[U], duration: int = 3600) -> bool:
|
306
306
|
"""Check the health of the object."""
|
307
307
|
with contextlib.closing(r_obj.open()):
|
308
308
|
try:
|
@@ -318,8 +318,8 @@ class RedisAllocatorPolicy(ABC):
|
|
318
318
|
r_obj.set_unhealthy(duration)
|
319
319
|
raise
|
320
320
|
|
321
|
-
def check_health(self, allocator: 'RedisAllocator', lock_duration: Timeout = 3600, max_threads: int = 8,
|
322
|
-
obj_fn: Optional[Callable[[str],
|
321
|
+
def check_health(self, allocator: 'RedisAllocator[U]', lock_duration: Timeout = 3600, max_threads: int = 8,
|
322
|
+
obj_fn: Optional[Callable[[str], U]] = None,
|
323
323
|
params_fn: Optional[Callable[[str], dict]] = None) -> tuple[int, int]:
|
324
324
|
"""Check the health of the allocator.
|
325
325
|
|
@@ -349,7 +349,7 @@ class RedisAllocatorPolicy(ABC):
|
|
349
349
|
return healthy, unhealthy
|
350
350
|
|
351
351
|
|
352
|
-
class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
352
|
+
class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy[U]):
|
353
353
|
"""Default implementation of RedisAllocatorPolicy.
|
354
354
|
|
355
355
|
This policy provides the following features:
|
@@ -393,7 +393,7 @@ class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
|
393
393
|
self.objects: weakref.WeakValueDictionary[str, RedisAllocatorObject] = weakref.WeakValueDictionary()
|
394
394
|
self.auto_close = auto_close
|
395
395
|
|
396
|
-
def initialize(self, allocator: 'RedisAllocator'):
|
396
|
+
def initialize(self, allocator: 'RedisAllocator[U]'):
|
397
397
|
"""Initialize the policy with an allocator instance.
|
398
398
|
|
399
399
|
Args:
|
@@ -403,9 +403,9 @@ class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
|
403
403
|
self._update_lock_key = f"{allocator._pool_str()}|policy_update_lock"
|
404
404
|
atexit.register(lambda: self.finalize(self._allocator()))
|
405
405
|
|
406
|
-
def malloc(self, allocator: 'RedisAllocator', timeout: Timeout = 120,
|
407
|
-
obj: Optional[
|
408
|
-
cache_timeout: Timeout = 3600) -> Optional[RedisAllocatorObject]:
|
406
|
+
def malloc(self, allocator: 'RedisAllocator[U]', timeout: Timeout = 120,
|
407
|
+
obj: Optional[U] = None, params: Optional[dict] = None,
|
408
|
+
cache_timeout: Timeout = 3600) -> Optional[RedisAllocatorObject[U]]:
|
409
409
|
"""Allocate a resource according to the policy.
|
410
410
|
|
411
411
|
This implementation:
|
@@ -445,7 +445,7 @@ class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
|
445
445
|
return alloc_obj
|
446
446
|
|
447
447
|
@cached(TTLCache(maxsize=64, ttl=5))
|
448
|
-
def _try_refresh_pool(self, allocator: 'RedisAllocator'):
|
448
|
+
def _try_refresh_pool(self, allocator: 'RedisAllocator[U]'):
|
449
449
|
"""Try to refresh the pool if necessary and if we can acquire the lock.
|
450
450
|
|
451
451
|
Args:
|
@@ -457,7 +457,7 @@ class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
|
457
457
|
# If we got here, we acquired the lock, so we can update the pool
|
458
458
|
self.refresh_pool(allocator)
|
459
459
|
|
460
|
-
def refresh_pool(self, allocator: 'RedisAllocator'):
|
460
|
+
def refresh_pool(self, allocator: 'RedisAllocator[U]'):
|
461
461
|
"""Refresh the allocation pool using the updater.
|
462
462
|
|
463
463
|
Args:
|
@@ -478,7 +478,7 @@ class DefaultRedisAllocatorPolicy(RedisAllocatorPolicy):
|
|
478
478
|
else:
|
479
479
|
allocator.extend(keys, timeout=self.expiry_duration)
|
480
480
|
|
481
|
-
def finalize(self, allocator: 'RedisAllocator'):
|
481
|
+
def finalize(self, allocator: 'RedisAllocator[U]'):
|
482
482
|
"""Finalize the policy."""
|
483
483
|
for obj in self.objects.values():
|
484
484
|
obj.close()
|
@@ -521,7 +521,7 @@ class RedisAllocator(RedisLockPool, Generic[U]):
|
|
521
521
|
"""
|
522
522
|
|
523
523
|
def __init__(self, redis: Redis, prefix: str, suffix='allocator', eps=1e-6,
|
524
|
-
shared=False, policy: Optional[RedisAllocatorPolicy] = None):
|
524
|
+
shared=False, policy: Optional[RedisAllocatorPolicy[U]] = None):
|
525
525
|
"""Initializes the RedisAllocator.
|
526
526
|
|
527
527
|
Args:
|
@@ -1,15 +1,15 @@
|
|
1
1
|
redis_allocator/__init__.py,sha256=TVjUm-8YEu_MQD_PkfeIKiVknpCJBrUY9cWN1LlaZcU,1016
|
2
|
-
redis_allocator/_version.py,sha256=
|
3
|
-
redis_allocator/allocator.py,sha256=
|
2
|
+
redis_allocator/_version.py,sha256=qBs4HqYsPn6yUHWEuCN4rGUC05gABbl800d8LBd8h9w,22
|
3
|
+
redis_allocator/allocator.py,sha256=AerjK6B5-qaAsMn_ivJjRSn4GXWop27x4UDc1rlKP34,48778
|
4
4
|
redis_allocator/lock.py,sha256=fqf6WUWHKYenEArWopMIF6kWEnDfADC-bZvnQImsQVo,27400
|
5
5
|
redis_allocator/task_queue.py,sha256=8DjNr2uxhzCsHatV_CHOeGh7_K9pqQZFApSbe2blRO0,14989
|
6
|
-
redis_allocator-0.4.
|
6
|
+
redis_allocator-0.4.1.dist-info/licenses/LICENSE,sha256=Wt4X1rHpffQfEiyWcDUx8BMLjXxfPqaiYZ7Lgsj7L4c,1068
|
7
7
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
8
8
|
tests/conftest.py,sha256=Ts82uylQSzP_GcaN0E02o3xcFdjw20cXNzh3RAdYKW4,3967
|
9
9
|
tests/test_allocator.py,sha256=hFKgLe_yONtEjjm6zssUnhK0tzihG_1xZMziztHmqqA,22404
|
10
10
|
tests/test_lock.py,sha256=MDMRNN46VhWqkHUIhYOMEDgZkFFCW_WjwRLTOjkFF-Q,46952
|
11
11
|
tests/test_task_queue.py,sha256=Fh5naikFajfOvL6GngEy_TPfOYCYZolZfVwtR6T4dTY,31710
|
12
|
-
redis_allocator-0.4.
|
13
|
-
redis_allocator-0.4.
|
14
|
-
redis_allocator-0.4.
|
15
|
-
redis_allocator-0.4.
|
12
|
+
redis_allocator-0.4.1.dist-info/METADATA,sha256=K0lLGpDplwpwCMMuzUiA8CkkRfTPAIyswx4anbo0O-Y,21727
|
13
|
+
redis_allocator-0.4.1.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
14
|
+
redis_allocator-0.4.1.dist-info/top_level.txt,sha256=0hXzU7sK5FCeSolTEYxThOt3HOybnwaXv1FLRJvHVgI,22
|
15
|
+
redis_allocator-0.4.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|