Commit | Line | Data |
---|---|---|
3d866605 FT |
1 | import os, threading |
2 | from mako import template, lookup, filters | |
3 | import util, form, session | |
4 | ||
5 | # It seems Mako isn't thread-safe. | |
6 | makolock = threading.Lock() | |
7 | ||
8 | class liblookup(lookup.TemplateLookup): | |
9 | def __init__(self, *args, **kwargs): | |
10 | lookup.TemplateLookup.__init__(self, *args, **kwargs) | |
11 | ||
12 | def adjust_uri(self, uri, relativeto): | |
13 | return uri | |
14 | ||
15 | libdirs = [] | |
16 | homedir = os.getenv("HOME") | |
17 | if homedir is not None: | |
18 | usrdir = os.path.join(homedir, "wmako") | |
19 | if os.path.exists(usrdir): | |
20 | libdirs.append(usrdir) | |
21 | libdirs.append(os.path.join(os.path.dirname(__file__), "makolib")) | |
22 | cachedir = os.path.join("/tmp/", "mako-" + str(os.getuid())) | |
23 | defargs = {"output_encoding": "utf-8", | |
24 | "input_encoding": "utf-8", | |
25 | "default_filters": ["decode.utf8"], | |
26 | "module_directory": cachedir, | |
27 | } | |
28 | lib = liblookup(directories = libdirs, **defargs) | |
29 | ||
30 | if not os.path.exists(cachedir): | |
31 | os.mkdir(cachedir) | |
32 | def handle(req, filename, **kw): | |
33 | with makolock: | |
34 | tt = template.Template(filename = filename, lookup = lib, **defargs) | |
35 | req.ohead["Content-Type"] = "text/html; charset=utf-8" | |
36 | return [tt.render(request = req, **kw)] | |
37 | ||
38 | @util.wsgiwrap | |
39 | def application(req): | |
40 | return handle(req, req.filename, | |
41 | form = form.formdata(req), | |
42 | session = session.get(req)) |