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