Skip to content

Commit 7f25514

Browse files
committed
Fix batch response content type issues
1 parent b05e6d6 commit 7f25514

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

src/msgraph_core/requests/batch_response_content.py

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
from typing import Optional, Dict, Type, TypeVar, Callable
1+
from typing import Optional, Dict, Type, TypeVar, Callable, Union
22
from io import BytesIO
33
import base64
44

5-
from kiota_abstractions.serialization import Parsable
5+
from kiota_abstractions.serialization import Parsable, ParsableFactory
66
from kiota_abstractions.serialization import ParseNode
77
from kiota_abstractions.serialization import ParseNodeFactoryRegistry
88
from kiota_abstractions.serialization import SerializationWriter
99

1010
from .batch_response_item import BatchResponseItem
1111

12-
T = TypeVar('T', bound='Parsable')
12+
T = TypeVar('T', bound=ParsableFactory)
1313

1414

1515
class 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

Comments
 (0)