FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
netdata/python.d/python_modules/urllib3/fields.py at master · beride/netdata · GitHub
beride
/
netdata
Public
forked from
netdata/netdata
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
netdata
/
python.d
/
python_modules
/
urllib3
/
fields.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
178 lines (146 loc) · 5.8 KB
Breadcrumbs
netdata
/
python.d
/
python_modules
/
urllib3
/
fields.py
Copy path
File metadata and controls
178 lines (146 loc) · 5.8 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
from
__future__
import
absolute_import
import
email
.
utils
import
mimetypes
from
.
packages
import
six
def
guess_content_type
(
filename
,
default
=
'application/octet-stream'
):
"""
Guess the "Content-Type" of a file.
:param filename:
The filename to guess the "Content-Type" of using :mod:`mimetypes`.
:param default:
If no "Content-Type" can be guessed, default to `default`.
"""
if
filename
:
return
mimetypes
.
guess_type
(
filename
)[
0
]
or
default
return
default
def
format_header_param
(
name
,
value
):
"""
Helper function to format and quote a single header parameter.
Particularly useful for header parameters which might contain
non-ASCII values, like file names. This follows RFC 2231, as
suggested by RFC 2388 Section 4.4.
:param name:
The name of the parameter, a string expected to be ASCII only.
:param value:
The value of the parameter, provided as a unicode string.
"""
if
not
any
(
ch
in
value
for
ch
in
'"
\\
\r
\n
'
):
result
=
'%s="%s"'
%
(
name
,
value
)
try
:
result
.
encode
(
'ascii'
)
except
(
UnicodeEncodeError
,
UnicodeDecodeError
):
pass
else
:
return
result
if
not
six
.
PY3
and
isinstance
(
value
,
six
.
text_type
):
# Python 2:
value
=
value
.
encode
(
'utf-8'
)
value
=
email
.
utils
.
encode_rfc2231
(
value
,
'utf-8'
)
value
=
'%s*=%s'
%
(
name
,
value
)
return
value
class
RequestField
(
object
):
"""
A data container for request body parameters.
:param name:
The name of this request field.
:param data:
The data/value body.
:param filename:
An optional filename of the request field.
:param headers:
An optional dict-like object of headers to initially use for the field.
"""
def
__init__
(
self
,
name
,
data
,
filename
=
None
,
headers
=
None
):
self
.
_name
=
name
self
.
_filename
=
filename
self
.
data
=
data
self
.
headers
=
{}
if
headers
:
self
.
headers
=
dict
(
headers
)
@
classmethod
def
from_tuples
(
cls
,
fieldname
,
value
):
"""
A :class:`~urllib3.fields.RequestField` factory from old-style tuple parameters.
Supports constructing :class:`~urllib3.fields.RequestField` from
parameter of key/value strings AND key/filetuple. A filetuple is a
(filename, data, MIME type) tuple where the MIME type is optional.
For example::
'foo': 'bar',
'fakefile': ('foofile.txt', 'contents of foofile'),
'realfile': ('barfile.txt', open('realfile').read()),
'typedfile': ('bazfile.bin', open('bazfile').read(), 'image/jpeg'),
'nonamefile': 'contents of nonamefile field',
Field names and filenames must be unicode.
"""
if
isinstance
(
value
,
tuple
):
if
len
(
value
)
==
3
:
filename
,
data
,
content_type
=
value
else
:
filename
,
data
=
value
content_type
=
guess_content_type
(
filename
)
else
:
filename
=
None
content_type
=
None
data
=
value
request_param
=
cls
(
fieldname
,
data
,
filename
=
filename
)
request_param
.
make_multipart
(
content_type
=
content_type
)
return
request_param
def
_render_part
(
self
,
name
,
value
):
"""
Overridable helper function to format a single header parameter.
:param name:
The name of the parameter, a string expected to be ASCII only.
:param value:
The value of the parameter, provided as a unicode string.
"""
return
format_header_param
(
name
,
value
)
def
_render_parts
(
self
,
header_parts
):
"""
Helper function to format and quote a single header.
Useful for single headers that are composed of multiple items. E.g.,
'Content-Disposition' fields.
:param header_parts:
A sequence of (k, v) typles or a :class:`dict` of (k, v) to format
as `k1="v1"; k2="v2"; ...`.
"""
parts
=
[]
iterable
=
header_parts
if
isinstance
(
header_parts
,
dict
):
iterable
=
header_parts
.
items
()
for
name
,
value
in
iterable
:
if
value
is
not
None
:
parts
.
append
(
self
.
_render_part
(
name
,
value
))
return
'; '
.
join
(
parts
)
def
render_headers
(
self
):
"""
Renders the headers for this request field.
"""
lines
=
[]
sort_keys
=
[
'Content-Disposition'
,
'Content-Type'
,
'Content-Location'
]
for
sort_key
in
sort_keys
:
if
self
.
headers
.
get
(
sort_key
,
False
):
lines
.
append
(
'%s: %s'
%
(
sort_key
,
self
.
headers
[
sort_key
]))
for
header_name
,
header_value
in
self
.
headers
.
items
():
if
header_name
not
in
sort_keys
:
if
header_value
:
lines
.
append
(
'%s: %s'
%
(
header_name
,
header_value
))
lines
.
append
(
'
\r
\n
'
)
return
'
\r
\n
'
.
join
(
lines
)
def
make_multipart
(
self
,
content_disposition
=
None
,
content_type
=
None
,
content_location
=
None
):
"""
Makes this request field into a multipart request field.
This method overrides "Content-Disposition", "Content-Type" and
"Content-Location" headers to the request parameter.
:param content_type:
The 'Content-Type' of the request body.
:param content_location:
The 'Content-Location' of the request body.
"""
self
.
headers
[
'Content-Disposition'
]
=
content_disposition
or
'form-data'
self
.
headers
[
'Content-Disposition'
]
+=
'; '
.
join
([
''
,
self
.
_render_parts
(
((
'name'
,
self
.
_name
), (
'filename'
,
self
.
_filename
))
)
])
self
.
headers
[
'Content-Type'
]
=
content_type
self
.
headers
[
'Content-Location'
]
=
content_location
Back
|
FazBrowse Home
|
New Git URL