openapi-generators / openapi-generators/openapi-python-client

Urllib error when trying to use list inside a form-data

Aperta
#1,394 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Python
Stelle
2k
Fork
293
Merge medio
34m
PR unite (30g)
1

Descrizione

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)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riproduci il malfunzionamento con la specifica OpenAPI e l’esempio forniti usando ApiClient e DefaultApi.submit_post, concentrandoti su SubmitPostRequestInput e sulla gestione di multipart/form-data. Traccia la serializzazione della richiesta generata fino a urllib3, quindi verifica che un elenco di valori SubmitItem venga accettato senza il TypeError bytes-like-object.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
api
Tipo di issue
Bug
Difficoltà
3/5
Tempo stimato
1-2 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
52/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.