| 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
|
|
|