22#
33# SPDX-License-Identifier: Apache-2.0
44
5- import types
65import functools
6+ import types
77import zlib
8+ from typing import TYPE_CHECKING , Any , Collection , Mapping , Optional , Tuple , Type , Union
89
910from requests .adapters import HTTPAdapter
1011
11- from .controller import CacheController , PERMANENT_REDIRECT_STATUSES
1212from .cache import DictCache
13+ from .controller import PERMANENT_REDIRECT_STATUSES , CacheController
1314from .filewrapper import CallbackFileWrapper
1415
16+ if TYPE_CHECKING :
17+ from requests import PreparedRequest , Response
18+
19+ from .cache import BaseCache
20+ from .compat import HTTPResponse
21+ from .heuristics import BaseHeuristic
22+ from .serialize import Serializer
23+
1524
1625class CacheControlAdapter (HTTPAdapter ):
1726 invalidating_methods = {"PUT" , "PATCH" , "DELETE" }
1827
1928 def __init__ (
2029 self ,
21- cache = None ,
22- cache_etags = True ,
23- controller_class = None ,
24- serializer = None ,
25- heuristic = None ,
26- cacheable_methods = None ,
27- * args ,
28- ** kw
29- ):
30+ cache : Optional [ "BaseCache" ] = None ,
31+ cache_etags : bool = True ,
32+ controller_class : Optional [ Type [ CacheController ]] = None ,
33+ serializer : Optional [ "Serializer" ] = None ,
34+ heuristic : Optional [ "BaseHeuristic" ] = None ,
35+ cacheable_methods : Optional [ Collection [ str ]] = None ,
36+ * args : Any ,
37+ ** kw : Any ,
38+ ) -> None :
3039 super (CacheControlAdapter , self ).__init__ (* args , ** kw )
3140 self .cache = DictCache () if cache is None else cache
3241 self .heuristic = heuristic
@@ -37,7 +46,18 @@ def __init__(
3746 self .cache , cache_etags = cache_etags , serializer = serializer
3847 )
3948
40- def send (self , request , cacheable_methods = None , ** kw ):
49+ def send (
50+ self ,
51+ request : "PreparedRequest" ,
52+ stream : bool = False ,
53+ timeout : Union [None , float , Tuple [float , float ], Tuple [float , None ]] = None ,
54+ verify : Union [bool , str ] = True ,
55+ cert : Union [
56+ None , bytes , str , Tuple [Union [bytes , str ], Union [bytes , str ]]
57+ ] = None ,
58+ proxies : Optional [Mapping [str , str ]] = None ,
59+ cacheable_methods : Optional [Collection [str ]] = None ,
60+ ) -> "Response" :
4161 """
4262 Send a request. Use the request information to see if it
4363 exists in the cache and cache the response if we need to and can.
@@ -54,13 +74,19 @@ def send(self, request, cacheable_methods=None, **kw):
5474 # check for etags and add headers if appropriate
5575 request .headers .update (self .controller .conditional_headers (request ))
5676
57- resp = super (CacheControlAdapter , self ).send (request , ** kw )
77+ resp = super (CacheControlAdapter , self ).send (
78+ request , stream , timeout , verify , cert , proxies
79+ )
5880
5981 return resp
6082
6183 def build_response (
62- self , request , response , from_cache = False , cacheable_methods = None
63- ):
84+ self ,
85+ request : "PreparedRequest" ,
86+ response : "HTTPResponse" ,
87+ from_cache : bool = False ,
88+ cacheable_methods : Optional [Collection [str ]] = None ,
89+ ) -> "Response" :
6490 """
6591 Build a response by making a request or using the cache.
6692
@@ -111,7 +137,7 @@ def build_response(
111137 if response .chunked :
112138 super_update_chunk_length = response ._update_chunk_length
113139
114- def _update_chunk_length (self ) :
140+ def _update_chunk_length (self : "HTTPResponse" ) -> None :
115141 super_update_chunk_length ()
116142 if self .chunk_left == 0 :
117143 self ._fp ._close ()
@@ -120,18 +146,21 @@ def _update_chunk_length(self):
120146 _update_chunk_length , response
121147 )
122148
123- resp = super (CacheControlAdapter , self ).build_response (request , response )
149+ resp : "Response" = super ( # type: ignore[no-untyped-call]
150+ CacheControlAdapter , self
151+ ).build_response (request , response )
124152
125153 # See if we should invalidate the cache.
126154 if request .method in self .invalidating_methods and resp .ok :
155+ assert request .url is not None
127156 cache_url = self .controller .cache_url (request .url )
128157 self .cache .delete (cache_url )
129158
130159 # Give the request a from_cache attr to let people use it
131- resp .from_cache = from_cache
160+ resp .from_cache = from_cache # type: ignore[attr-defined]
132161
133162 return resp
134163
135- def close (self ):
164+ def close (self ) -> None :
136165 self .cache .close ()
137- super (CacheControlAdapter , self ).close ()
166+ super (CacheControlAdapter , self ).close () # type: ignore[no-untyped-call]
0 commit comments