Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
hhhrrrttt222111
GitHub Repository: hhhrrrttt222111/Dorkify
Path: blob/master/venv/Lib/site-packages/urllib3/filepost.py
811 views
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
99
100