1
2
3 __author__ = "Abhinav Sarkar <abhinav@abhinavsarkar.net>"
4 __version__ = "0.2"
5 __license__ = "GNU Lesser General Public License"
6
7 import sys
8 if sys.version < '2.6':
9 import md5
11 return md5.new(string).hexdigest()
12 else:
13 from hashlib import md5
15 return md5(string).hexdigest()
16
17 import os
18 import tempfile
19
21 '''Base exception class for FileCache related errors'''
22
24
25 DEPTH = 3
26
29
31 path = self._GetPath(key)
32 if os.path.exists(path):
33 return open(path).read()
34 else:
35 return None
36
37 - def Set(self,key,data):
38 path = self._GetPath(key)
39 directory = os.path.dirname(path)
40 if not os.path.exists(directory):
41 os.makedirs(directory)
42 if not os.path.isdir(directory):
43 raise _FileCacheError('%s exists but is not a directory' % directory)
44 temp_fd, temp_path = tempfile.mkstemp()
45 temp_fp = os.fdopen(temp_fd, 'w')
46 temp_fp.write(data)
47 temp_fp.close()
48 if not path.startswith(self._root_directory):
49 raise _FileCacheError('%s does not appear to live under %s' %
50 (path, self._root_directory))
51 if os.path.exists(path):
52 os.remove(path)
53 os.rename(temp_path, path)
54
56 path = self._GetPath(key)
57 if not path.startswith(self._root_directory):
58 raise _FileCacheError('%s does not appear to live under %s' %
59 (path, self._root_directory ))
60 if os.path.exists(path):
61 os.remove(path)
62
64 path = self._GetPath(key)
65 if os.path.exists(path):
66 return os.path.getmtime(path)
67 else:
68 return None
69
71 '''Attempt to find the username in a cross-platform fashion.'''
72 return os.getenv('USER') or \
73 os.getenv('LOGNAME') or \
74 os.getenv('USERNAME') or \
75 os.getlogin() or \
76 'nobody'
77
79 username = self._GetUsername()
80 cache_directory = 'python.cache_' + username
81 return os.path.join(tempfile.gettempdir(), cache_directory)
82
84 if not root_directory:
85 root_directory = self._GetTmpCachePath()
86 root_directory = os.path.abspath(root_directory)
87 if not os.path.exists(root_directory):
88 os.mkdir(root_directory)
89 if not os.path.isdir(root_directory):
90 raise _FileCacheError('%s exists but is not a directory' %
91 root_directory)
92 self._root_directory = root_directory
93
95 hashed_key = md5hash(key)
96 return os.path.join(self._root_directory,
97 self._GetPrefix(hashed_key),
98 hashed_key)
99
102