summaryrefslogtreecommitdiff
path: root/examples/history.py
diff options
context:
space:
mode:
Diffstat (limited to 'examples/history.py')
-rw-r--r--examples/history.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/examples/history.py b/examples/history.py
new file mode 100644
index 0000000..fb99e3d
--- /dev/null
+++ b/examples/history.py
@@ -0,0 +1,42 @@
+#!/usr/bin/env python3
+"""
+An example of keeping a history of cached responses, for later comparison or analysis
+"""
+from time import sleep
+
+from requests_cache import CachedSession
+
+
+class CachedHistorySession(CachedSession):
+ """A CachedSession that keeps a copy of all previously cached responses"""
+
+ def send(self, *args, **kwargs):
+ """Save a copy of every new response"""
+ response = super().send(*args, **kwargs)
+ if not response.from_cache:
+ self.cache.save_response(response, f'{response.cache_key}_{response.created_at}')
+ return response
+
+ def get_response_history(self, response):
+ """Get a history of previously cached versions of the given response"""
+ return [
+ self.cache.responses[k]
+ for k in self.cache.responses.keys()
+ if k.startswith(response.cache_key) and k != response.cache_key
+ ]
+
+
+def demo():
+ session = CachedHistorySession(expire_after=1)
+ n_history_items = 3
+ for i in range(n_history_items):
+ response = session.get('https://httpbin.org/get')
+ if i < n_history_items - 1:
+ sleep(1)
+
+ for r in session.get_response_history(response):
+ print(r)
+
+
+if __name__ == '__main__':
+ demo()