1import logging
2
3from pip._vendor import requests
4
5from pip._vendor.cachecontrol.adapter import CacheControlAdapter
6from pip._vendor.cachecontrol.cache import DictCache
7from pip._vendor.cachecontrol.controller import logger
8
9from argparse import ArgumentParser
10
11
12def setup_logging():
13    logger.setLevel(logging.DEBUG)
14    handler = logging.StreamHandler()
15    logger.addHandler(handler)
16
17
18def get_session():
19    adapter = CacheControlAdapter(
20        DictCache(), cache_etags=True, serializer=None, heuristic=None
21    )
22    sess = requests.Session()
23    sess.mount("http://", adapter)
24    sess.mount("https://", adapter)
25
26    sess.cache_controller = adapter.controller
27    return sess
28
29
30def get_args():
31    parser = ArgumentParser()
32    parser.add_argument("url", help="The URL to try and cache")
33    return parser.parse_args()
34
35
36def main(args=None):
37    args = get_args()
38    sess = get_session()
39
40    # Make a request to get a response
41    resp = sess.get(args.url)
42
43    # Turn on logging
44    setup_logging()
45
46    # try setting the cache
47    sess.cache_controller.cache_response(resp.request, resp.raw)
48
49    # Now try to get it
50    if sess.cache_controller.cached_request(resp.request):
51        print("Cached!")
52    else:
53        print("Not cached :(")
54
55
56if __name__ == "__main__":
57    main()
58