Skip to content

Commit 7b5ad11

Browse files
authored
Merge pull request #959 from carterm-hdc/fix-batch-item-serialize
fix: BatchRequestItem now properly serializes the header and body fields
1 parent 3851f74 commit 7b5ad11

File tree

3 files changed

+31
-13
lines changed

3 files changed

+31
-13
lines changed

requirements-dev.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ microsoft-kiota-authentication-azure==1.9.3
151151

152152
microsoft-kiota-http==1.9.3
153153

154+
microsoft-kiota-serialization-json==1.9.3
155+
154156
multidict==6.5.1 ; python_version >= '3.7'
155157

156158
uritemplate==4.2.0 ; python_version >= '3.6'

src/msgraph_core/requests/batch_request_item.py

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -258,19 +258,16 @@ def serialize(self, writer: SerializationWriter) -> None:
258258
writer.write_str_value('method', self.method)
259259
writer.write_str_value('url', self.url)
260260
writer.write_collection_of_primitive_values('depends_on', self._depends_on)
261-
writer.write_collection_of_object_values(
262-
'headers',
263-
self._headers # type: ignore # need method to serialize dicts
261+
writer.write_additional_data_value(
262+
{'headers': self._headers} # need proper method to serialize dicts
264263
)
265264
if self._body:
266265
json_object = json.loads(self._body)
267266
is_json_string = json_object and isinstance(json_object, dict)
268267
# /$batch API expects JSON object or base 64 encoded value for the body
269268
if is_json_string:
270-
writer.write_collection_of_object_values( # type: ignore
271-
# need method to serialize dicts
272-
'body',
273-
json_object
269+
writer.write_additional_data_value(
270+
{'body': json_object} # need proper method to serialize dicts
274271
)
275272
else:
276273
writer.write_str_value('body', base64.b64encode(self._body).decode('utf-8'))

tests/requests/test_batch_request_item.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,40 @@
11
import pytest
2+
import json
23
from io import BytesIO
4+
from unittest.mock import Mock
35
from urllib.request import Request
46
from kiota_abstractions.request_information import RequestInformation
7+
from kiota_abstractions.serialization.serialization_writer import SerializationWriter
58
from kiota_abstractions.method import Method
69
from kiota_abstractions.headers_collection import HeadersCollection as RequestHeaders
10+
from kiota_serialization_json.json_serialization_writer_factory import JsonSerializationWriterFactory
711
from msgraph_core.requests.batch_request_item import BatchRequestItem
812

913
base_url = "https://graph.microsoft.com/v1.0/me"
1014

1115

1216
@pytest.fixture
1317
def request_info():
14-
request_info = RequestInformation()
18+
request_info = RequestInformation()
1519
request_info.http_method = "GET"
16-
request_info.url = "f{base_url}/me"
20+
request_info.url = base_url
1721
request_info.headers = RequestHeaders()
18-
request_info.content = BytesIO(b'{"key": "value"}')
22+
request_info.headers.add("Content-Type", "application/json")
23+
request_info.content = b'{"key": "value"}'
1924
return request_info
2025

2126

2227
@pytest.fixture
2328
def batch_request_item(request_info):
24-
return BatchRequestItem(request_information=request_info)
29+
return BatchRequestItem(request_information=request_info, id="123")
2530

2631

2732
def test_initialization(batch_request_item, request_info):
33+
assert batch_request_item.id == "123"
2834
assert batch_request_item.method == "GET"
29-
assert batch_request_item.url == "f{base_url}/me"
30-
assert batch_request_item.body.read() == b'{"key": "value"}'
35+
assert batch_request_item.url == base_url
36+
assert batch_request_item.headers == {"content-type": "application/json"}
37+
assert batch_request_item.body == b'{"key": "value"}'
3138

3239

3340
def test_create_with_urllib_request():
@@ -123,3 +130,15 @@ def test_batch_request_item_method_enum():
123130
def test_depends_on_property(batch_request_item):
124131
batch_request_item.set_depends_on(["request1", "request2"])
125132
assert batch_request_item.depends_on == ["request1", "request2"]
133+
134+
135+
def test_serialize_json(batch_request_item):
136+
writer = JsonSerializationWriterFactory().get_serialization_writer('application/json')
137+
batch_request_item.serialize(writer)
138+
content = json.loads(writer.get_serialized_content())
139+
assert content["id"] == "123"
140+
assert content["method"] == "GET"
141+
assert content["url"] == base_url
142+
assert content["headers"] == {"content-type": "application/json"}
143+
assert content["body"] == {"key": "value"}
144+

0 commit comments

Comments
 (0)