33from __future__ import annotations
44
55import warnings
6- from contextlib import contextmanager
7- from typing import Any , Iterator
6+ from typing import Any
87from urllib .parse import urlsplit
98
109import requests
1615 f'Sphinx/{ sphinx .__version__ } ' )
1716
1817
19- @contextmanager
20- def ignore_insecure_warning (verify : bool ) -> Iterator [None ]:
21- with warnings .catch_warnings ():
22- if not verify :
23- # ignore InsecureRequestWarning if verify=False
24- warnings .filterwarnings ("ignore" , category = InsecureRequestWarning )
25- yield
26-
27-
2818def _get_tls_cacert (url : str , certs : str | dict [str , str ] | None ) -> str | bool :
2919 """Get additional CA cert for a specific URL."""
3020 if not certs :
@@ -39,41 +29,45 @@ def _get_tls_cacert(url: str, certs: str | dict[str, str] | None) -> str | bool:
3929 return certs .get (hostname , True )
4030
4131
42- def get (url : str ,
43- _user_agent : str = '' ,
44- _tls_info : tuple [bool , str | dict [str , str ] | None ] = (), # type: ignore[assignment]
45- ** kwargs : Any ) -> requests .Response :
46- """Sends a HEAD request like requests.head().
32+ def get (url : str , ** kwargs : Any ) -> requests .Response :
33+ """Sends a GET request like requests.get().
4734
4835 This sets up User-Agent header and TLS verification automatically."""
49- headers = kwargs .setdefault ('headers' , {})
50- headers .setdefault ('User-Agent' , _user_agent or _USER_AGENT )
51- if _tls_info :
52- tls_verify , tls_cacerts = _tls_info
53- verify = bool (kwargs .get ('verify' , tls_verify ))
54- kwargs .setdefault ('verify' , verify and _get_tls_cacert (url , tls_cacerts ))
55- else :
56- verify = kwargs .get ('verify' , True )
36+ with _Session () as session :
37+ return session .get (url , ** kwargs )
5738
58- with ignore_insecure_warning (verify ):
59- return requests .get (url , ** kwargs )
6039
61-
62- def head (url : str ,
63- _user_agent : str = '' ,
64- _tls_info : tuple [bool , str | dict [str , str ] | None ] = (), # type: ignore[assignment]
65- ** kwargs : Any ) -> requests .Response :
40+ def head (url : str , ** kwargs : Any ) -> requests .Response :
6641 """Sends a HEAD request like requests.head().
6742
6843 This sets up User-Agent header and TLS verification automatically."""
69- headers = kwargs .setdefault ('headers' , {})
70- headers .setdefault ('User-Agent' , _user_agent or _USER_AGENT )
71- if _tls_info :
72- tls_verify , tls_cacerts = _tls_info
73- verify = bool (kwargs .get ('verify' , tls_verify ))
74- kwargs .setdefault ('verify' , verify and _get_tls_cacert (url , tls_cacerts ))
75- else :
76- verify = kwargs .get ('verify' , True )
44+ with _Session () as session :
45+ return session .head (url , ** kwargs )
7746
78- with ignore_insecure_warning (verify ):
79- return requests .head (url , ** kwargs )
47+
48+ class _Session (requests .Session ):
49+ def request ( # type: ignore[override]
50+ self , method : str , url : str ,
51+ _user_agent : str = '' ,
52+ _tls_info : tuple [bool , str | dict [str , str ] | None ] = (), # type: ignore[assignment]
53+ ** kwargs : Any ,
54+ ) -> requests .Response :
55+ """Sends a request with an HTTP verb and url.
56+
57+ This sets up User-Agent header and TLS verification automatically."""
58+ headers = kwargs .setdefault ('headers' , {})
59+ headers .setdefault ('User-Agent' , _user_agent or _USER_AGENT )
60+ if _tls_info :
61+ tls_verify , tls_cacerts = _tls_info
62+ verify = bool (kwargs .get ('verify' , tls_verify ))
63+ kwargs .setdefault ('verify' , verify and _get_tls_cacert (url , tls_cacerts ))
64+ else :
65+ verify = kwargs .get ('verify' , True )
66+
67+ if verify :
68+ return super ().request (method , url , ** kwargs )
69+
70+ with warnings .catch_warnings ():
71+ # ignore InsecureRequestWarning if verify=False
72+ warnings .filterwarnings ("ignore" , category = InsecureRequestWarning )
73+ return super ().request (method , url , ** kwargs )
0 commit comments