Capitalize the class field in database entries.
Some logfiles capitalize it and some don't. It will now appear
consistently in the database and any database-derived pages.
That does not include recent.cgi, whose eventual status is still
undecided.
author
John "Elwin" Edwards
date
Tue, 23 Jun 2015 11:10:46 -0400 (2015-06-23)
parents
5b4ff5680037
children
d417016bbf73
line source
+ − #!/usr/bin/python3
+ −
+ − import os
+ − import sys
+ − import datetime
+ − import rlgall
+ − import pytz
+ −
+ − navbar = '<div class="nav"><a href="/">rlgallery.org</a> -> \
+ − <a href="/notes/">Notes</a> -> {0}</div>'
+ −
+ − rsshead = """<?xml version="1.0" encoding="UTF-8"?>
+ − <rss version="2.0">
+ − <channel>
+ − <title>Roguelike Gallery</title>
+ − <description>News and notes from the Roguelike Gallery.</description>
+ − <link>http://rlgallery.org/notes/</link>
+ − """
+ −
+ − indexintro = """<p>The Gallery's blog, with news and thoughts on roguelike
+ − games. A comment system is planned but does not exist yet. There is an
+ − <a href="feed.rss">RSS feed</a> for the benefit of robots.</p>
+ − """
+ −
+ − phead = rlgall.phead.replace("/scoring/scores.css", "notes.css")
+ −
+ − ptitle = '<h2 class="pagetitle">{0}</h2>\n'
+ −
+ − posthead = '<h3 class="posttitle">{0}</h2>\n'
+ −
+ − datediv = '<div class="datehead">{0}</div>\n'
+ −
+ − def noteurl(tag):
+ − return "http://rlgallery.org/notes/" + tag + ".html"
+ −
+ − def itementry(tagname, value):
+ − return " <{0}>{1}</{0}>\n".format(tagname, value)
+ −
+ − def fmtdate(dt):
+ − if dt == None:
+ − dt = datetime.datetime.now(pytz.utc)
+ − return dt.strftime("%a, %d %b %Y %H:%M:%S %z")
+ −
+ − def qdetag(istr):
+ − nstart = istr.find('>')
+ − if nstart < 0:
+ − return istr
+ − mstr = istr[nstart + 1:]
+ − nend = mstr.find('<')
+ − if nend < 0:
+ − return mstr
+ − return mstr[:nend]
+ −
+ − def mkindexfile(postdata, notedir):
+ − indexfile = open(notedir + "/index.html", "w")
+ − postdata.sort(key=lambda m: m[2], reverse=True)
+ − indexfile.write(phead.format("Roguelike Gallery Notes"))
+ − indexfile.write('<body>\n<h1>Roguelike Gallery Notes</h1>\n')
+ − indexfile.write(rlgall.navtop.format("Notes"))
+ − indexfile.write(indexintro)
+ − for note in postdata:
+ − indexfile.write(posthead.format(note[1]))
+ − datestr = note[2].strftime("%B %e, %Y")
+ − indexfile.write(datediv.format(datestr))
+ − if note[3][0] == '<':
+ − indexfile.write(note[3])
+ − else:
+ − indexfile.write('<p>' + note[3] + '</p>')
+ − indexfile.write('<p><a href="{0}.html">More</a></p>\n'.format(note[0]))
+ − indexfile.write(rlgall.pend)
+ − indexfile.close()
+ −
+ − def mkrssfile(postdata, notedir):
+ − rssfile = open(notedir + "/feed.rss", "w")
+ − rssfile.write(rsshead)
+ − nowstr = fmtdate(None)
+ − rssfile.write("<lastBuildDate>" + nowstr + "</lastBuildDate>\n")
+ − for post in postdata:
+ − rssfile.write("<item>\n")
+ − rssfile.write(itementry("title", post[1]))
+ − rssfile.write(itementry("link", noteurl(post[0])))
+ − rssfile.write(itementry("pubDate", fmtdate(post[2])))
+ − rssfile.write(itementry("description", qdetag(post[3])))
+ − rssfile.write("</item>\n")
+ − rssfile.write('</channel>\n</rss>\n')
+ −
+ − webdir = "/var/www/lighttpd/notes/"
+ − if len(sys.argv) > 1:
+ − srcdir = sys.argv[-1]
+ − else:
+ − srcdir = "."
+ −
+ − if "-f" in sys.argv[1:]:
+ − force = True
+ − else:
+ − force = False
+ −
+ − metadata = []
+ − anynew = False
+ −
+ − notefiles = os.listdir(srcdir)
+ − for note in notefiles:
+ − pagename = webdir + note + ".html"
+ − try:
+ − os.stat(pagename)
+ − except FileNotFoundError:
+ − anynew = True
+ − createpage = True
+ − else:
+ − # It already exists, only create it if given -f option
+ − createpage = force
+ − notefi = open(srcdir + "/" + note)
+ − if createpage:
+ − pagefi = open(pagename, "w")
+ − title = notefi.readline().rstrip()
+ − pdate = notefi.readline().rstrip()
+ − try:
+ − ddate = datetime.datetime.strptime(pdate, "%Y-%m-%d.%H:%M").replace(tzinfo=pytz.utc)
+ − except ValueError:
+ − continue
+ − firstline = notefi.readline().rstrip()
+ − metadata.append((note, title, ddate, firstline))
+ − if not createpage:
+ − # Only the metadata is needed, for the index
+ − notefi.close()
+ − continue
+ − pagefi.write(phead.format(title))
+ − pagefi.write('<body>\n<h1>Roguelike Gallery Notes</h1>\n')
+ − pagefi.write(navbar.format(title))
+ − pagefi.write(ptitle.format(title))
+ − pagefi.write(datediv.format(ddate.strftime("%B %e, %Y")))
+ − pagefi.write('<div class="content">\n')
+ − if firstline[0] == '<':
+ − pagefi.write(firstline)
+ − else:
+ − pagefi.write('<p>' + firstline + '</p>')
+ − for line in notefi:
+ − if line == '\n':
+ − continue
+ − elif line[0] == '<':
+ − pagefi.write(line)
+ − elif line[0] == '\\':
+ − pagefi.write(line[1:])
+ − else:
+ − pagefi.write('<p>' + line + '</p>')
+ − pagefi.write('</div>\n')
+ − pagefi.write(rlgall.pend)
+ − pagefi.close()
+ − notefi.close()
+ −
+ − if force or anynew:
+ − mkindexfile(metadata, webdir)
+ − mkrssfile(metadata, webdir)