Skip to content

Commit 5e5de4c

Browse files
authored
Merge branch 'main' into feature/support_rediscluster_transport
2 parents c2bb580 + 4c9fb4b commit 5e5de4c

File tree

9 files changed

+90
-12
lines changed

9 files changed

+90
-12
lines changed

.bumpversion.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
[bumpversion]
2-
current_version = 5.5.4
2+
current_version = 5.6.0b1
33
commit = True
44
tag = True
55
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(?P<releaselevel>[a-z]+)?

Changelog.rst

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,31 @@
44
Change history
55
================
66

7+
.. _version-5.6.0b1:
8+
9+
5.6.0b1
10+
=======
11+
:release-date: 29 July, 2025
12+
:release-by: Tomer Nosrati
13+
14+
What's Changed
15+
~~~~~~~~~~~~~~
16+
17+
- Revert "Feature: urllib3 instead of curl" (#2261)
18+
- Fix #2286 : SQS - Enhance support for receiving message attributes. Allow string in msg body. (#2300)
19+
- Update gcpubsub.txt for protobuf (#2320)
20+
- fix body bytes encoding in curl.py (#2322)
21+
- Hotfix(aws_ssl): validate secure connection (#2323)
22+
- Update setup.py to remove deprecation warning (#2298)
23+
- Update protobuf to 5.29.5 (#2199)
24+
- Allow setting `tags` in initial `boto3.sqs.create_queue` call via `transport_options` (#2321)
25+
- Add sts_token_buffer_time parameter to transport options (#2216)
26+
- Docs: Fix incorrect "added in 5.6.0" note for sts_token_timeout in SQS transport docs (#2327)
27+
- SQS: when redelivering a message apply visibility timeout based on wait_time_seconds (long polling time) (#2049)
28+
- Bump redis requirement to <6 to support v5.3 (#2329)
29+
- Pidbox: support queue_exclusive / queue_durable (RabbitMQ 4.x) (#2338)
30+
- Prepare for (pre) release: v5.6.0b1 (#2343)
31+
732
.. _version-5.5.4:
833

934
5.5.4
@@ -23,8 +48,6 @@ What's Changed
2348
- Fixed lint error from `kombu/transport/native_delayed_delivery.py` (#2308)
2449
- Prepare for release: v5.5.4 (#2309)
2550

26-
.. _version-5.5.2:
27-
2851
.. _version-5.5.3:
2952

3053
5.5.3

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
|build-status| |coverage| |license| |wheel| |pyversion| |pyimp| |downloads|
66

7-
:Version: 5.5.4
7+
:Version: 5.6.0b1
88
:Documentation: https://kombu.readthedocs.io/
99
:Download: https://pypi.org/project/kombu/
1010
:Source: https://github.com/celery/kombu/

docs/includes/introduction.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
:Version: 5.5.4
1+
:Version: 5.6.0b1
22
:Web: https://kombu.readthedocs.io/
33
:Download: https://pypi.org/project/kombu/
44
:Source: https://github.com/celery/kombu/

docs/reference/kombu.pidbox.rst

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,20 @@
7070
.. automethod:: get_reply_queue
7171
.. automethod:: get_queue
7272

73+
Mailbox Options
74+
~~~~~~~~~~~~~~~
75+
76+
.. versionadded:: 5.6.0
77+
78+
The `Mailbox` supports several configuration options that affect
79+
the behavior of its exchanges and queues.
80+
81+
- ``durable``: If True, declares durable exchanges that survive broker restarts.
82+
- ``exclusive``: If True, declares exclusive exchanges (usable by only one connection).
83+
84+
These provide finer control over broker-side behavior and are useful
85+
in production environments where queue durability matters.\
86+
7387
Node
7488
----
7589

@@ -91,4 +105,3 @@
91105
.. automethod:: handle
92106
.. automethod:: handle_message
93107
.. automethod:: reply
94-

kombu/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from collections import namedtuple
99
from typing import Any, cast
1010

11-
__version__ = '5.5.4'
11+
__version__ = '5.6.0b1'
1212
__author__ = 'Ask Solem'
1313
__contact__ = '[email protected]'
1414
__homepage__ = 'https://kombu.readthedocs.io'

kombu/pidbox.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,7 @@ def __init__(self, namespace,
181181
type='direct', connection=None, clock=None,
182182
accept=None, serializer=None, producer_pool=None,
183183
queue_ttl=None, queue_expires=None,
184+
queue_durable=False, queue_exclusive=False,
184185
reply_queue_ttl=None, reply_queue_expires=10.0):
185186
self.namespace = namespace
186187
self.connection = connection
@@ -193,9 +194,16 @@ def __init__(self, namespace,
193194
self.serializer = self.serializer if serializer is None else serializer
194195
self.queue_ttl = queue_ttl
195196
self.queue_expires = queue_expires
197+
self.queue_durable = queue_durable
198+
self.queue_exclusive = queue_exclusive
196199
self.reply_queue_ttl = reply_queue_ttl
197200
self.reply_queue_expires = reply_queue_expires
198201
self._producer_pool = producer_pool
202+
if queue_exclusive and queue_durable:
203+
raise ValueError(
204+
"queue_exclusive and queue_durable cannot both be True "
205+
"(exclusive queues are automatically deleted and cannot be durable).",
206+
)
199207

200208
def __call__(self, connection):
201209
bound = copy(self)
@@ -236,8 +244,9 @@ def get_reply_queue(self):
236244
f'{oid}.{self.reply_exchange.name}',
237245
exchange=self.reply_exchange,
238246
routing_key=oid,
239-
durable=False,
240-
auto_delete=True,
247+
durable=self.queue_durable,
248+
exclusive=self.queue_exclusive,
249+
auto_delete=not self.queue_durable,
241250
expires=self.reply_queue_expires,
242251
message_ttl=self.reply_queue_ttl,
243252
)
@@ -250,8 +259,9 @@ def get_queue(self, hostname):
250259
return Queue(
251260
f'{hostname}.{self.namespace}.pidbox',
252261
exchange=self.exchange,
253-
durable=False,
254-
auto_delete=True,
262+
durable=self.queue_durable,
263+
exclusive=self.queue_exclusive,
264+
auto_delete=not self.queue_durable,
255265
expires=self.queue_expires,
256266
message_ttl=self.queue_ttl,
257267
)

requirements/extras/redis.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
redis>=4.5.2,!=4.5.5,!=5.0.2,<=5.2.1
1+
redis>=4.5.2,!=4.5.5,!=5.0.2,<6

t/unit/test_pidbox.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,38 @@ def get_next(self, consumer):
342342
if m:
343343
return m.payload
344344

345+
def test_mailbox_queue_exclusive(self):
346+
mbox = pidbox.Mailbox(
347+
'flagbox_ex',
348+
queue_exclusive=True,
349+
queue_durable=False,
350+
)(self.connection)
351+
352+
for q in (mbox.get_queue('worker1'), mbox.get_reply_queue()):
353+
assert q.exclusive is True
354+
assert q.durable is False
355+
assert q.auto_delete is True
356+
357+
def test_mailbox_queue_durable(self):
358+
mbox = pidbox.Mailbox(
359+
'flagbox_dur',
360+
queue_exclusive=False,
361+
queue_durable=True,
362+
)(self.connection)
363+
364+
for q in (mbox.get_queue('worker1'), mbox.get_reply_queue()):
365+
assert q.durable is True
366+
assert q.exclusive is False
367+
assert q.auto_delete is False
368+
369+
def test_mailbox_invalid_flag_combo(self):
370+
with pytest.raises(ValueError):
371+
pidbox.Mailbox(
372+
'flagbox_bad',
373+
queue_exclusive=True,
374+
queue_durable=True,
375+
)(self.connection)
376+
345377

346378
GLOBAL_PIDBOX = pidbox.Mailbox('global_unittest_mailbox')
347379

0 commit comments

Comments
 (0)