Skip to content

Multipart content types#2167

Open
rienafairefr wants to merge 5 commits intoOpenAPITools:masterfrom
rienafairefr:multipart-content-types
Open

Multipart content types#2167
rienafairefr wants to merge 5 commits intoOpenAPITools:masterfrom
rienafairefr:multipart-content-types

Conversation

@rienafairefr
Copy link
Copy Markdown
Contributor

@rienafairefr rienafairefr commented Feb 15, 2019

PR checklist

  • Read the contribution guidelines.
  • Ran the shell script under ./bin/ to update Petstore sample so that CIs can verify the change. (For instance, only need to run ./bin/{LANG}-petstore.sh, ./bin/openapi3/{LANG}-petstore.sh, ./bin/security/{LANG}-petstore.sh and ./bin/openapi3/security/{LANG}-petstore.sh if updating the {LANG} (e.g. php, ruby, python, etc) code generator or {LANG} client's mustache templates). Windows batch files can be found in .\bin\windows\.
  • Filed the PR against the correct branch: master, 3.4.x, 4.0.x. Default: master.
  • Copied the technical committee to review the pull request if your PR is targeting a particular programming language.
    @wing328 @kenjones-cisco @tomplus @Jyhess

Description of the PR

as described in #2165, the client doesnt handle well sending mixed-type multipart.

This PR adds support for the OAS3 encoding field that can be found in the requestbody in the case of a multipart type:
spect here, which is used to described the content type and headers of each multipart part (sic).

There is a possibility of multipart header parameters, because each multipart field can be added a headers property that can be varied by the caller, so I've added a multipartHeaderParams field that can be used for that.

I've implemented all this logic in the Python client. In the case of a multipart operation, instead of post_params being a list of simple (name, value) tuples, we can make complex cases by using urllib3 RequestField directly

field = RequestField(name, value, headers=headers)
field.make_multipart(headers.get('Content-Disposition'),
                                 content_type,
                                 headers.get('Content-Location'))

I don't have an API that necessitates the variable header thing, but the mixed Content-Type are working fine. When using parameters that are file, there still a bug the files are uploaded as string like
<filename>,b'<binary-data>', but it's related to previously reported issue #2118

@rienafairefr rienafairefr force-pushed the multipart-content-types branch 2 times, most recently from edf04cd to 77278fe Compare February 18, 2019 16:26
@wing328 wing328 closed this Mar 31, 2019
@wing328 wing328 reopened this Mar 31, 2019
@rienafairefr rienafairefr force-pushed the multipart-content-types branch from 6dbda0b to 140aff4 Compare April 2, 2019 12:16
@rienafairefr rienafairefr force-pushed the multipart-content-types branch 2 times, most recently from 8a8af2a to 4cf1fd2 Compare June 7, 2019 09:45
rienafairefr added 2 commits June 7, 2019 12:37
test case for OAS3 multipart/ mixed request bodies
@rienafairefr rienafairefr force-pushed the multipart-content-types branch from 4cf1fd2 to 86f0a96 Compare June 7, 2019 10:39
@rienafairefr rienafairefr force-pushed the multipart-content-types branch from 86f0a96 to 99ba1b6 Compare June 7, 2019 11:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants