From: Andrew Barnert Date: Tue, 1 Oct 2013 00:07:13 +0000 (-0700) Subject: Accept per-file headers in multipart file POST messages. X-Git-Tag: v2.0.1~13^2~10^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=af4fb8cedca7c331b8c914a40c477a2cb02055e1;p=services%2Fpython-requests.git Accept per-file headers in multipart file POST messages. - Each file in the `files` argument can now be a 4-tuple, instead of just a file, 2-tuple, or 3-tuple. If it is, the last value in the tuple is a dictionary of extra headers. --- diff --git a/requests/models.py b/requests/models.py index 8fd9735..cb0ee33 100644 --- a/requests/models.py +++ b/requests/models.py @@ -17,6 +17,7 @@ from .structures import CaseInsensitiveDict from .auth import HTTPBasicAuth from .cookies import cookiejar_from_dict, get_cookie_header +from .packages.urllib3.fields import RequestField from .packages.urllib3.filepost import encode_multipart_formdata from .packages.urllib3.util import parse_url from .exceptions import ( @@ -119,11 +120,14 @@ class RequestEncodingMixin(object): for (k, v) in files: # support for explicit filename ft = None + fh = None if isinstance(v, (tuple, list)): if len(v) == 2: fn, fp = v - else: + elif len(v) == 3: fn, fp, ft = v + else: + fn, fp, ft, fh = v else: fn = guess_filename(v) or k fp = v @@ -132,11 +136,10 @@ class RequestEncodingMixin(object): if isinstance(fp, bytes): fp = BytesIO(fp) - if ft: - new_v = (fn, fp.read(), ft) - else: - new_v = (fn, fp.read()) - new_fields.append((k, new_v)) + rf = RequestField(name=k, data=fp.read(), + filename=fn, headers=fh) + rf.make_multipart(content_type=ft) + new_fields.append(rf) body, content_type = encode_multipart_formdata(new_fields)