File tree Expand file tree Collapse file tree 4 files changed +42
-5
lines changed
rabbitmq_amqp_python_client Expand file tree Collapse file tree 4 files changed +42
-5
lines changed Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ class ExchangeType(enum.Enum):
2424 direct = "direct"
2525 topic = "topic"
2626 fanout = "fanout"
27+ headers = "headers"
2728
2829
2930class QueueType (enum .Enum ):
Original file line number Diff line number Diff line change 1414class 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
Original file line number Diff line number Diff line change 33from typing import Any , Optional , Union
44
55from .address_helper import AddressHelper
6- from .common import CommonValues , QueueType
6+ from .common import CommonValues , ExchangeType , QueueType
77from .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
Original file line number Diff line number Diff 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+
3265def test_declare_delete_exchange_with_args (management : Management ) -> None :
3366
3467 exchange_name = "test-exchange-with-args"
You can’t perform that action at this time.
0 commit comments