44import cgi # noqa: I202
55import logging
66import socket
7+ from typing import Any
78from typing import Optional
89from typing import Tuple
910from typing import TYPE_CHECKING
1011
1112# pypi
12- import requests
1313from requests_toolbelt .utils .deprecated import get_encodings_from_content
1414
1515# local
1616from . import config
1717from .exceptions import AllowableError
18- from .utils import DummyResponse
1918from .utils import safe_sample
2019
2120if TYPE_CHECKING :
3534# peername hacks
3635# only use for these stdlib packages
3736# eventually will not be needed thanks to upstream changes in `requests`
37+ _compatible_sockets : Tuple [Any , ...]
3838try :
39- _compatible_sockets : Tuple = (
39+ _compatible_sockets = (
4040 _socket .socket ,
4141 socket ._socketobject , # type: ignore[attr-defined]
4242 )
4343except AttributeError :
44- _compatible_sockets : Tuple = (_socket .socket ,) # type: ignore[no-redef]
44+ _compatible_sockets = (_socket .socket ,) # type: ignore[no-redef]
4545
4646
47- def derive_encoding__hook (resp : "TYPES_RESPONSE" , * args , ** kwargs ) -> None :
47+ def derive_encoding__hook (resp : Any , * args , ** kwargs ) -> None :
4848 """
4949 a note about `requests`
5050
@@ -58,14 +58,14 @@ def derive_encoding__hook(resp: "TYPES_RESPONSE", *args, **kwargs) -> None:
5858 servers to not follow RFC and for the default encoding to be different.
5959 """
6060 if TYPE_CHECKING :
61- assert hasattr (resp , "_encoding_fallback" )
6261 assert hasattr (resp , "_encoding_content" )
62+ assert hasattr (resp , "_encoding_fallback" )
6363 assert hasattr (resp , "_encoding_headers" )
6464
65+ resp ._encoding_content = None
6566 resp ._encoding_fallback = config .ENCODING_FALLBACK
6667 # modified version, returns `None` if no charset available
6768 resp ._encoding_headers = get_encoding_from_headers (resp .headers )
68- resp ._encoding_content = None
6969 if not resp ._encoding_headers and resp .content :
7070 # html5 spec requires a meta-charset in the first 1024 bytes
7171 _sample = safe_sample (resp .content )
@@ -120,7 +120,9 @@ def get_encoding_from_headers(headers: "CaseInsensitiveDict") -> Optional[str]:
120120# ------------------------------------------------------------------------------
121121
122122
123- def get_response_peername (resp : "TYPES_RESPONSE" ) -> Optional ["TYPES_PEERNAME" ]:
123+ def get_response_peername (
124+ resp : Any ,
125+ ) -> Optional ["TYPES_PEERNAME" ]:
124126 """
125127 used to get the peername (ip+port) data from the request
126128 if a socket is found, caches this onto the request object
@@ -133,17 +135,19 @@ def get_response_peername(resp: "TYPES_RESPONSE") -> Optional["TYPES_PEERNAME"]:
133135
134136 * _mp_peername
135137 """
136- if not isinstance (resp , requests . Response ) and not isinstance (resp , DummyResponse ):
137- # raise AllowableError("Not a HTTPResponse")
138- log .debug ("Not a supported HTTPResponse | %s" , resp )
139- log .debug ("-> received a type of: %s" , type (resp ))
140- return None
138+ # if not isinstance(resp, Response) and not isinstance(resp, DummyResponse):
139+ # # raise AllowableError("Not a HTTPResponse")
140+ # log.debug("Not a supported HTTPResponse | %s", resp)
141+ # log.debug("-> received a type of: %s", type(resp))
142+ # return None
141143
142144 if hasattr (resp , "_mp_peername" ):
143145 return resp ._mp_peername
144146
145147 def _get_socket () -> Optional [socket .socket ]:
146- if isinstance (resp , DummyResponse ):
148+ # only socket to `requests.Response`
149+ # if not isinstance(resp, "Response"):
150+ if not hasattr (resp , "raw" ):
147151 return None
148152 i = 0
149153 while True :
@@ -168,14 +172,14 @@ def _get_socket() -> Optional[socket.socket]:
168172 pass
169173 return None
170174
175+ _mp_peername : Optional ["TYPES_PEERNAME" ] = None
171176 sock = _get_socket ()
172- if sock :
177+ if sock is not None :
173178 # only cache if we have a sock
174179 # we may want/need to call again
175- resp ._mp_peername = sock .getpeername () # type: ignore [union-attr]
176- else :
177- resp ._mp_peername = None # type: ignore [union-attr]
178- return resp ._mp_peername # type: ignore [union-attr]
180+ _mp_peername = sock .getpeername ()
181+ setattr (resp , "_mp_peername" , _mp_peername ) # type: ignore[union-attr]
182+ return _mp_peername
179183
180184
181185# ------------------------------------------------------------------------------
0 commit comments