1- from typing import Optional , Dict , Type , TypeVar , Callable
1+ from typing import Optional , Dict , Type , TypeVar , Callable , Union
22from io import BytesIO
33import base64
44
5- from kiota_abstractions .serialization import Parsable
5+ from kiota_abstractions .serialization import Parsable , ParsableFactory
66from kiota_abstractions .serialization import ParseNode
77from kiota_abstractions .serialization import ParseNodeFactoryRegistry
88from kiota_abstractions .serialization import SerializationWriter
99
1010from .batch_response_item import BatchResponseItem
1111
12- T = TypeVar ('T' , bound = 'Parsable' )
12+ T = TypeVar ('T' , bound = ParsableFactory )
1313
1414
1515class BatchResponseContent (Parsable ):
@@ -20,10 +20,10 @@ def __init__(self) -> None:
2020 BatchResponseContent is a collection of BatchResponseItem items,
2121 each with a unique request ID.
2222 """
23- self ._responses : Optional [Dict [str , ' BatchResponseItem' ]] = {}
23+ self ._responses : Optional [Dict [str , BatchResponseItem ]] = {}
2424
2525 @property
26- def responses (self ) -> Optional [Dict [str , ' BatchResponseItem' ]]:
26+ def responses (self ) -> Optional [Dict [str , BatchResponseItem ]]:
2727 """
2828 Get the responses in the collection
2929 :return: A dictionary of response IDs and their BatchResponseItem objects
@@ -32,7 +32,7 @@ def responses(self) -> Optional[Dict[str, 'BatchResponseItem']]:
3232 return self ._responses
3333
3434 @responses .setter
35- def responses (self , responses : Optional [Dict [str , ' BatchResponseItem' ]]) -> None :
35+ def responses (self , responses : Optional [Dict [str , BatchResponseItem ]]) -> None :
3636 """
3737 Set the responses in the collection
3838 :param responses: The responses to set in the collection
@@ -44,7 +44,7 @@ def get_response_by_id(
4444 self ,
4545 request_id : str ,
4646 response_type : Optional [Type [T ]] = None ,
47- ) -> Optional [' BatchResponseItem' ]:
47+ ) -> Optional [Union [ T , BatchResponseItem ] ]:
4848 """
4949 Get a response by its request ID from the collection
5050 :param request_id: The request ID of the response to get
@@ -55,7 +55,7 @@ def get_response_by_id(
5555 if self ._responses is None :
5656 return None
5757 if response_type is not None :
58- return response_type . create_from_discriminator_value ( self ._responses . get (request_id ) )
58+ return self .response_body (request_id , response_type )
5959 return self ._responses .get (request_id )
6060
6161 def get_response_stream_by_id (self , request_id : str ) -> Optional [BytesIO ]:
@@ -91,7 +91,7 @@ def get_response_status_codes(self) -> Dict[str, int]:
9191 return status_codes
9292
9393 def response_body (self , request_id : str , type : Type [T ]) -> Optional [T ]:
94- """
94+ """
9595 Get the body of a response by its request ID from the collection
9696 :param request_id: The request ID of the response to get
9797 :type request_id: str
@@ -129,26 +129,30 @@ def response_body(self, request_id: str, type: Type[T]) -> Optional[T]:
129129 content_type , base64_decoded_body
130130 )
131131 response .body = base64_decoded_body
132- return parse_node .get_object_value (type . create_from_discriminator_value )
132+ return parse_node .get_object_value (type )
133133 except Exception :
134134 raise ValueError (
135135 f"Unable to deserialize batch response for request Id: { request_id } to { type } "
136136 )
137137
138138 def get_field_deserializers (self ) -> Dict [str , Callable [[ParseNode ], None ]]:
139- """
139+ """
140140 Gets the deserialization information for this object.
141141 :return: The deserialization information for this object
142142 :rtype: Dict[str, Callable[[ParseNode], None]]
143143 """
144144
145+ def set_responses (n : ParseNode ):
146+ values = n .get_collection_of_object_values (BatchResponseItem )
147+ if values :
148+ setattr (self , '_responses' , {item .id : item for item in values })
149+ else :
150+ setattr (self , '_responses' , {})
151+
152+
145153 return {
146154 'responses' :
147- lambda n : setattr (
148- self , '_responses' ,
149- {item .id : item
150- for item in n .get_collection_of_object_values (BatchResponseItem )}
151- )
155+ lambda n : set_responses (n )
152156 }
153157
154158 def serialize (self , writer : SerializationWriter ) -> None :
@@ -159,7 +163,7 @@ def serialize(self, writer: SerializationWriter) -> None:
159163 if self ._responses is not None :
160164 writer .write_collection_of_object_values ('responses' , list (self ._responses .values ()))
161165 else :
162- writer .write_collection_of_object_values ('responses' , []) # type: ignore
166+ writer .write_collection_of_object_values ('responses' , [])
163167
164168 @staticmethod
165169 def create_from_discriminator_value (
0 commit comments