Mercurial > repos > shellac > guppy_basecaller
comparison env/lib/python3.7/site-packages/urllib3/filepost.py @ 0:26e78fe6e8c4 draft
"planemo upload commit c699937486c35866861690329de38ec1a5d9f783"
| author | shellac |
|---|---|
| date | Sat, 02 May 2020 07:14:21 -0400 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:26e78fe6e8c4 |
|---|---|
| 1 from __future__ import absolute_import | |
| 2 import binascii | |
| 3 import codecs | |
| 4 import os | |
| 5 | |
| 6 from io import BytesIO | |
| 7 | |
| 8 from .packages import six | |
| 9 from .packages.six import b | |
| 10 from .fields import RequestField | |
| 11 | |
| 12 writer = codecs.lookup("utf-8")[3] | |
| 13 | |
| 14 | |
| 15 def 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 boundary | |
| 23 | |
| 24 | |
| 25 def iter_field_objects(fields): | |
| 26 """ | |
| 27 Iterate over fields. | |
| 28 | |
| 29 Supports list of (k, v) tuples and dicts, and lists of | |
| 30 :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 field | |
| 41 else: | |
| 42 yield RequestField.from_tuples(*field) | |
| 43 | |
| 44 | |
| 45 def iter_fields(fields): | |
| 46 """ | |
| 47 .. deprecated:: 1.6 | |
| 48 | |
| 49 Iterate over fields. | |
| 50 | |
| 51 The addition of :class:`~urllib3.fields.RequestField` makes this function | |
| 52 obsolete. Instead, use :func:`iter_field_objects`, which returns | |
| 53 :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 | |
| 63 def 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 using | |
| 72 :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.data | |
| 83 | |
| 84 if isinstance(data, int): | |
| 85 data = str(data) # Backwards compatibility | |
| 86 | |
| 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_type |
