99 purge_queue_address ,
1010 queue_address ,
1111)
12- from .common import CommonValues
12+ from .common import CommonValues , QueueType
1313from .entities import (
1414 BindingSpecification ,
1515 ExchangeSpecification ,
16+ QueueInfo ,
1617 QueueSpecification ,
1718)
1819from .exceptions import ValidationCodeException
@@ -65,8 +66,10 @@ def request(
6566 path : str ,
6667 method : str ,
6768 expected_response_codes : list [int ],
68- ) -> None :
69- self ._request (str (uuid .uuid4 ()), body , path , method , expected_response_codes )
69+ ) -> Message :
70+ return self ._request (
71+ str (uuid .uuid4 ()), body , path , method , expected_response_codes
72+ )
7073
7174 def _request (
7275 self ,
@@ -75,7 +78,7 @@ def _request(
7578 path : str ,
7679 method : str ,
7780 expected_response_codes : list [int ],
78- ) -> None :
81+ ) -> Message :
7982 amq_message = Message (
8083 id = id ,
8184 body = body ,
@@ -93,6 +96,7 @@ def _request(
9396 logger .debug ("Received message: " + str (msg ))
9497
9598 self ._validate_reponse_code (int (msg .subject ), expected_response_codes )
99+ return msg
96100
97101 def declare_exchange (
98102 self , exchange_specification : ExchangeSpecification
@@ -236,3 +240,36 @@ def purge_queue(self, queue_name: str) -> None:
236240 CommonValues .response_code_200 .value ,
237241 ],
238242 )
243+
244+ def queue_info (self , queue_name : str ) -> QueueInfo :
245+ logger .debug ("queue_info operation called" )
246+ path = queue_address (queue_name )
247+
248+ message = self .request (
249+ None ,
250+ path ,
251+ CommonValues .command_get .value ,
252+ [
253+ CommonValues .response_code_200 .value ,
254+ ],
255+ )
256+
257+ queue_info : dict [str , Any ] = message .body
258+
259+ if queue_info ["type" ] == "quorum" :
260+ queue_type = QueueType .quorum
261+ elif queue_info ["type" ] == "stream" :
262+ queue_type = QueueType .stream
263+ else :
264+ queue_type = QueueType .classic
265+
266+ return QueueInfo (
267+ name = queue_info ["name" ],
268+ is_durable = queue_info ["durable" ],
269+ is_auto_delete = queue_info ["auto_delete" ],
270+ is_exclusive = queue_info ["exclusive" ],
271+ queue_type = queue_type ,
272+ leader = queue_info ["leader" ],
273+ members = queue_info ["replicas" ],
274+ arguments = queue_info ["arguments" ],
275+ )
0 commit comments