From af4fb8cedca7c331b8c914a40c477a2cb02055e1 Mon Sep 17 00:00:00 2001 From: Andrew Barnert Date: Mon, 30 Sep 2013 17:07:13 -0700 Subject: [PATCH] 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. --- requests/models.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) 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) -- 2.34.1