#!/usr/bin/env python #Filename: newtemp.py #Author: stayawake@lavabit.com # --- # Copyright (C) 2011 Christian Franke # # Permission is hereby granted to use and distribute this # file for any purpose, provided the above copyright notice # is kept in place. # import imp import os import os.path import sys import getopt import time import datetime from string import Template import ConfigParser import plugin class Page: def __init__(self, name): self.name = name data = { "content.html":"", "keywords":"", "desc_de":"", "desc_en":"", "head.html":"", } for c in data: try: with open(os.path.join(pagepath, name, c), "r") as f: data[c] = f.read() except Exception: if c != "head.html": sys.excepthook(*sys.exc_info()) self._data = plugin.plugin_manager.process_content(data) @property def html(self): #create template-string htmltext = Template(htmltemplate) htmltext = htmltext.substitute( template_date = datenow, template_chattopic = topic, template_keywords = self._data["keywords"], template_content = self._data["content.html"], template_desc_de = self._data["desc_de"], template_desc_en = self._data["desc_en"], template_head = self._data["head.html"] ) return htmltext def render_and_save(self): #write it to the outputfile target = os.path.join(targetdir, self.name + '.html') with open(target + '.new', 'w') as outputfile: outputfile.write(self.html) os.rename(target + '.new', target) configfile = "template.conf" verbose = False opts, args = getopt.getopt(sys.argv[1:], "c:vh", ["config=", "verbose", "help"]) for opt, arg in opts: if opt in ("-c", "--config"): configfile = arg elif opt in ("-v", "--verbose"): verbose = True elif opt in ("-h", "--help"): print "Please read the non-existing man page for further assistance" sys.exit(0) basedir = os.path.dirname(os.path.abspath(__file__)) def makeabs(path): if not os.path.isabs(path): return os.path.join(basedir, path) return path configfile = makeabs(configfile) config = ConfigParser.ConfigParser() config.read(configfile) path = makeabs(config.get("Default", "path")) targetdir = makeabs(config.get("Default", "target")) pagepath = os.path.join(path, "pages") templatepath = os.path.join(path, "template") topicpath = os.path.join(path, "topic") #set template htmltemplate = open(os.path.join(templatepath, "template.html"), "r").read() topic = open(os.path.join(topicpath, "topic"), "r").read() datenow = time.strftime("%Y-%m-%dT%H:%M:%S +0100") if __name__ == '__main__': if verbose: print "Pagepath: %s" % pagepath print "Templatepath: %s" % templatepath print "topicpath: %s" % topicpath print "datenow: %s" % datenow pluginlist = config.items('Plugins') for pluginname, pluginarg in pluginlist: modinfo = imp.find_module(pluginname) try: imp.load_module(pluginname, *modinfo) finally: modinfo[0].close() if __name__ == '__main__': for page in os.listdir(pagepath): if page.endswith('_template'): continue Page(page).render_and_save() if verbose: print "%s.html written" % page # vi: noexpandtab:tabstop=8:shiftwidth=8