1
2
3
4 """
5 This file is part of the web2py Web Framework
6 Copyrighted by Massimo Di Pierro <mdipierro@cs.depaul.edu>
7 License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html)
8
9 Functions required to execute app components
10 ============================================
11
12 FOR INTERNAL USE ONLY
13 """
14
15 import os
16 import stat
17 import thread
18 from fileutils import read_file
19
20 cfs = {}
21 cfs_lock = thread.allocate_lock()
22
23
24 -def getcfs(key, filename, filter=None):
25 """
26 Caches the *filtered* file `filename` with `key` until the file is
27 modified.
28
29 :param key: the cache key
30 :param filename: the file to cache
31 :param filter: is the function used for filtering. Normally `filename` is a
32 .py file and `filter` is a function that bytecode compiles the file.
33 In this way the bytecode compiled file is cached. (Default = None)
34
35 This is used on Google App Engine since pyc files cannot be saved.
36 """
37 t = os.stat(filename)[stat.ST_MTIME]
38 cfs_lock.acquire()
39 item = cfs.get(key, None)
40 cfs_lock.release()
41 if item and item[0] == t:
42 return item[1]
43 if not filter:
44 data = read_file(filename)
45 else:
46 data = filter()
47 cfs_lock.acquire()
48 cfs[key] = (t, data)
49 cfs_lock.release()
50 return data
51