summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAnil Khatri <anilkhatri.dev@gmail.com>2022-01-05 18:56:38 +0530
committerGitHub <noreply@github.com>2022-01-05 06:26:38 -0700
commit726e295dfeacd4b5f1464b5ac53e277250951f0a (patch)
tree2067a8373de63e0f8fab898bf32b0f2a8534d530 /src
parentfd2759aa16b12b33298900c77d29b3813c6582de (diff)
downloadurllib3-726e295dfeacd4b5f1464b5ac53e277250951f0a.tar.gz
Add sentinel type for _FAILEDTELL (#2519)
Diffstat (limited to 'src')
-rw-r--r--src/urllib3/connectionpool.py4
-rw-r--r--src/urllib3/util/request.py21
2 files changed, 18 insertions, 7 deletions
diff --git a/src/urllib3/connectionpool.py b/src/urllib3/connectionpool.py
index 4fabcb4a..d9dc7eec 100644
--- a/src/urllib3/connectionpool.py
+++ b/src/urllib3/connectionpool.py
@@ -41,7 +41,7 @@ from .exceptions import (
from .response import BaseHTTPResponse, HTTPResponse
from .util.connection import is_connection_dropped
from .util.proxy import connection_requires_http_tunnel
-from .util.request import set_file_position
+from .util.request import _TYPE_BODY_POSITION, set_file_position
from .util.response import assert_header_parsing
from .util.retry import Retry
from .util.ssl_match_hostname import CertificateError
@@ -547,7 +547,7 @@ class HTTPConnectionPool(ConnectionPool, RequestMethods):
pool_timeout: Optional[int] = None,
release_conn: Optional[bool] = None,
chunked: bool = False,
- body_pos: Optional[Union[int, object]] = None,
+ body_pos: Optional[_TYPE_BODY_POSITION] = None,
**response_kw: Any,
) -> BaseHTTPResponse:
"""
diff --git a/src/urllib3/util/request.py b/src/urllib3/util/request.py
index d4751c8f..8693796c 100644
--- a/src/urllib3/util/request.py
+++ b/src/urllib3/util/request.py
@@ -1,8 +1,12 @@
from base64 import b64encode
-from typing import IO, Any, AnyStr, Dict, List, Optional, Union
+from enum import Enum
+from typing import IO, TYPE_CHECKING, Any, AnyStr, Dict, List, Optional, Union
from ..exceptions import UnrewindableBodyError
+if TYPE_CHECKING:
+ from typing_extensions import Final
+
# Pass as a value within ``headers`` to skip
# emitting some HTTP headers that are added automatically.
# The only headers that are supported are ``Accept-Encoding``,
@@ -21,7 +25,14 @@ except ImportError:
else:
ACCEPT_ENCODING += ",br"
-_FAILEDTELL = object()
+
+class _TYPE_FAILEDTELL(Enum):
+ token = 0
+
+
+_FAILEDTELL: "Final[_TYPE_FAILEDTELL]" = _TYPE_FAILEDTELL.token
+
+_TYPE_BODY_POSITION = Union[int, _TYPE_FAILEDTELL]
def make_headers(
@@ -104,8 +115,8 @@ def make_headers(
def set_file_position(
- body: Any, pos: Optional[Union[int, object]]
-) -> Optional[Union[int, object]]:
+ body: Any, pos: Optional[_TYPE_BODY_POSITION]
+) -> Optional[_TYPE_BODY_POSITION]:
"""
If a position is provided, move file to that point.
Otherwise, we'll attempt to record a position for future use.
@@ -123,7 +134,7 @@ def set_file_position(
return pos
-def rewind_body(body: IO[AnyStr], body_pos: Optional[Union[int, object]]) -> None:
+def rewind_body(body: IO[AnyStr], body_pos: _TYPE_BODY_POSITION) -> None:
"""
Attempt to rewind body to a certain position.
Primarily used for request redirects and retries.