Skip to content

Commit ee0e5dd

Browse files
author
DanielePalaia
committed
adding headers and custom ExchangeTypes
1 parent 2eb822c commit ee0e5dd

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

rabbitmq_amqp_python_client/common.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class ExchangeType(enum.Enum):
2424
direct = "direct"
2525
topic = "topic"
2626
fanout = "fanout"
27+
headers = "headers"
2728

2829

2930
class QueueType(enum.Enum):

rabbitmq_amqp_python_client/entities.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
class ExchangeSpecification:
1515
name: str
1616
arguments: dict[str, str] = field(default_factory=dict)
17-
exchange_type: ExchangeType = ExchangeType.direct
17+
exchange_type: Union[ExchangeType, str] = ExchangeType.direct
1818
is_auto_delete: bool = False
1919
is_internal: bool = False
2020
is_durable: bool = True

rabbitmq_amqp_python_client/management.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from typing import Any, Optional, Union
44

55
from .address_helper import AddressHelper
6-
from .common import CommonValues, QueueType
6+
from .common import CommonValues, ExchangeType, QueueType
77
from .entities import (
88
ExchangeSpecification,
99
ExchangeToExchangeBindingSpecification,
@@ -101,12 +101,15 @@ def declare_exchange(
101101
self, exchange_specification: ExchangeSpecification
102102
) -> ExchangeSpecification:
103103
logger.debug("declare_exchange operation called")
104-
body = {}
104+
body: dict[str, Any] = {}
105105
body["auto_delete"] = exchange_specification.is_auto_delete
106106
body["durable"] = exchange_specification.is_durable
107-
body["type"] = exchange_specification.exchange_type.value # type: ignore
107+
if isinstance(exchange_specification.exchange_type, ExchangeType):
108+
body["type"] = exchange_specification.exchange_type.value
109+
else:
110+
body["type"] = str(exchange_specification.exchange_type)
108111
body["internal"] = exchange_specification.is_internal
109-
body["arguments"] = exchange_specification.arguments # type: ignore
112+
body["arguments"] = exchange_specification.arguments
110113

111114
path = AddressHelper.exchange_address(exchange_specification.name)
112115

tests/test_management.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,39 @@ def test_declare_delete_exchange(management: Management) -> None:
2929
management.delete_exchange(exchange_name)
3030

3131

32+
def test_declare_delete_exchange_headers(management: Management) -> None:
33+
34+
exchange_name = "test-exchange"
35+
36+
exchange_info = management.declare_exchange(
37+
ExchangeSpecification(name=exchange_name, exchange_type=ExchangeType.headers)
38+
)
39+
40+
assert exchange_info.name == exchange_name
41+
42+
management.delete_exchange(exchange_name)
43+
44+
45+
def test_declare_delete_exchange_custom(management: Management) -> None:
46+
47+
exchange_name = "test-exchange"
48+
49+
exchange_arguments = {}
50+
exchange_arguments["x-delayed-type"] = "direct"
51+
52+
exchange_info = management.declare_exchange(
53+
ExchangeSpecification(
54+
name=exchange_name,
55+
exchange_type="x-local-random",
56+
arguments=exchange_arguments,
57+
)
58+
)
59+
60+
assert exchange_info.name == exchange_name
61+
62+
management.delete_exchange(exchange_name)
63+
64+
3265
def test_declare_delete_exchange_with_args(management: Management) -> None:
3366

3467
exchange_name = "test-exchange-with-args"

0 commit comments

Comments
 (0)