Commit | Line | Data |
---|---|---|
f3ad0817 FT |
1 | import os, md5, urllib, time |
2 | pj = os.path.join | |
3 | ||
4 | class cache(object): | |
5 | def __init__(self, dir): | |
6 | self.dir = dir | |
7 | ||
8 | def mangle(self, url): | |
9 | n = md5.new() | |
10 | n.update(url) | |
11 | return n.hexdigest() | |
12 | ||
13 | def fetch(self, url, expire = 3600): | |
14 | path = pj(self.dir, self.mangle(url)) | |
15 | if os.path.exists(path): | |
16 | if time.time() - os.stat(path).st_mtime < expire: | |
17 | with open(path) as f: | |
18 | return f.read() | |
19 | s = urllib.urlopen(url) | |
20 | try: | |
21 | data = s.read() | |
22 | finally: | |
23 | s.close() | |
24 | if not os.path.isdir(self.dir): | |
25 | os.makedirs(self.dir) | |
26 | with open(path, "w") as f: | |
27 | f.write(data) | |
28 | return data | |
29 | ||
30 | home = os.getenv("HOME") | |
31 | if home is None or not os.path.isdir(home): | |
32 | raise Exception("Could not find home directory for HTTP caching") | |
33 | default = cache(pj(home, ".manga", "htcache")) | |
34 | ||
35 | def fetch(url, expire = 3600): | |
36 | return default.fetch(url, expire) |