diff --git a/examples/file1.txt b/examples/file1.txt new file mode 100644 index 0000000..e69de29 diff --git a/examples/file_upload.py b/examples/file_upload.py new file mode 100644 index 0000000..0f3fb3e --- /dev/null +++ b/examples/file_upload.py @@ -0,0 +1,20 @@ +import uplink + + +class HttpBin(uplink.Consumer): + @uplink.multipart + @uplink.post("post") + def post(self, attachments: uplink.PartMap): + pass + + +client = HttpBin(base_url="https://httpbin.org/") + + +print( + client.post( + attachments={ + "file1.txt": [open("file1.txt", "rb"), open("file1.txt", "rb")] + } + ) +) diff --git a/uplink/arguments.py b/uplink/arguments.py index b38e6b3..c86a26d 100644 --- a/uplink/arguments.py +++ b/uplink/arguments.py @@ -604,7 +604,9 @@ def converter_key(self): def _modify_request(self, request_builder, value): """Updates the request body with the form part.""" - request_builder.info["files"][self.name] = value + if "files" not in request_builder.info: + request_builder.info["files"] = [] + request_builder.info["files"].append((self.name, value)) class PartMap(TypedArgument): @@ -628,9 +630,12 @@ def converter_key(self): """Converts each part to the request body.""" return keys.Map(keys.CONVERT_TO_REQUEST_BODY) - def _modify_request(self, request_builder, value): + def _modify_request(self, request_builder, filemap): """Updates request body to with the form parts.""" - request_builder.info["files"].update(value) + if "files" not in request_builder.info: + request_builder.info["files"] = [] + for key in filemap: + request_builder.info["files"].append((key, filemap[key])) class Body(TypedArgument):