Skip to content

Commit 13687c3

Browse files
committed
convert responses to dict
1 parent 5c5286e commit 13687c3

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

src/msgraph_core/requests/batch_response_content.py

Lines changed: 11 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def __init__(self) -> None:
2020
BatchResponseContent is a collection of BatchResponseItem items,
2121
each with a unique request ID.
2222
"""
23-
self._responses: Optional[List['BatchResponseItem']] = []
23+
self._responses: Optional[Dict[str, 'BatchResponseItem']] = {}
2424

2525
@property
2626
def responses(self) -> Optional[List['BatchResponseItem']]:
@@ -38,10 +38,7 @@ def responses(self, responses: Optional[List['BatchResponseItem']]) -> None:
3838
:param responses: The responses to set in the collection
3939
:type responses: Optional[Dict[str, BatchResponseItem]]
4040
"""
41-
if isinstance(responses, dict):
42-
self._responses = {response.id: response for response in responses.values()}
43-
else:
44-
self._responses = responses
41+
self._responses = responses
4542

4643
def response(self, request_id: str) -> 'BatchResponseItem':
4744
"""
@@ -53,19 +50,10 @@ def response(self, request_id: str) -> 'BatchResponseItem':
5350
"""
5451
if self._responses is None:
5552
raise ValueError("Responses list is not initialized.")
56-
for response in self._responses:
57-
if response.request_id == request_id:
58-
return response
53+
if request_id in self._responses:
54+
return self._responses[request_id]
5955
raise KeyError(f"Response with request ID {request_id} not found.")
6056

61-
# def get_response_by_id(self, request_id: str) -> 'BatchResponseItem':
62-
# if self._responses is None:
63-
# raise ValueError("Responses list is not initialized.")
64-
# for response in self._responses:
65-
# if response.request_id == request_id:
66-
# return response
67-
# raise KeyError(f"Response with request ID {request_id} not found.")
68-
6957
def response_body(self, request_id: str, type: Type[T]) -> Optional[T]:
7058
"""
7159
Get the body of a response by its request ID from the collection
@@ -114,16 +102,20 @@ def get_field_deserializers(self) -> Dict[str, Callable[[ParseNode], None]]:
114102
"""
115103
return {
116104
'responses':
117-
lambda n:
118-
setattr(self, 'responses', n.get_collection_of_object_values(BatchResponseItem))
105+
lambda n: setattr(
106+
self, 'responses',
107+
{item.id: item
108+
for item in n.get_collection_of_object_values(BatchResponseItem)}
109+
)
119110
}
120111

121112
def serialize(self, writer: SerializationWriter) -> None:
122113
"""
123114
Writes the objects properties to the current writer.
124115
:param writer: The writer to write to
125116
"""
126-
writer.write_collection_of_object_values('responses', self._responses)
117+
if self._responses:
118+
writer.write_collection_of_object_values('responses', list(self._responses.values()))
127119

128120
@staticmethod
129121
def create_from_discriminator_value(

tests/requests/test_batch_response_content.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ def batch_response_content():
1212

1313

1414
def test_initialization(batch_response_content):
15-
assert batch_response_content.responses == []
15+
assert batch_response_content.responses == {}
16+
assert isinstance(batch_response_content._responses, dict)
1617

1718

1819
def test_responses_property(batch_response_content):
@@ -24,7 +25,7 @@ def test_responses_property(batch_response_content):
2425
def test_response_method(batch_response_content):
2526
response_item = Mock(spec=BatchResponseItem)
2627
response_item.request_id = "12345"
27-
batch_response_content.responses = [response_item]
28+
batch_response_content.responses = {"12345": response_item}
2829
assert batch_response_content.response("12345") == response_item
2930

3031

@@ -53,7 +54,7 @@ def test_get_field_deserializers(batch_response_content):
5354
def test_serialize(batch_response_content):
5455
writer = Mock(spec=SerializationWriter)
5556
response_item = Mock(spec=BatchResponseItem)
56-
batch_response_content.responses = [response_item]
57+
batch_response_content.responses = {"12345": response_item}
5758
batch_response_content.serialize(writer)
5859
writer.write_collection_of_object_values.assert_called_once_with('responses', [response_item])
5960

0 commit comments

Comments
 (0)