Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def multipart (self, fields):
- boundary = uuid4().hex
- blen = len(boundary)
- tlen = 0 # Length of the entire body
- w = lambda s, *d: s.write("".join(d))
- pre, mid, post = stringio(None), [], stringio(None)
- for key, value in fields.items():
- if hasattr(value, "read"): continue # First iteration: fields
- w(pre, "--", boundary, "\r\n")
- w(pre, "Content-Disposition: form-data; ")
- w(pre, 'name="', key, '"\r\n\r\n', value)
- tlen += 47 + blen + len(key) + len(value)
- for key, fd in fields.items():
- if not hasattr(fd, "read"): continue # Second iteration: streams
- name = getattr(fd, "name", key)
- ct = filetypes[name] or "application/octet-stream"
- wf = stringio(None)
- w(wf, "--", boundary, "\r\n")
- w(wf, "Content-Disposition: form-data; ")
- w(wf, 'name="', key, '"; filename="', name, '"\r\n')
- w(wf, "Content-Type: ", ct, "\r\n\r\n")
- mid.append(wf)
- mid.append(fd)
- tlen += 76 + blen + len(ct) + len(key) + len(name)
- tlen += fstat(fd.fileno()).st_size
- w(post, "--", boundary, "--\r\n\r\n")
- tlen += 8 + blen
- mid.append(post)
- c = iochain(None, pre, *mid)
- ct = "multipart/form-data; boundary=" + boundary
- return c, {"Content-Type": ct, "Content-Length": tlen}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement