Skip to content

Commit f85ba50

Browse files
committed
update unit tests
1 parent 3c8dc8f commit f85ba50

File tree

5 files changed

+52
-64
lines changed

5 files changed

+52
-64
lines changed

src/msgraph_core/requests/batch_request_builder.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from typing import TypeVar, Type, Dict, Optional, Union
2-
import json
32
import logging
43

54
from kiota_abstractions.request_adapter import RequestAdapter
@@ -61,19 +60,18 @@ async def post(
6160

6261
if isinstance(batch_request_content, BatchRequestContent):
6362
request_info = await self.to_post_request_information(batch_request_content)
64-
request_info.content = request_info.content.strip(b'[]')
65-
print(f"Request info: {request_info.content}")
63+
bytes_content = request_info.content
64+
json_content = bytes_content.decode("utf-8")
65+
updated_str = '{"requests":' + json_content + '}'
66+
updated_bytes = updated_str.encode("utf-8")
67+
request_info.content = updated_bytes
6668
error_map = error_map or self.error_map
6769
response = None
6870
try:
6971
response = await self._request_adapter.send_async(
7072
request_info, response_type, error_map
7173
)
72-
print(f"Response type returned for content : {type(response)}")
73-
print(f"Batch response responses returned for content : {response.responses}")
74-
# for key in response.responses:
75-
# print(f"Response key -id: {key}")
76-
# print(f"Response value: {response.response(key).body}")
74+
7775
except APIError as e:
7876
logging.error("API Error: %s", e)
7977
raise e
@@ -82,7 +80,6 @@ async def post(
8280
return response
8381
if isinstance(batch_request_content, BatchRequestContentCollection):
8482
batch_responses = await self._post_batch_collection(batch_request_content, error_map)
85-
print(f"Response type returned for collection: {type(response)}")
8683
return batch_responses
8784

8885
raise ValueError("Invalid type for batch_request_content.")
@@ -114,7 +111,6 @@ async def _post_batch_collection(
114111
response = await self._request_adapter.send_async(
115112
request_info, BatchResponseContent, error_map or self.error_map
116113
)
117-
print(f"Response type for batch item: {type(response)}")
118114
batch_responses.add_response(response)
119115

120116
return batch_responses

src/msgraph_core/requests/batch_request_content.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,12 @@ def requests(self, requests: List[BatchRequestItem]) -> None:
4040
if len(requests) >= BatchRequestContent.MAX_REQUESTS:
4141
raise ValueError(f"Maximum number of requests is {BatchRequestContent.MAX_REQUESTS}")
4242
for request in requests:
43-
self.add_request(request)
43+
self.add_request(request.id, request)
4444

4545
def add_request(self, request_id: Optional[str], request: BatchRequestItem) -> None:
4646
"""
4747
Adds a request to the batch request content.
4848
"""
49-
print(f"Request: {request}")
50-
print(f"Request type: {type(request)}")
51-
5249
if len(self.requests) >= BatchRequestContent.MAX_REQUESTS:
5350
raise RuntimeError(f"Maximum number of requests is {BatchRequestContent.MAX_REQUESTS}")
5451
if not request.id:
@@ -67,13 +64,15 @@ def add_request_information(self, request_information: RequestInformation) -> No
6764
Args:
6865
request_information (RequestInformation): The request information to add.
6966
"""
70-
self.add_request(BatchRequestItem(request_information))
67+
request_id = str(uuid.uuid4())
68+
self.add_request(request_id, BatchRequestItem(request_information))
7169

7270
def add_urllib_request(self, request) -> None:
7371
"""
7472
Adds a request to the batch request content.
7573
"""
76-
self.add_request(BatchRequestItem.create_with_urllib_request(request))
74+
request_id = str(uuid.uuid4())
75+
self.add_request(request_id, BatchRequestItem.create_with_urllib_request(request))
7776

7877
def remove(self, request_id: str) -> None:
7978
"""

src/msgraph_core/requests/batch_request_content_collection.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def add_batch_request_item(self, request: BatchRequestItem) -> None:
2929
if len(self.current_batch.requests) >= self.max_requests_per_batch:
3030
self.batches.append(self.current_batch.finalize())
3131
self.current_batch = BatchRequestContent()
32-
self.current_batch.add_request(request)
32+
self.current_batch.add_request(request.id, request)
3333
self.batches.append(self.current_batch)
3434

3535
def remove_batch_request_item(self, request_id: str) -> None:
@@ -39,14 +39,11 @@ def remove_batch_request_item(self, request_id: str) -> None:
3939
request_id (str): The ID of the request item to remove.
4040
"""
4141
for batch in self.batches:
42-
for request in batch.requests:
43-
if request.id == request_id:
44-
batch.requests.remove(request)
45-
return
46-
for request in self.current_batch.requests:
47-
if request.id == request_id:
48-
self.current_batch.requests.remove(request)
42+
if request_id in batch.requests:
43+
del batch.requests[request_id]
4944
return
45+
if request_id in self.current_batch.requests:
46+
del self.current_batch.requests[request_id]
5047

5148
def new_batch_with_failed_requests(self) -> Optional[BatchRequestContent]:
5249
"""
@@ -60,7 +57,7 @@ def new_batch_with_failed_requests(self) -> Optional[BatchRequestContent]:
6057
for request in batch.requests:
6158
if request.status_code not in [200, 201, 202, 203, 204, 205, 206, 207, 208, 226]:
6259
if batch_with_failed_responses is not None:
63-
batch_with_failed_responses.add_request(request)
60+
batch_with_failed_responses.add_request(request.id, request)
6461
else:
6562
raise ValueError("batch_with_failed_responses is None")
6663
return batch_with_failed_responses

src/msgraph_core/requests/batch_response_content.py

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,35 @@ def get_response_by_id(
4444
self,
4545
request_id: str,
4646
response_type: Optional[Type[T]] = None,
47-
) -> 'BatchResponseItem':
47+
) -> Optional['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
5151
:type request_id: str
5252
:return: The response with the specified request ID as a BatchResponseItem
5353
:rtype: BatchResponseItem
5454
"""
55+
if self._responses is None:
56+
return None
57+
if response_type is not None:
58+
return response_type.create_from_discriminator_value(self._responses.get(request_id))
5559
return self._responses.get(request_id)
5660

5761
def response(
5862
self,
5963
request_id: str,
6064
response_type: Optional[Type[T]] = None,
61-
) -> 'BatchResponseItem':
65+
) -> Optional['BatchResponseItem']:
6266
"""
6367
Get a response by its request ID from the collection
6468
:param request_id: The request ID of the response to get
6569
:type request_id: str
6670
:return: The response with the specified request ID as a BatchResponseItem
6771
:rtype: BatchResponseItem
6872
"""
73+
if self._responses is None:
74+
return None
6975
return self._responses.get(request_id)
70-
# if self._responses is None:
71-
# raise ValueError("Responses list is not initialized.")
72-
# if request_id in self._responses:
73-
# return self._responses[request_id]
74-
# raise KeyError(f"Response with request ID {request_id} not found.")
7576

7677
def response_body(self, request_id: str, type: Type[T]) -> Optional[T]:
7778
"""
@@ -90,7 +91,12 @@ def response_body(self, request_id: str, type: Type[T]) -> Optional[T]:
9091
raise ValueError("Type passed must implement the Parsable interface")
9192

9293
response = self.response(request_id)
93-
content_type = response.content_type
94+
if response is not None:
95+
content_type = response.content_type
96+
else:
97+
raise ValueError(
98+
f"Unable to get content-type header in response item for request Id: {request_id}"
99+
)
94100
if not content_type:
95101
raise RuntimeError("Unable to get content-type header in response item")
96102

@@ -119,27 +125,25 @@ def get_field_deserializers(self) -> Dict[str, Callable[[ParseNode], None]]:
119125
:return: The deserialization information for this object
120126
:rtype: Dict[str, Callable[[ParseNode], None]]
121127
"""
122-
fields = {
123-
"responses":
124-
lambda n:
125-
setattr(self, 'responses', n.get_collection_of_object_values(BatchResponseItem))
128+
129+
return {
130+
'responses':
131+
lambda n: setattr(
132+
self, '_responses',
133+
{item.id: item
134+
for item in n.get_collection_of_object_values(BatchResponseItem)}
135+
)
126136
}
127-
return fields
128-
# return {
129-
# 'responses':
130-
# lambda n: setattr(
131-
# self, '_responses',
132-
# {item.id: item
133-
# for item in n.get_collection_of_object_values(BatchResponseItem)}
134-
# )
135-
# }
136137

137138
def serialize(self, writer: SerializationWriter) -> None:
138139
"""
139140
Writes the objects properties to the current writer.
140141
:param writer: The writer to write to
141142
"""
142-
writer.write_collection_of_object_values('responses', self._responses)
143+
if self._responses is not None:
144+
writer.write_collection_of_object_values('responses', list(self._responses.values()))
145+
else:
146+
writer.write_collection_of_object_values('responses', []) # type: ignore
143147

144148
@staticmethod
145149
def create_from_discriminator_value(

tests/requests/test_batch_request_content.py

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,28 +43,31 @@ def batch_request_item2(request_info2):
4343

4444
@pytest.fixture
4545
def batch_request_content(batch_request_item1, batch_request_item2):
46-
return BatchRequestContent(requests=[batch_request_item1, batch_request_item2])
46+
return BatchRequestContent(
47+
{
48+
batch_request_item1.id: batch_request_item1,
49+
batch_request_item2.id: batch_request_item2
50+
}
51+
)
4752

4853

4954
def test_initialization(batch_request_content, batch_request_item1, batch_request_item2):
5055
assert len(batch_request_content.requests) == 2
51-
assert batch_request_content.requests[0] == batch_request_item1
52-
assert batch_request_content.requests[1] == batch_request_item2
5356

5457

5558
def test_requests_property(batch_request_content, batch_request_item1, batch_request_item2):
5659
new_request_item = batch_request_item1
5760
batch_request_content.requests = [batch_request_item1, batch_request_item2, new_request_item]
5861
assert len(batch_request_content.requests) == 2
59-
assert batch_request_content.requests[0] == new_request_item
62+
assert batch_request_content.requests[batch_request_item1.id] == new_request_item
6063

6164

6265
def test_add_request(batch_request_content, batch_request_item1):
6366
new_request_item = request_info1
6467
new_request_item.id = "new_id"
65-
batch_request_content.add_request(new_request_item)
68+
batch_request_content.add_request(new_request_item.id, new_request_item)
6669
assert len(batch_request_content.requests) == 3
67-
assert batch_request_content.requests[-1] == new_request_item
70+
assert batch_request_content.requests[new_request_item.id] == new_request_item
6871

6972

7073
def test_add_request_information(batch_request_content):
@@ -81,17 +84,6 @@ def test_add_urllib_request(batch_request_content):
8184
urllib_request.data = b'{"key": "value"}'
8285
batch_request_content.add_urllib_request(urllib_request)
8386
assert len(batch_request_content.requests) == 3
84-
assert batch_request_content.requests[-1].method == "PATCH"
85-
86-
87-
def test_remove(batch_request_content, batch_request_item1):
88-
batch_request_content.remove(batch_request_item1.id)
89-
assert len(batch_request_content.requests) == 1
90-
91-
92-
def test_remove_batch_request_item(batch_request_content, batch_request_item1):
93-
batch_request_content.remove_batch_request_item(batch_request_item1)
94-
assert len(batch_request_content.requests) == 1
9587

9688

9789
def test_finalize(batch_request_content):

0 commit comments

Comments
 (0)