diff options
author | Omer Katz <omer.drow@gmail.com> | 2019-03-31 17:37:15 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-31 17:37:15 +0300 |
commit | 892f400355e2aae382691c0105cd29c398cc6250 (patch) | |
tree | e367201adee220de1cd5ce3ce371eefbf329042b | |
parent | d9735dee838fa833563500db802b535cef9d0672 (diff) | |
download | kombu-892f400355e2aae382691c0105cd29c398cc6250.tar.gz |
Reintroduce unqiue broadcast queue name generation as optional. (#1033)
-rw-r--r-- | kombu/common.py | 17 | ||||
-rw-r--r-- | t/unit/test_common.py | 26 |
2 files changed, 34 insertions, 9 deletions
diff --git a/kombu/common.py b/kombu/common.py index f86e01a6..824d097a 100644 --- a/kombu/common.py +++ b/kombu/common.py @@ -79,15 +79,26 @@ class Broadcast(Queue): queue (str): By default a unique id is used for the queue name for every consumer. You can specify a custom queue name here. + unique (bool): Always create a unique queue + even if a queue name is supplied. **kwargs (Any): See :class:`~kombu.Queue` for a list of additional keyword arguments supported. """ attrs = Queue.attrs + (('queue', None),) - def __init__(self, name=None, queue=None, auto_delete=True, - exchange=None, alias=None, **kwargs): - queue = queue or 'bcast.{0}'.format(uuid()) + def __init__(self, + name=None, + queue=None, + unique=False, + auto_delete=True, + exchange=None, + alias=None, + **kwargs): + if unique: + queue = '{0}.{1}'.format(queue or 'bcast', uuid()) + else: + queue = queue or 'bcast.{0}'.format(uuid()) return super(Broadcast, self).__init__( alias=alias or name, queue=queue, diff --git a/t/unit/test_common.py b/t/unit/test_common.py index 2cbd3d1b..dd044415 100644 --- a/t/unit/test_common.py +++ b/t/unit/test_common.py @@ -72,12 +72,15 @@ class test_declaration_cached: class test_Broadcast: def test_arguments(self): - q = Broadcast(name='test_Broadcast') - assert q.name.startswith('bcast.') - assert q.alias == 'test_Broadcast' - assert q.auto_delete - assert q.exchange.name == 'test_Broadcast' - assert q.exchange.type == 'fanout' + with patch('kombu.common.uuid', + return_value='test') as uuid_mock: + q = Broadcast(name='test_Broadcast') + uuid_mock.assert_called_with() + assert q.name == 'bcast.test' + assert q.alias == 'test_Broadcast' + assert q.auto_delete + assert q.exchange.name == 'test_Broadcast' + assert q.exchange.type == 'fanout' q = Broadcast('test_Broadcast', 'explicit_queue_name') assert q.name == 'explicit_queue_name' @@ -86,6 +89,17 @@ class test_Broadcast: q2 = q(Mock()) assert q2.name == q.name + with patch('kombu.common.uuid', + return_value='test') as uuid_mock: + q = Broadcast('test_Broadcast', + 'explicit_queue_name', + unique=True) + uuid_mock.assert_called_with() + assert q.name == 'explicit_queue_name.test' + + q2 = q(Mock()) + assert q2.name.split('.')[0] == q.name.split('.')[0] + class test_maybe_declare: |