redis-message-queue 8.2.3__tar.gz → 8.2.4__tar.gz
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_message_queue-8.2.3 → redis_message_queue-8.2.4}/PKG-INFO +2 -2
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/README.md +1 -1
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/pyproject.toml +2 -2
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_config.py +1 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_redis_gateway.py +6 -2
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/asyncio/_redis_gateway.py +6 -2
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/asyncio/redis_message_queue.py +10 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/redis_message_queue.py +7 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/.gitignore +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/LICENSE +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/__init__.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_abstract_redis_gateway.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_callable_utils.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_event.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_exceptions.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_payload_limits.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_queue_key_manager.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_redis_cluster.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_stored_message.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/asyncio/__init__.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/asyncio/_abstract_redis_gateway.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/interrupt_handler/__init__.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/interrupt_handler/_event_driven.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/interrupt_handler/_implementation.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/interrupt_handler/_interface.py +0 -0
- {redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/py.typed +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redis-message-queue
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.4
|
|
4
4
|
Summary: Python message queuing with Redis and message deduplication
|
|
5
5
|
Project-URL: Homepage, https://github.com/Elijas/redis-message-queue
|
|
6
6
|
Project-URL: Repository, https://github.com/Elijas/redis-message-queue
|
|
@@ -34,7 +34,7 @@ Description-Content-Type: text/markdown
|
|
|
34
34
|
**Lightweight Python message queuing with Redis and built-in publish-side deduplication.** Deduplicate publishes within a TTL window, with optional crash recovery — across any number of producers and consumers.
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
pip install "redis-message-queue>=8.2.
|
|
37
|
+
pip install "redis-message-queue>=8.2.4,<9.0.0"
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
Requires Redis server >= 6.2.
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
**Lightweight Python message queuing with Redis and built-in publish-side deduplication.** Deduplicate publishes within a TTL window, with optional crash recovery — across any number of producers and consumers.
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
pip install "redis-message-queue>=8.2.
|
|
14
|
+
pip install "redis-message-queue>=8.2.4,<9.0.0"
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
Requires Redis server >= 6.2.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "redis-message-queue"
|
|
3
|
-
version = "8.2.
|
|
3
|
+
version = "8.2.4"
|
|
4
4
|
description = "Python message queuing with Redis and message deduplication"
|
|
5
5
|
authors = [{ name = "Elijas", email = "4084885+Elijas@users.noreply.github.com" }]
|
|
6
6
|
readme = "README.md"
|
|
@@ -48,7 +48,7 @@ default-groups = ["dev", "test"]
|
|
|
48
48
|
##############################
|
|
49
49
|
|
|
50
50
|
[tool.bumpversion]
|
|
51
|
-
current_version = "8.2.
|
|
51
|
+
current_version = "8.2.4"
|
|
52
52
|
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
|
|
53
53
|
serialize = ["{major}.{minor}.{patch}"]
|
|
54
54
|
search = "{current_version}"
|
|
@@ -623,6 +623,7 @@ local removed = redis.call('LREM', KEYS[1], 1, ARGV[1])
|
|
|
623
623
|
if removed == 1 then
|
|
624
624
|
redis.call('HDEL', KEYS[3], ARGV[2])
|
|
625
625
|
redis.call('HDEL', KEYS[4], ARGV[1])
|
|
626
|
+
redis.call('DEL', KEYS[6])
|
|
626
627
|
else
|
|
627
628
|
redis.call('LREM', KEYS[2], 1, ARGV[1])
|
|
628
629
|
end
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_redis_gateway.py
RENAMED
|
@@ -706,6 +706,8 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
706
706
|
clear=clear_pending_claim_id,
|
|
707
707
|
)
|
|
708
708
|
if recovered_claim is not None:
|
|
709
|
+
if self._message_visibility_timeout_seconds is None:
|
|
710
|
+
self._delete_claim_result_key(self._claim_result_key(to_queue, pending_claim_id))
|
|
709
711
|
self._emit_event("claim_reclaim", "success", claim_id=pending_claim_id)
|
|
710
712
|
return recovered_claim
|
|
711
713
|
|
|
@@ -813,6 +815,8 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
813
815
|
pending_claim_id_to_share = claim_id
|
|
814
816
|
raise
|
|
815
817
|
if recovered_claim is not None:
|
|
818
|
+
if self._message_visibility_timeout_seconds is None:
|
|
819
|
+
self._delete_claim_result_key(self._claim_result_key(to_queue, claim_id))
|
|
816
820
|
self._emit_event("claim_reclaim", "success", claim_id=claim_id)
|
|
817
821
|
return recovered_claim
|
|
818
822
|
self._emit_event(
|
|
@@ -1171,7 +1175,6 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
1171
1175
|
_raise_if_drain_deadline_expired(deadline_monotonic)
|
|
1172
1176
|
if cached_claim is None:
|
|
1173
1177
|
return None
|
|
1174
|
-
self._delete_claim_result_key(claim_result_key, deadline_monotonic=deadline_monotonic)
|
|
1175
1178
|
_raise_if_drain_deadline_expired(deadline_monotonic)
|
|
1176
1179
|
return cached_claim
|
|
1177
1180
|
|
|
@@ -1250,12 +1253,13 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
1250
1253
|
result = _call_with_drain_deadline(
|
|
1251
1254
|
lambda: self._eval(
|
|
1252
1255
|
RETURN_MESSAGE_TO_PENDING_LUA_SCRIPT,
|
|
1253
|
-
|
|
1256
|
+
6,
|
|
1254
1257
|
processing_queue,
|
|
1255
1258
|
pending_queue,
|
|
1256
1259
|
self._claim_result_ids_key(processing_queue),
|
|
1257
1260
|
self._claim_result_backrefs_key(processing_queue),
|
|
1258
1261
|
operation_result_key,
|
|
1262
|
+
self._claim_result_key(processing_queue, claim_id),
|
|
1259
1263
|
stored_message,
|
|
1260
1264
|
claim_id,
|
|
1261
1265
|
self._operation_result_ttl_ms(),
|
|
@@ -685,6 +685,8 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
685
685
|
clear=clear_pending_claim_id,
|
|
686
686
|
)
|
|
687
687
|
if recovered_claim is not None:
|
|
688
|
+
if self._message_visibility_timeout_seconds is None:
|
|
689
|
+
await self._delete_claim_result_key(self._claim_result_key(to_queue, pending_claim_id))
|
|
688
690
|
await self._emit_event("claim_reclaim", "success", claim_id=pending_claim_id)
|
|
689
691
|
return recovered_claim
|
|
690
692
|
|
|
@@ -793,6 +795,8 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
793
795
|
pending_claim_id_to_share = claim_id
|
|
794
796
|
raise
|
|
795
797
|
if recovered_claim is not None:
|
|
798
|
+
if self._message_visibility_timeout_seconds is None:
|
|
799
|
+
await self._delete_claim_result_key(self._claim_result_key(to_queue, claim_id))
|
|
796
800
|
await self._emit_event("claim_reclaim", "success", claim_id=claim_id)
|
|
797
801
|
return recovered_claim
|
|
798
802
|
await self._emit_event(
|
|
@@ -1151,7 +1155,6 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
1151
1155
|
_raise_if_drain_deadline_expired(deadline_monotonic)
|
|
1152
1156
|
if cached_claim is None:
|
|
1153
1157
|
return None
|
|
1154
|
-
await self._delete_claim_result_key(claim_result_key, deadline_monotonic=deadline_monotonic)
|
|
1155
1158
|
_raise_if_drain_deadline_expired(deadline_monotonic)
|
|
1156
1159
|
return cached_claim
|
|
1157
1160
|
|
|
@@ -1231,12 +1234,13 @@ class RedisGateway(AbstractRedisGateway):
|
|
|
1231
1234
|
result = await _call_with_drain_deadline(
|
|
1232
1235
|
lambda: self._eval(
|
|
1233
1236
|
RETURN_MESSAGE_TO_PENDING_LUA_SCRIPT,
|
|
1234
|
-
|
|
1237
|
+
6,
|
|
1235
1238
|
processing_queue,
|
|
1236
1239
|
pending_queue,
|
|
1237
1240
|
self._claim_result_ids_key(processing_queue),
|
|
1238
1241
|
self._claim_result_backrefs_key(processing_queue),
|
|
1239
1242
|
operation_result_key,
|
|
1243
|
+
self._claim_result_key(processing_queue, claim_id),
|
|
1240
1244
|
stored_message,
|
|
1241
1245
|
claim_id,
|
|
1242
1246
|
self._operation_result_ttl_ms(),
|
|
@@ -483,6 +483,16 @@ class _LeaseHeartbeat:
|
|
|
483
483
|
result = self._on_heartbeat_failure()
|
|
484
484
|
if inspect.isawaitable(result):
|
|
485
485
|
await result
|
|
486
|
+
except asyncio.CancelledError as exc:
|
|
487
|
+
current_task = asyncio.current_task()
|
|
488
|
+
if current_task is not None and current_task.cancelling() > 0:
|
|
489
|
+
raise
|
|
490
|
+
logger.exception("on_heartbeat_failure callback raised an exception")
|
|
491
|
+
warnings.warn(
|
|
492
|
+
f"on_heartbeat_failure callback raised {type(exc).__name__}",
|
|
493
|
+
RuntimeWarning,
|
|
494
|
+
stacklevel=1,
|
|
495
|
+
)
|
|
486
496
|
except Exception as exc:
|
|
487
497
|
logger.exception("on_heartbeat_failure callback raised an exception")
|
|
488
498
|
warnings.warn(
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/redis_message_queue.py
RENAMED
|
@@ -445,6 +445,13 @@ class _LeaseHeartbeat:
|
|
|
445
445
|
"'on_heartbeat_failure' returned an awaitable; "
|
|
446
446
|
"use the async RedisMessageQueue from redis_message_queue.asyncio instead"
|
|
447
447
|
)
|
|
448
|
+
except asyncio.CancelledError as exc:
|
|
449
|
+
logger.exception("on_heartbeat_failure callback raised an exception")
|
|
450
|
+
warnings.warn(
|
|
451
|
+
f"on_heartbeat_failure callback raised {type(exc).__name__}",
|
|
452
|
+
RuntimeWarning,
|
|
453
|
+
stacklevel=1,
|
|
454
|
+
)
|
|
448
455
|
except Exception as exc:
|
|
449
456
|
logger.exception("on_heartbeat_failure callback raised an exception")
|
|
450
457
|
warnings.warn(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_callable_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_payload_limits.py
RENAMED
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_queue_key_manager.py
RENAMED
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_redis_cluster.py
RENAMED
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/_stored_message.py
RENAMED
|
File without changes
|
{redis_message_queue-8.2.3 → redis_message_queue-8.2.4}/redis_message_queue/asyncio/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|