Skip to content

Commit 8a5cb56

Browse files
committed
fix(fetch): serialize numbers and booleans in dictionary multipart data
1 parent b92f282 commit 8a5cb56

3 files changed

Lines changed: 21 additions & 18 deletions

File tree

‎playwright/_impl/_fetch.py‎

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -417,24 +417,15 @@ async def _inner_fetch(
417417
form_data = object_to_array(form)
418418
elif multipart:
419419
multipart_data = []
420-
if isinstance(multipart, FormData):
421-
for fd_name, fd_value in multipart._fields:
422-
multipart_data.append(
423-
await _form_data_field_to_form_field(fd_name, fd_value)
424-
)
425-
else:
426-
# Convert file-like values to ServerFilePayload structs.
427-
for name, value in multipart.items():
428-
if is_file_payload(value):
429-
payload = cast(FilePayload, value)
430-
assert isinstance(
431-
payload["buffer"], bytes
432-
), f"Unexpected buffer type of 'data.{name}'"
433-
multipart_data.append(
434-
FormField(name=name, file=file_payload_to_json(payload))
435-
)
436-
elif isinstance(value, str):
437-
multipart_data.append(FormField(name=name, value=value))
420+
fields = (
421+
multipart._fields
422+
if isinstance(multipart, FormData)
423+
else multipart.items()
424+
)
425+
for name, value in fields:
426+
multipart_data.append(
427+
await _form_data_field_to_form_field(name, value)
428+
)
438429
if (
439430
post_data_buffer is None
440431
and json_data is None

‎tests/async/test_fetch_browser_context.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ async def test_should_support_multipart_form_data(
345345
multipart={
346346
"firstName": "John",
347347
"lastName": "Doe",
348+
"age": 30,
349+
"score": 42.5,
350+
"active": True,
348351
"file": file,
349352
},
350353
),
@@ -358,6 +361,9 @@ async def test_should_support_multipart_form_data(
358361
)
359362
assert request.args[b"firstName"] == [b"John"]
360363
assert request.args[b"lastName"] == [b"Doe"]
364+
assert request.args[b"age"] == [b"30"]
365+
assert request.args[b"score"] == [b"42.5"]
366+
assert request.args[b"active"] == [b"True"]
361367
assert request.args[b"file"][0] == file["buffer"]
362368

363369

‎tests/sync/test_fetch_browser_context.py‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,9 @@ def test_should_support_multipart_form_data(
269269
multipart={
270270
"firstName": "John",
271271
"lastName": "Doe",
272+
"age": 30,
273+
"score": 42.5,
274+
"active": True,
272275
"file": file,
273276
},
274277
)
@@ -281,6 +284,9 @@ def test_should_support_multipart_form_data(
281284
)
282285
assert server_req.value.args[b"firstName"] == [b"John"]
283286
assert server_req.value.args[b"lastName"] == [b"Doe"]
287+
assert server_req.value.args[b"age"] == [b"30"]
288+
assert server_req.value.args[b"score"] == [b"42.5"]
289+
assert server_req.value.args[b"active"] == [b"True"]
284290
assert server_req.value.args[b"file"][0] == file["buffer"]
285291

286292

0 commit comments

Comments
 (0)