Index: third_party/requests/packages/urllib3/filepost.py |
diff --git a/third_party/requests/packages/urllib3/filepost.py b/third_party/requests/packages/urllib3/filepost.py |
index 470309a0066e6ace43d0730fe4a76e7d67a4c538..4575582e91c57b7f0a194020effd48747d471cd6 100644 |
--- a/third_party/requests/packages/urllib3/filepost.py |
+++ b/third_party/requests/packages/urllib3/filepost.py |
@@ -1,5 +1,5 @@ |
# urllib3/filepost.py |
-# Copyright 2008-2012 Andrey Petrov and contributors (see CONTRIBUTORS.txt) |
+# Copyright 2008-2013 Andrey Petrov and contributors (see CONTRIBUTORS.txt) |
# |
# This module is part of urllib3 and is released under |
# the MIT License: http://www.opensource.org/licenses/mit-license.php |
@@ -12,6 +12,7 @@ from io import BytesIO |
from .packages import six |
from .packages.six import b |
+from .fields import RequestField |
writer = codecs.lookup('utf-8')[3] |
@@ -23,15 +24,38 @@ def choose_boundary(): |
return uuid4().hex |
-def get_content_type(filename): |
- return mimetypes.guess_type(filename)[0] or 'application/octet-stream' |
+def iter_field_objects(fields): |
+ """ |
+ Iterate over fields. |
+ |
+ Supports list of (k, v) tuples and dicts, and lists of |
+ :class:`~urllib3.fields.RequestField`. |
+ |
+ """ |
+ if isinstance(fields, dict): |
+ i = six.iteritems(fields) |
+ else: |
+ i = iter(fields) |
+ |
+ for field in i: |
+ if isinstance(field, RequestField): |
+ yield field |
+ else: |
+ yield RequestField.from_tuples(*field) |
def iter_fields(fields): |
""" |
Iterate over fields. |
+ .. deprecated :: |
+ |
+ The addition of `~urllib3.fields.RequestField` makes this function |
+ obsolete. Instead, use :func:`iter_field_objects`, which returns |
+ `~urllib3.fields.RequestField` objects, instead. |
+ |
Supports list of (k, v) tuples and dicts. |
+ |
""" |
if isinstance(fields, dict): |
return ((k, v) for k, v in six.iteritems(fields)) |
@@ -44,15 +68,7 @@ def encode_multipart_formdata(fields, boundary=None): |
Encode a dictionary of ``fields`` using the multipart/form-data MIME format. |
:param fields: |
- Dictionary of fields or list of (key, value) or (key, value, MIME type) |
- field tuples. The key is treated as the field name, and the value as |
- the body of the form-data bytes. If the value is a tuple of two |
- elements, then the first element is treated as the filename of the |
- form-data section and a suitable MIME type is guessed based on the |
- filename. If the value is a tuple of three elements, then the third |
- element is treated as an explicit MIME type of the form-data section. |
- |
- Field names and filenames must be unicode. |
+ Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`). |
:param boundary: |
If not specified, then a random boundary will be generated using |
@@ -62,24 +78,11 @@ def encode_multipart_formdata(fields, boundary=None): |
if boundary is None: |
boundary = choose_boundary() |
- for fieldname, value in iter_fields(fields): |
+ for field in iter_field_objects(fields): |
body.write(b('--%s\r\n' % (boundary))) |
- if isinstance(value, tuple): |
- if len(value) == 3: |
- filename, data, content_type = value |
- else: |
- filename, data = value |
- content_type = get_content_type(filename) |
- writer(body).write('Content-Disposition: form-data; name="%s"; ' |
- 'filename="%s"\r\n' % (fieldname, filename)) |
- body.write(b('Content-Type: %s\r\n\r\n' % |
- (content_type,))) |
- else: |
- data = value |
- writer(body).write('Content-Disposition: form-data; name="%s"\r\n' |
- % (fieldname)) |
- body.write(b'\r\n') |
+ writer(body).write(field.render_headers()) |
+ data = field.data |
if isinstance(data, int): |
data = str(data) # Backwards compatibility |