summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Sulfrian <alexander@sulfrian.net>2013-05-22 12:05:30 +0200
committerAlexander Sulfrian <alexander@sulfrian.net>2013-05-22 12:09:10 +0200
commitef8404ad29a9f1cb42d56d18a5f02cbe8b77daec (patch)
treeb958214193c524b10c30fb7e424a884dc65d20e5
parente6ceac59f7304f4bc83780462be9a70be6661908 (diff)
downloadwww-ef8404ad29a9f1cb42d56d18a5f02cbe8b77daec.tar.gz
www-ef8404ad29a9f1cb42d56d18a5f02cbe8b77daec.tar.bz2
www-ef8404ad29a9f1cb42d56d18a5f02cbe8b77daec.zip
render: refactor the whole thing for better python style
-rw-r--r--render.py69
1 files changed, 36 insertions, 33 deletions
diff --git a/render.py b/render.py
index 39e06b1..3715b80 100644
--- a/render.py
+++ b/render.py
@@ -2,47 +2,50 @@
import yaml
import os
-from jinja2 import Environment, FileSystemLoader
+import jinja2
-# configs
-basepath="./data"
-www_dir="./www"
+# config
+DATAPATH = "./data"
+WWW_DIR = "./www"
-env = Environment( loader = FileSystemLoader('./templates'))
-hosts = []
+class Renderer:
+ def __init__(self, output_dir):
+ self.env = jinja2.Environment(
+ loader = jinja2.FileSystemLoader('./templates'))
+ self.output_dir = output_dir
+ self.templates = {}
-def load_yaml(path):
- with open(path) as f:
- return yaml.load(f)
+ def _render(self, template, filename, **kwargs):
+ if template not in self.templates:
+ self.templates[template] = self.env.get_template(template)
-hosts = load_yaml(os.path.join(basepath, "metadata", "hosts"))
+ with open(os.path.join(self.output_dir, filename), "w+") as output:
+ output.write(self.templates[template].render(**kwargs))
-data = []
+ def host(self, host, hostdata):
+ print("Rendering: %s" % host)
+ hostdata['url'] = "%s.html" % host
+ self._render('host.html', hostdata['url'], **hostdata)
-for host in hosts['hosts']:
+ def index(self, data):
+ print("Rendering: index")
+ self._render('index.html', 'index.html', hosts=data)
- host_data = load_yaml(os.path.join(basepath, host))
- template = env.get_template('host.html')
+def load_yaml(*args):
+ with open(os.path.join(DATAPATH, *args)) as infile:
+ return yaml.load(infile)
- print("Rendering host: " + host)
- url = host + ".html"
- with open(os.path.join(www_dir, url),"w+") as f:
- f.write(template.render(**host_data))
-
- host_data['url'] = url
-
- data.append(host_data)
-
-
-template = env.get_template('index.html')
-
-
-print("Rendering host index")
-
-with open(os.path.join(www_dir, 'index.html'), "w+") as f:
- f.write(template.render(hosts=data))
-
-print("done")
+def main():
+ renderer = Renderer(WWW_DIR)
+ hosts = load_yaml("metadata", "hosts")
+ data = []
+ for host in sorted(hosts['hosts']):
+ hostdata = load_yaml(host)
+ renderer.host(host, hostdata)
+ data.append(hostdata)
+ renderer.index(data)
+if __name__ == '__main__':
+ main()