openapi-generators / openapi-generators/openapi-python-client
Urllib error when trying to use list inside a form-data
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 2k
- Forks
- 293
- Merge moyen
- 34 min
- PR mergées (30 j)
- 1
Description
Describe the bug
I have an API that accepts a JSON list inside form-data, so the request is expected to look like this:
input=[{...}, {...}]
However, when I pass the list to the generated client, the request fails with the following error.
Could you please take a look and let me know what might be going wrong here?
from openapi_client import ApiClient, Configuration, DefaultApi, SubmitPostRequestInput, SubmitItem
config = Configuration()
config.host = "https://api.example.com"
api_client = ApiClient(configuration=config)
api_instance = DefaultApi(api_client)
request_input = SubmitPostRequestInput(
[
SubmitItem(flag1=True, flag2=False),
SubmitItem(flag1=False, flag2=True)
]
)
api_instance.submit_post(input=request_input, inlcude_ses=True)
With the generated client and the code above I am getting the following error
File c:\Users\1592\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\_request_methods.py:264, in RequestMethods.request_encode_body(self, method, url, fields, headers, encode_multipart, multipart_boundary, **urlopen_kw)
259 raise TypeError(
260 "request got values for both 'fields' and 'body', can only specify one."
261 )
263 if encode_multipart:
--> [264](file:///C:/Users/1592/AppData/Local/Programs/Python/Python311/Lib/site-packages/urllib3/_request_methods.py:264) body, content_type = encode_multipart_formdata(
265 fields, boundary=multipart_boundary
266 )
267 else:
268 body, content_type = (
269 urlencode(fields), # type: ignore[arg-type]
270 "application/x-www-form-urlencoded",
271 )
File c:\Users\1592\AppData\Local\Programs\Python\Python311\Lib\site-packages\urllib3\filepost.py:[81](file:///C:/Users/1592/AppData/Local/Programs/Python/Python311/Lib/site-packages/urllib3/filepost.py:81), in encode_multipart_formdata(fields, boundary)
79 writer(body).write(data)
80 else:
---> 81 body.write(data)
83 body.write(b"\r\n")
85 body.write(f"--{boundary}--\r\n".encode("latin-1"))
TypeError: a bytes-like object is required, not 'list'
Please use the below spec file and above sample snippet to reproduce the issue
OpenAPI Spec File
openapi: 3.0.3
info:
title: Simple Form Data API
version: 1.0.0
paths:
/submit:
post:
summary: Submit form data with flags
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
properties:
input:
oneOf:
- $ref: '#/components/schemas/SubmitItem'
- type: array
items:
$ref: '#/components/schemas/SubmitItem'
inlcude_ses:
type: boolean
responses:
'200':
description: Successful submission
components:
schemas:
SubmitItem:
type: object
properties:
flag1:
type: boolean
flag2:
type: boolean
Desktop (please complete the following information):
- OS: windows
- Python Version: 3.11
- openapi-generator version - 7.20.0-SNAPSHOT (Docker)
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Reproduisez l’échec avec la spécification OpenAPI et l’exemple fournis en utilisant ApiClient et DefaultApi.submit_post, en vous concentrant sur SubmitPostRequestInput et la gestion de multipart/form-data. Suivez la sérialisation de la requête générée jusqu’à urllib3, puis vérifiez qu’une liste de valeurs SubmitItem est acceptée sans le TypeError bytes-like-object.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- python
- Domaine
- api
- Type d'issue
- Bug
- Difficulté
- 3/5
- Temps estimé
- 1-2 jours
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 52/100