MCPcopy Create free account
hub / github.com/psf/cachecontrol / CacheControlAdapter

Class CacheControlAdapter

cachecontrol/adapter.py:26–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24
25
26class CacheControlAdapter(HTTPAdapter):
27 invalidating_methods = {"PUT", "PATCH", "DELETE"}
28
29 def __init__(
30 self,
31 cache: BaseCache | None = None,
32 cache_etags: bool = True,
33 controller_class: type[CacheController] | None = None,
34 serializer: Serializer | None = None,
35 heuristic: BaseHeuristic | None = None,
36 cacheable_methods: Collection[str] | None = None,
37 *args: Any,
38 **kw: Any,
39 ) -> None:
40 super().__init__(*args, **kw)
41 self.cache = DictCache() if cache is None else cache
42 self.heuristic = heuristic
43 self.cacheable_methods = cacheable_methods or ("GET",)
44
45 controller_factory = controller_class or CacheController
46 self.controller = controller_factory(
47 self.cache, cache_etags=cache_etags, serializer=serializer
48 )
49
50 def send(
51 self,
52 request: PreparedRequest,
53 stream: bool = False,
54 timeout: None | float | tuple[float, float] | tuple[float, None] = None,
55 verify: bool | str = True,
56 cert: (None | bytes | str | tuple[bytes | str, bytes | str]) = None,
57 proxies: Mapping[str, str] | None = None,
58 cacheable_methods: Collection[str] | None = None,
59 ) -> Response:
60 """
61 Send a request. Use the request information to see if it
62 exists in the cache and cache the response if we need to and can.
63 """
64 cacheable = cacheable_methods or self.cacheable_methods
65 if request.method in cacheable:
66 try:
67 cached_response = self.controller.cached_request(request)
68 except zlib.error:
69 cached_response = None
70 if cached_response:
71 return self.build_response(request, cached_response, from_cache=True)
72
73 # check for etags and add headers if appropriate
74 request.headers.update(self.controller.conditional_headers(request))
75
76 resp = super().send(request, stream, timeout, verify, cert, proxies)
77
78 return resp
79
80 def build_response( # type: ignore[override]
81 self,
82 request: PreparedRequest,
83 response: HTTPResponse,

Callers 4

use_adapterFunction · 0.90
test_closeMethod · 0.90
sessMethod · 0.90
get_sessionFunction · 0.90

Calls

no outgoing calls

Tested by 3

use_adapterFunction · 0.72
test_closeMethod · 0.72
sessMethod · 0.72

Used in the wild real call sites across dependent graphs

searching dependent graphs…