Fix multipart encoding of nested parameters #550
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
r? @brandur-stripe @remi-stripe
cc @stripe/api-libraries
This one was a bit tricky. stripe-python rolls its own multipart encoder, which only supported two types of values: file-like (i.e. an object that has a
read
attribute) or strings. All other types caused an exception to be raised.So there were actually two different issues to fix:
The first issue was easily solved by calling
api_requestor._api_encode()
inMultipartDataGenerator
to flatten the parameters.To solve the second issue, I changedutil.utf_8()
to stringify all non-file-like values. This could potentially have side effects for regular form-encoding, but I'm fairly sure that's not the case: form-encoding works by passing the dictionary of flattened params tourlencode
which would stringify non-string values anyway.The second issue is solved by stringifying non-file-like values before adding them to the multipart buffer.