Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
filepost.py99 linesDownload Raw Back to urllib3
1from __future__ import absolute_import2 3import binascii4import codecs5import os6from io import BytesIO7 8from .fields import RequestField9from .packages import six10from .packages.six import b11 12writer = codecs.lookup("utf-8")[3]13 14 15def choose_boundary():16    """17    Our embarrassingly-simple replacement for mimetools.choose_boundary.18    """19    boundary = binascii.hexlify(os.urandom(16))20    if not six.PY2:21        boundary = boundary.decode("ascii")22    return boundary23 24 25def iter_field_objects(fields):26    """27    Iterate over fields.28 29    Supports list of (k, v) tuples and dicts, and lists of30    :class:`~urllib3.fields.RequestField`.31 32    """33    if isinstance(fields, dict):34        i = six.iteritems(fields)35    else:36        i = iter(fields)37 38    for field in i:39        if isinstance(field, RequestField):40            yield field41        else:42            yield RequestField.from_tuples(*field)43 44 45def iter_fields(fields):46    """47    .. deprecated:: 1.648 49    Iterate over fields.50 51    The addition of :class:`~urllib3.fields.RequestField` makes this function52    obsolete. Instead, use :func:`iter_field_objects`, which returns53    :class:`~urllib3.fields.RequestField` objects.54 55    Supports list of (k, v) tuples and dicts.56    """57    if isinstance(fields, dict):58        return ((k, v) for k, v in six.iteritems(fields))59 60    return ((k, v) for k, v in fields)61 62 63def encode_multipart_formdata(fields, boundary=None):64    """65    Encode a dictionary of ``fields`` using the multipart/form-data MIME format.66 67    :param fields:68        Dictionary of fields or list of (key, :class:`~urllib3.fields.RequestField`).69 70    :param boundary:71        If not specified, then a random boundary will be generated using72        :func:`urllib3.filepost.choose_boundary`.73    """74    body = BytesIO()75    if boundary is None:76        boundary = choose_boundary()77 78    for field in iter_field_objects(fields):79        body.write(b("--%s\r\n" % (boundary)))80 81        writer(body).write(field.render_headers())82        data = field.data83 84        if isinstance(data, int):85            data = str(data)  # Backwards compatibility86 87        if isinstance(data, six.text_type):88            writer(body).write(data)89        else:90            body.write(data)91 92        body.write(b"\r\n")93 94    body.write(b("--%s--\r\n" % (boundary)))95 96    content_type = str("multipart/form-data; boundary=%s" % boundary)97 98    return body.getvalue(), content_type99 
codekingpro/portable-devtools · Team Ai