Skip to content

Commit 168d61f

Browse files
Fix multi part request
1 parent 980e55e commit 168d61f

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

symphony/bdk/gen/api_client.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import mimetypes
2222
import os
2323
import re
24+
25+
from urllib3.fields import RequestField
2426
import tempfile
2527

2628
from urllib.parse import quote
@@ -216,6 +218,9 @@ def param_serialize(
216218
)
217219
if files:
218220
post_params.extend(self.files_parameters(files))
221+
if header_params['Content-Type'].startswith("multipart"):
222+
post_params = self.parameters_to_multipart(post_params,
223+
(dict))
219224

220225
# auth setting
221226
self.update_params_for_auth(
@@ -286,6 +291,28 @@ async def call_api(
286291

287292
return response_data
288293

294+
def parameters_to_multipart(self, params, collection_types):
295+
"""Get parameters as list of tuples, formatting as json if value is collection_types
296+
297+
:param params: Parameters as list of two-tuples
298+
:param dict collection_types: Parameter collection types
299+
:return: Parameters as list of tuple or urllib3.fields.RequestField
300+
"""
301+
new_params = []
302+
if collection_types is None:
303+
collection_types = (dict)
304+
for k, v in params.items() if isinstance(params, dict) else params: # noqa: E501
305+
if isinstance(v, collection_types): # v is instance of collection_type, formatting as application/json
306+
v = json.dumps(v, ensure_ascii=False).encode("utf-8")
307+
field = RequestField(k, v)
308+
field.make_multipart(content_type="application/json; charset=utf-8")
309+
new_params.append(field)
310+
elif isinstance(v, str):
311+
params.append((k, (v, "text/plain; charset=utf-8")))
312+
else:
313+
new_params.append((k, v))
314+
return new_params
315+
289316
def response_deserialize(
290317
self,
291318
response_data: rest.RESTResponse,

symphony/bdk/gen/rest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ async def request(
183183
filename=v[0],
184184
content_type=v[2]
185185
)
186+
elif isinstance(v, tuple) and len(v) == 2:
187+
# needed because of multipart form data payload while sending messages with attachment
188+
data.add_field(k, v[0], content_type=v[1])
186189
else:
187190
data.add_field(k, v)
188191
args["data"] = data

0 commit comments

Comments
 (0)