Index: third_party/google-endpoints/urllib3/filepost.py |
diff --git a/third_party/google-endpoints/urllib3/filepost.py b/third_party/google-endpoints/urllib3/filepost.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cd11cee4644711d7ede77e5c01974f45015b5746 |
--- /dev/null |
+++ b/third_party/google-endpoints/urllib3/filepost.py |
@@ -0,0 +1,94 @@ |
+from __future__ import absolute_import |
+import codecs |
+ |
+from uuid import uuid4 |
+from io import BytesIO |
+ |
+from .packages import six |
+from .packages.six import b |
+from .fields import RequestField |
+ |
+writer = codecs.lookup('utf-8')[3] |
+ |
+ |
+def choose_boundary(): |
+ """ |
+ Our embarrassingly-simple replacement for mimetools.choose_boundary. |
+ """ |
+ return uuid4().hex |
+ |
+ |
+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): |
+ """ |
+ .. deprecated:: 1.6 |
+ |
+ Iterate over fields. |
+ |
+ The addition of :class:`~urllib3.fields.RequestField` makes this function |
+ obsolete. Instead, use :func:`iter_field_objects`, which returns |
+ :class:`~urllib3.fields.RequestField` objects. |
+ |
+ Supports list of (k, v) tuples and dicts. |
+ """ |
+ if isinstance(fields, dict): |
+ return ((k, v) for k, v in six.iteritems(fields)) |
+ |
+ return ((k, v) for k, v in fields) |
+ |
+ |
+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, :class:`~urllib3.fields.RequestField`). |
+ |
+ :param boundary: |
+ If not specified, then a random boundary will be generated using |
+ :func:`mimetools.choose_boundary`. |
+ """ |
+ body = BytesIO() |
+ if boundary is None: |
+ boundary = choose_boundary() |
+ |
+ for field in iter_field_objects(fields): |
+ body.write(b('--%s\r\n' % (boundary))) |
+ |
+ writer(body).write(field.render_headers()) |
+ data = field.data |
+ |
+ if isinstance(data, int): |
+ data = str(data) # Backwards compatibility |
+ |
+ if isinstance(data, six.text_type): |
+ writer(body).write(data) |
+ else: |
+ body.write(data) |
+ |
+ body.write(b'\r\n') |
+ |
+ body.write(b('--%s--\r\n' % (boundary))) |
+ |
+ content_type = str('multipart/form-data; boundary=%s' % boundary) |
+ |
+ return body.getvalue(), content_type |