From ef8404ad29a9f1cb42d56d18a5f02cbe8b77daec Mon Sep 17 00:00:00 2001 From: Alexander Sulfrian Date: Wed, 22 May 2013 12:05:30 +0200 Subject: render: refactor the whole thing for better python style --- render.py | 69 +++++++++++++++++++++++++++++++++------------------------------ 1 file 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() -- cgit v1.2.3-1-g7c22