author | Tero Marttila <terom@fixme.fi> |
Sun, 23 Jan 2011 13:50:13 +0200 | |
changeset 29 | c756e522c9ac |
parent 25 | 9fa9d881fd87 |
permissions | -rw-r--r-- |
5 | 1 |
|
2 |
""" |
|
3 |
HTML output |
|
4 |
""" |
|
5 |
||
6 |
import os.path |
|
7 |
||
13 | 8 |
def urljoin (*parts) : |
9 |
url = "" |
|
10 |
||
11 |
for part in parts : |
|
12 |
if part : |
|
13 |
if url : |
|
14 |
url += "/" + part |
|
15 |
else : |
|
16 |
url += part |
|
17 |
||
18 |
return url |
|
19 |
||
22 | 20 |
class BaseFormatter (object) : |
21 |
""" |
|
22 |
Trivial HTML template formatter. |
|
23 |
""" |
|
24 |
||
25 |
def __init__ (self, basedir, encoding = 'utf-8') : |
|
26 |
""" |
|
27 |
basedir - directory containing the required .html files |
|
28 |
encoding - unicode encoding of file content (default: utf-8) |
|
29 |
""" |
|
30 |
||
31 |
self.basedir = os.path.abspath(basedir) |
|
32 |
self.encoding = encoding |
|
33 |
||
34 |
def render (self, name, **vars) : |
|
35 |
""" |
|
36 |
Format and return given template. |
|
37 |
||
38 |
name - basename of template without .html |
|
39 |
**vars - template context |
|
40 |
||
41 |
The template is rendered and returned as unicode. |
|
42 |
""" |
|
43 |
||
44 |
path = os.path.join(self.basedir, name) + '.html' |
|
45 |
||
46 |
# read contents |
|
47 |
data = open(path).read().decode(self.encoding) |
|
48 |
||
49 |
# format |
|
50 |
return data % vars |
|
51 |
||
52 |
||
53 |
# XXX: legacy |
|
54 |
class Formatter (BaseFormatter) : |
|
55 |
||
5 | 56 |
TEMPLATE_DIR = 'etc/templates' |
57 |
||
58 |
IMG_URL = '%(prefix)s?t=%(target)s&s=%(style)&i=%(interval)s' |
|
59 |
TARGET_URL = '%(prefix)s?t=%(target)s' |
|
60 |
||
61 |
def __init__ (self, template_dir=TEMPLATE_DIR, url_prefix='', img_url=IMG_URL, target_url=TARGET_URL) : |
|
22 | 62 |
BaseFormatter.__init__(self, template_dir, 'utf-8') |
63 |
||
5 | 64 |
self.url_prefix = url_prefix |
65 |
self.img_url = img_url |
|
66 |
self.target_url = target_url |
|
67 |
||
68 |
def page (self, content) : |
|
69 |
""" |
|
70 |
Format page contents |
|
71 |
""" |
|
72 |
||
25
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
73 |
return self.render('layout', |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
74 |
title = 'MRTG', |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
75 |
breadcrumb = '', # XXX: not supported |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
76 |
content = content |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
77 |
) |
5 | 78 |
|
79 |
def fmt_img_url (self, style, interval, target) : |
|
80 |
return self.img_url % dict( |
|
81 |
prefix = self.url_prefix, |
|
11 | 82 |
target = target, |
5 | 83 |
style = style, |
84 |
interval = interval, |
|
85 |
) |
|
86 |
||
87 |
def fmt_target_url (self, target) : |
|
88 |
return self.target_url % dict( |
|
89 |
prefix = self.url_prefix, |
|
11 | 90 |
target = target, |
5 | 91 |
) |
92 |
||
25
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
93 |
def overview (self, dirname, targets) : |
5 | 94 |
""" |
11 | 95 |
Format target listing for given list of (target, title) pairs |
5 | 96 |
""" |
97 |
||
22 | 98 |
return self.page(self.render('overview', |
25
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
99 |
dir = dirname, |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
100 |
overview_subdirs = '', # XXX: not supported |
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
101 |
overview_graphs = '\n'.join( |
22 | 102 |
self.render('overview-target', |
11 | 103 |
title = title, |
5 | 104 |
daily_overview_img = self.fmt_img_url('overview', 'daily', target), |
105 |
target_url = self.fmt_target_url(target), |
|
106 |
||
11 | 107 |
) for target, title in targets |
25
9fa9d881fd87
Merge with previous bin/rrdweb development, and fix up merge bugs
Tero Marttila <terom@fixme.fi>
diff
changeset
|
108 |
), |
5 | 109 |
)) |
110 |
||
11 | 111 |
def target (self, target, title) : |
5 | 112 |
""" |
113 |
Format a specific target |
|
114 |
""" |
|
115 |
||
22 | 116 |
return self.page(self.render('target', |
11 | 117 |
title = title, |
5 | 118 |
daily_img = self.fmt_img_url('detail', 'daily', target), |
119 |
weekly_img = self.fmt_img_url('detail', 'weekly', target), |
|
120 |
yearly_img = self.fmt_img_url('detail', 'yearly', target), |
|
121 |
)) |
|
122 |