Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added examples/file1.txt
Empty file.
20 changes: 20 additions & 0 deletions examples/file_upload.py
Original file line number Diff line number Diff line change
@@ -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")]
}
)
)
11 changes: 8 additions & 3 deletions uplink/arguments.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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):
Expand Down