added cc license information (rdf) to footer
templatewriter rewritten rss feed of trac integrated
This commit is contained in:
parent
fde9fb5996
commit
bbe38e4649
12 changed files with 310 additions and 59 deletions
|
@ -1,19 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
|
||||
import os, re
|
||||
try:
|
||||
import feedparser
|
||||
except ImportError:
|
||||
sys.stderr.write("Could not load python module 'feedparser'!\n")
|
||||
sys.stderr.write("Maybe you should run 'apt-get install python-feedparser.\n")
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
|
||||
class TemplateWriter:
|
||||
templatefile = "gerippe.tmpl"
|
||||
templatefile = "./gerippe.tmpl"
|
||||
tmpldir = "./placeholder"
|
||||
contentdir = "./content"
|
||||
tmplfileext = ".tmpl"
|
||||
outfileext = ".html"
|
||||
max_rss_items = 5
|
||||
## regular expressions of not-wanted file/directory names
|
||||
## for now: no svn, no vi-swap files, no backup files
|
||||
ignore_items = [ r'\.svn', r'\.swp$', r'~$' ]
|
||||
|
||||
def __init__(self):
|
||||
pass
|
||||
self.placeholder = self.__get_placeholder_dict()
|
||||
self.template = open(self.templatefile).read()
|
||||
|
||||
|
||||
def get_sorted(self, flist):
|
||||
|
@ -35,52 +45,59 @@ class TemplateWriter:
|
|||
return result
|
||||
|
||||
|
||||
def string_replace(self, infile, outfile):
|
||||
template = open(infile).read()
|
||||
open(outfile, "w").write(template)
|
||||
text = {}
|
||||
def __get_placeholder_dict(self):
|
||||
"""returns the common dictionary for all files - except for the 'entries'
|
||||
"""
|
||||
placeholder = {}
|
||||
for tmpl in self.get_sorted(self.get_filtered(os.listdir(self.tmpldir))):
|
||||
tmplfile = str(os.path.join(self.tmpldir, tmpl))
|
||||
tmplfile = os.path.join(self.tmpldir, tmpl)
|
||||
if not os.path.isfile(tmplfile):
|
||||
print " str.repl: cancelling %s - not a file" % tmplfile
|
||||
else:
|
||||
template = open(outfile).read()
|
||||
print " str.repl: using %s" % tmplfile
|
||||
newcontent = open(tmplfile).read()
|
||||
text[tmpl] = template.replace("<!-- $%s$ -->" % tmpl, newcontent)
|
||||
open(outfile, "w").write(text[tmpl])
|
||||
return
|
||||
placeholder[tmpl] = file(tmplfile).read()
|
||||
placeholder["rss_content"] = self.get_rss_info()
|
||||
return placeholder
|
||||
|
||||
|
||||
def build_sites(self):
|
||||
'''use all files ending with .tmpl'''
|
||||
for tmplfile in self.get_sorted(self.get_filtered(os.listdir("./"))):
|
||||
if tmplfile.rfind(self.tmplfileext) >= 1:
|
||||
infile = tmplfile
|
||||
(tmplfilename, tmplfileext)=os.path.splitext(tmplfile)
|
||||
outfile = tmplfilename + self.outfileext
|
||||
print "building: %s -> %s" % (tmplfile, outfile)
|
||||
self.string_replace(infile, outfile)
|
||||
return
|
||||
def get_entries(self, html_name):
|
||||
"""reads all files in the given directory sorted into a string
|
||||
"""
|
||||
entries = ""
|
||||
for entry in self.get_sorted(self.get_filtered(os.listdir(
|
||||
os.path.join(self.contentdir, html_name)))):
|
||||
entries += file(os.path.join(self.contentdir, html_name, entry)).read()
|
||||
return entries
|
||||
|
||||
|
||||
def build_sites_from_gerippe(self):
|
||||
print "Let's build some html files from: %s" % self.templatefile
|
||||
for html in self.get_sorted(self.get_filtered(os.listdir(self.contentdir))):
|
||||
print " building: %s%s" % (html, self.outfileext)
|
||||
entries = ""
|
||||
for entry in self.get_sorted(self.get_filtered(os.listdir(os.path.join(self.contentdir, html)))):
|
||||
print " adding entry: %s " % entry
|
||||
entries += open(os.path.join(self.contentdir, html, entry)).read()
|
||||
|
||||
template = open(self.templatefile).read()
|
||||
text = template.replace("<!-- $entries$ -->", entries)
|
||||
infile = html+".tmp"
|
||||
open(infile,"w").write(text)
|
||||
outfile = html+self.outfileext
|
||||
self.string_replace(infile, outfile)
|
||||
os.unlink(infile)
|
||||
self.placeholder["entries"] = self.get_entries(html)
|
||||
## start with the content of the template
|
||||
text = self.template
|
||||
## repeat substitution for five times - for recursive stuff
|
||||
text = text % self.placeholder
|
||||
text = text % self.placeholder
|
||||
text = text % self.placeholder
|
||||
text = text % self.placeholder
|
||||
text = text % self.placeholder
|
||||
## write the result
|
||||
outfile = open(html + self.outfileext, "w")
|
||||
outfile.write(text)
|
||||
outfile.close()
|
||||
return
|
||||
|
||||
|
||||
def get_rss_info(self):
|
||||
"""retrieve rss feed from http://devel.cryptobox.org/timeline"""
|
||||
timeline_url = r'http://devel.cryptobox.org/timeline?max=%d&wiki=off&ticket=on&changeset=on&milestone=off&format=rss' % self.max_rss_items
|
||||
entry_html = r'<li><p class="date">%(updated)s</p><h3><a href="%(link)s">%(title)s</a></h3>%(summary)s</li>'
|
||||
feed = feedparser.parse(timeline_url)
|
||||
if feed["entries"]:
|
||||
html_items = [ entry_html % e for e in feed["entries"] ]
|
||||
return '<ul class="recent_changes">\n' + '\n'.join(html_items) + '</ul>\n'
|
||||
else:
|
||||
return '<p>The latest development changes are temporarily unavailable. Sorry!</p>'
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue