redis-message-queue 8.2.6__tar.gz → 8.2.7__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.
Files changed (26) hide show
  1. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/PKG-INFO +2 -2
  2. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/README.md +1 -1
  3. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/pyproject.toml +2 -2
  4. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/asyncio/redis_message_queue.py +17 -3
  5. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/redis_message_queue.py +22 -1
  6. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/.gitignore +0 -0
  7. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/LICENSE +0 -0
  8. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/__init__.py +0 -0
  9. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_abstract_redis_gateway.py +0 -0
  10. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_callable_utils.py +0 -0
  11. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_config.py +0 -0
  12. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_event.py +0 -0
  13. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_exceptions.py +0 -0
  14. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_payload_limits.py +0 -0
  15. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_queue_key_manager.py +0 -0
  16. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_redis_cluster.py +0 -0
  17. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_redis_gateway.py +0 -0
  18. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/_stored_message.py +0 -0
  19. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/asyncio/__init__.py +0 -0
  20. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/asyncio/_abstract_redis_gateway.py +0 -0
  21. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/asyncio/_redis_gateway.py +0 -0
  22. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/interrupt_handler/__init__.py +0 -0
  23. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/interrupt_handler/_event_driven.py +0 -0
  24. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/interrupt_handler/_implementation.py +0 -0
  25. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/redis_message_queue/interrupt_handler/_interface.py +0 -0
  26. {redis_message_queue-8.2.6 → redis_message_queue-8.2.7}/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.6
3
+ Version: 8.2.7
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.6,<9.0.0"
37
+ pip install "redis-message-queue>=8.2.7,<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.6,<9.0.0"
14
+ pip install "redis-message-queue>=8.2.7,<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.6"
3
+ version = "8.2.7"
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.6"
51
+ current_version = "8.2.7"
52
52
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
53
53
  serialize = ["{major}.{minor}.{patch}"]
54
54
  search = "{current_version}"
@@ -1072,9 +1072,23 @@ class RedisMessageQueue:
1072
1072
  "See AbstractRedisGateway.add_message for the full contract."
1073
1073
  )
1074
1074
  else:
1075
- dedup_key = self._get_deduplication_key(message)
1076
- if inspect.isawaitable(dedup_key):
1077
- dedup_key = await dedup_key
1075
+ try:
1076
+ dedup_key = self._get_deduplication_key(message)
1077
+ if inspect.isawaitable(dedup_key):
1078
+ dedup_key = await dedup_key
1079
+ except asyncio.CancelledError as exc:
1080
+ current_task = asyncio.current_task()
1081
+ if current_task is not None and current_task.cancelling() > 0:
1082
+ raise
1083
+ _set_exception_context(exc, queue=self._queue_name, operation="publish")
1084
+ await self._emit_event(
1085
+ "publish",
1086
+ "failure",
1087
+ exception_type=type(exc).__name__,
1088
+ error=exc,
1089
+ duration_ms=_duration_ms(started_at),
1090
+ )
1091
+ raise
1078
1092
  dedup_key = validate_callable_deduplication_key(dedup_key, message)
1079
1093
  dedup_key = self.key.deduplication(dedup_key)
1080
1094
  result = await self._redis.publish_message(self.key.pending, message_str, dedup_key)
@@ -80,6 +80,14 @@ def _duration_ms(started_at: float) -> float:
80
80
  return (time.perf_counter() - started_at) * 1000
81
81
 
82
82
 
83
+ def _current_async_task_is_cancelling() -> bool:
84
+ try:
85
+ current_task = asyncio.current_task()
86
+ except RuntimeError:
87
+ return False
88
+ return current_task is not None and current_task.cancelling() > 0
89
+
90
+
83
91
  def _hash_lease_token(lease_token: str | None) -> str | None:
84
92
  if lease_token is None:
85
93
  return None
@@ -1017,7 +1025,20 @@ class RedisMessageQueue:
1017
1025
  "See AbstractRedisGateway.add_message for the full contract."
1018
1026
  )
1019
1027
  else:
1020
- dedup_key = self._get_deduplication_key(message)
1028
+ try:
1029
+ dedup_key = self._get_deduplication_key(message)
1030
+ except asyncio.CancelledError as exc:
1031
+ if _current_async_task_is_cancelling():
1032
+ raise
1033
+ _set_exception_context(exc, queue=self._queue_name, operation="publish")
1034
+ self._emit_event(
1035
+ "publish",
1036
+ "failure",
1037
+ exception_type=type(exc).__name__,
1038
+ error=exc,
1039
+ duration_ms=_duration_ms(started_at),
1040
+ )
1041
+ raise
1021
1042
  if inspect.isawaitable(dedup_key):
1022
1043
  is_coroutine = inspect.iscoroutine(dedup_key)
1023
1044
  _close_or_cancel_awaitable(dedup_key)