comparison urllib3/__init__.py @ 7:5eb2d5e3bf22

planemo upload for repository https://toolrepo.galaxytrakr.org/view/jpayne/bioproject_to_srr_2/556cac4fb538
author jpayne
date Sun, 05 May 2024 23:32:17 -0400
parents
children
comparison
equal deleted inserted replaced
6:b2745907b1eb 7:5eb2d5e3bf22
1 """
2 Python HTTP library with thread-safe connection pooling, file post support, user friendly, and more
3 """
4
5 from __future__ import annotations
6
7 # Set default logging handler to avoid "No handler found" warnings.
8 import logging
9 import sys
10 import typing
11 import warnings
12 from logging import NullHandler
13
14 from . import exceptions
15 from ._base_connection import _TYPE_BODY
16 from ._collections import HTTPHeaderDict
17 from ._version import __version__
18 from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url
19 from .filepost import _TYPE_FIELDS, encode_multipart_formdata
20 from .poolmanager import PoolManager, ProxyManager, proxy_from_url
21 from .response import BaseHTTPResponse, HTTPResponse
22 from .util.request import make_headers
23 from .util.retry import Retry
24 from .util.timeout import Timeout
25
26 # Ensure that Python is compiled with OpenSSL 1.1.1+
27 # If the 'ssl' module isn't available at all that's
28 # fine, we only care if the module is available.
29 try:
30 import ssl
31 except ImportError:
32 pass
33 else:
34 if not ssl.OPENSSL_VERSION.startswith("OpenSSL "): # Defensive:
35 warnings.warn(
36 "urllib3 v2 only supports OpenSSL 1.1.1+, currently "
37 f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. "
38 "See: https://github.com/urllib3/urllib3/issues/3020",
39 exceptions.NotOpenSSLWarning,
40 )
41 elif ssl.OPENSSL_VERSION_INFO < (1, 1, 1): # Defensive:
42 raise ImportError(
43 "urllib3 v2 only supports OpenSSL 1.1.1+, currently "
44 f"the 'ssl' module is compiled with {ssl.OPENSSL_VERSION!r}. "
45 "See: https://github.com/urllib3/urllib3/issues/2168"
46 )
47
48 __author__ = "Andrey Petrov (andrey.petrov@shazow.net)"
49 __license__ = "MIT"
50 __version__ = __version__
51
52 __all__ = (
53 "HTTPConnectionPool",
54 "HTTPHeaderDict",
55 "HTTPSConnectionPool",
56 "PoolManager",
57 "ProxyManager",
58 "HTTPResponse",
59 "Retry",
60 "Timeout",
61 "add_stderr_logger",
62 "connection_from_url",
63 "disable_warnings",
64 "encode_multipart_formdata",
65 "make_headers",
66 "proxy_from_url",
67 "request",
68 "BaseHTTPResponse",
69 )
70
71 logging.getLogger(__name__).addHandler(NullHandler())
72
73
74 def add_stderr_logger(
75 level: int = logging.DEBUG,
76 ) -> logging.StreamHandler[typing.TextIO]:
77 """
78 Helper for quickly adding a StreamHandler to the logger. Useful for
79 debugging.
80
81 Returns the handler after adding it.
82 """
83 # This method needs to be in this __init__.py to get the __name__ correct
84 # even if urllib3 is vendored within another package.
85 logger = logging.getLogger(__name__)
86 handler = logging.StreamHandler()
87 handler.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))
88 logger.addHandler(handler)
89 logger.setLevel(level)
90 logger.debug("Added a stderr logging handler to logger: %s", __name__)
91 return handler
92
93
94 # ... Clean up.
95 del NullHandler
96
97
98 # All warning filters *must* be appended unless you're really certain that they
99 # shouldn't be: otherwise, it's very hard for users to use most Python
100 # mechanisms to silence them.
101 # SecurityWarning's always go off by default.
102 warnings.simplefilter("always", exceptions.SecurityWarning, append=True)
103 # InsecurePlatformWarning's don't vary between requests, so we keep it default.
104 warnings.simplefilter("default", exceptions.InsecurePlatformWarning, append=True)
105
106
107 def disable_warnings(category: type[Warning] = exceptions.HTTPWarning) -> None:
108 """
109 Helper for quickly disabling all urllib3 warnings.
110 """
111 warnings.simplefilter("ignore", category)
112
113
114 _DEFAULT_POOL = PoolManager()
115
116
117 def request(
118 method: str,
119 url: str,
120 *,
121 body: _TYPE_BODY | None = None,
122 fields: _TYPE_FIELDS | None = None,
123 headers: typing.Mapping[str, str] | None = None,
124 preload_content: bool | None = True,
125 decode_content: bool | None = True,
126 redirect: bool | None = True,
127 retries: Retry | bool | int | None = None,
128 timeout: Timeout | float | int | None = 3,
129 json: typing.Any | None = None,
130 ) -> BaseHTTPResponse:
131 """
132 A convenience, top-level request method. It uses a module-global ``PoolManager`` instance.
133 Therefore, its side effects could be shared across dependencies relying on it.
134 To avoid side effects create a new ``PoolManager`` instance and use it instead.
135 The method does not accept low-level ``**urlopen_kw`` keyword arguments.
136
137 :param method:
138 HTTP request method (such as GET, POST, PUT, etc.)
139
140 :param url:
141 The URL to perform the request on.
142
143 :param body:
144 Data to send in the request body, either :class:`str`, :class:`bytes`,
145 an iterable of :class:`str`/:class:`bytes`, or a file-like object.
146
147 :param fields:
148 Data to encode and send in the request body.
149
150 :param headers:
151 Dictionary of custom headers to send, such as User-Agent,
152 If-None-Match, etc.
153
154 :param bool preload_content:
155 If True, the response's body will be preloaded into memory.
156
157 :param bool decode_content:
158 If True, will attempt to decode the body based on the
159 'content-encoding' header.
160
161 :param redirect:
162 If True, automatically handle redirects (status codes 301, 302,
163 303, 307, 308). Each redirect counts as a retry. Disabling retries
164 will disable redirect, too.
165
166 :param retries:
167 Configure the number of retries to allow before raising a
168 :class:`~urllib3.exceptions.MaxRetryError` exception.
169
170 If ``None`` (default) will retry 3 times, see ``Retry.DEFAULT``. Pass a
171 :class:`~urllib3.util.retry.Retry` object for fine-grained control
172 over different types of retries.
173 Pass an integer number to retry connection errors that many times,
174 but no other types of errors. Pass zero to never retry.
175
176 If ``False``, then retries are disabled and any exception is raised
177 immediately. Also, instead of raising a MaxRetryError on redirects,
178 the redirect response will be returned.
179
180 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int.
181
182 :param timeout:
183 If specified, overrides the default timeout for this one
184 request. It may be a float (in seconds) or an instance of
185 :class:`urllib3.util.Timeout`.
186
187 :param json:
188 Data to encode and send as JSON with UTF-encoded in the request body.
189 The ``"Content-Type"`` header will be set to ``"application/json"``
190 unless specified otherwise.
191 """
192
193 return _DEFAULT_POOL.request(
194 method,
195 url,
196 body=body,
197 fields=fields,
198 headers=headers,
199 preload_content=preload_content,
200 decode_content=decode_content,
201 redirect=redirect,
202 retries=retries,
203 timeout=timeout,
204 json=json,
205 )
206
207
208 if sys.platform == "emscripten":
209 from .contrib.emscripten import inject_into_urllib3 # noqa: 401
210
211 inject_into_urllib3()