| 96 | |
| 97 | |
| 98 | class CachedGet: |
| 99 | def __init__(self, filename, getter): |
| 100 | self._getter = getter |
| 101 | |
| 102 | self.filename = filename |
| 103 | if os.path.isfile(filename): |
| 104 | print(f"[gh_lists] using {filename} as cache (remove it if you want fresh data)", |
| 105 | file=sys.stderr) |
| 106 | with open(filename, encoding='utf-8') as f: |
| 107 | self.cache = json.load(f) |
| 108 | else: |
| 109 | self.cache = {} |
| 110 | |
| 111 | def get(self, url): |
| 112 | if url not in self.cache: |
| 113 | data = self._getter.get_multipage(url) |
| 114 | self.cache[url] = data |
| 115 | return data |
| 116 | else: |
| 117 | print("[gh_lists] (cached):", url, file=sys.stderr, flush=True) |
| 118 | return self.cache[url] |
| 119 | |
| 120 | def save(self): |
| 121 | tmp = self.filename + ".new" |
| 122 | with open(tmp, 'w', encoding='utf-8') as f: |
| 123 | json.dump(self.cache, f) |
| 124 | os.rename(tmp, self.filename) |
| 125 | |
| 126 | |
| 127 | class GithubGet: |