annotate py/rlgnotes @ 72:1d8dc3ed22cf

Restore the default size of the high score list. In an era of megabyte JavaScript libraries, ten lines of text is not too much.
author John "Elwin" Edwards
date Sun, 20 Mar 2016 07:59:22 -0400
parents 5b4ff5680037
children d417016bbf73
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
61
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
1 #!/usr/bin/python3
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
2
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
3 import os
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
4 import sys
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
5 import datetime
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
6 import rlgall
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
7 import pytz
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
8
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
9 navbar = '<div class="nav"><a href="/">rlgallery.org</a> -&gt; \
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
10 <a href="/notes/">Notes</a> -&gt; {0}</div>'
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
11
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
12 rsshead = """<?xml version="1.0" encoding="UTF-8"?>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
13 <rss version="2.0">
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
14 <channel>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
15 <title>Roguelike Gallery</title>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
16 <description>News and notes from the Roguelike Gallery.</description>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
17 <link>http://rlgallery.org/notes/</link>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
18 """
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
19
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
20 indexintro = """<p>The Gallery's blog, with news and thoughts on roguelike
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
21 games. A comment system is planned but does not exist yet. There is an
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
22 <a href="feed.rss">RSS feed</a> for the benefit of robots.</p>
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
23 """
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
24
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
25 phead = rlgall.phead.replace("/scoring/scores.css", "notes.css")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
26
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
27 ptitle = '<h2 class="pagetitle">{0}</h2>\n'
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
28
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
29 posthead = '<h3 class="posttitle">{0}</h2>\n'
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
30
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
31 datediv = '<div class="datehead">{0}</div>\n'
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
32
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
33 def noteurl(tag):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
34 return "http://rlgallery.org/notes/" + tag + ".html"
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
35
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
36 def itementry(tagname, value):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
37 return " <{0}>{1}</{0}>\n".format(tagname, value)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
38
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
39 def fmtdate(dt):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
40 if dt == None:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
41 dt = datetime.datetime.now(pytz.utc)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
42 return dt.strftime("%a, %d %b %Y %H:%M:%S %z")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
43
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
44 def qdetag(istr):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
45 nstart = istr.find('>')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
46 if nstart < 0:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
47 return istr
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
48 mstr = istr[nstart + 1:]
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
49 nend = mstr.find('<')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
50 if nend < 0:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
51 return mstr
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
52 return mstr[:nend]
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
53
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
54 def mkindexfile(postdata, notedir):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
55 indexfile = open(notedir + "/index.html", "w")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
56 postdata.sort(key=lambda m: m[2], reverse=True)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
57 indexfile.write(phead.format("Roguelike Gallery Notes"))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
58 indexfile.write('<body>\n<h1>Roguelike Gallery Notes</h1>\n')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
59 indexfile.write(rlgall.navtop.format("Notes"))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
60 indexfile.write(indexintro)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
61 for note in postdata:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
62 indexfile.write(posthead.format(note[1]))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
63 datestr = note[2].strftime("%B %e, %Y")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
64 indexfile.write(datediv.format(datestr))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
65 if note[3][0] == '<':
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
66 indexfile.write(note[3])
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
67 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
68 indexfile.write('<p>' + note[3] + '</p>')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
69 indexfile.write('<p><a href="{0}.html">More</a></p>\n'.format(note[0]))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
70 indexfile.write(rlgall.pend)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
71 indexfile.close()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
72
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
73 def mkrssfile(postdata, notedir):
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
74 rssfile = open(notedir + "/feed.rss", "w")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
75 rssfile.write(rsshead)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
76 nowstr = fmtdate(None)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
77 rssfile.write("<lastBuildDate>" + nowstr + "</lastBuildDate>\n")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
78 for post in postdata:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
79 rssfile.write("<item>\n")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
80 rssfile.write(itementry("title", post[1]))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
81 rssfile.write(itementry("link", noteurl(post[0])))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
82 rssfile.write(itementry("pubDate", fmtdate(post[2])))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
83 rssfile.write(itementry("description", qdetag(post[3])))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
84 rssfile.write("</item>\n")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
85 rssfile.write('</channel>\n</rss>\n')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
86
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
87 webdir = "/var/www/lighttpd/notes/"
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
88 if len(sys.argv) > 1:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
89 srcdir = sys.argv[-1]
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
90 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
91 srcdir = "."
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
92
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
93 if "-f" in sys.argv[1:]:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
94 force = True
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
95 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
96 force = False
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
97
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
98 metadata = []
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
99 anynew = False
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
100
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
101 notefiles = os.listdir(srcdir)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
102 for note in notefiles:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
103 pagename = webdir + note + ".html"
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
104 try:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
105 os.stat(pagename)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
106 except FileNotFoundError:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
107 anynew = True
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
108 createpage = True
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
109 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
110 # It already exists, only create it if given -f option
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
111 createpage = force
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
112 notefi = open(srcdir + "/" + note)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
113 if createpage:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
114 pagefi = open(pagename, "w")
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
115 title = notefi.readline().rstrip()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
116 pdate = notefi.readline().rstrip()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
117 try:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
118 ddate = datetime.datetime.strptime(pdate, "%Y-%m-%d.%H:%M").replace(tzinfo=pytz.utc)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
119 except ValueError:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
120 continue
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
121 firstline = notefi.readline().rstrip()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
122 metadata.append((note, title, ddate, firstline))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
123 if not createpage:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
124 # Only the metadata is needed, for the index
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
125 notefi.close()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
126 continue
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
127 pagefi.write(phead.format(title))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
128 pagefi.write('<body>\n<h1>Roguelike Gallery Notes</h1>\n')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
129 pagefi.write(navbar.format(title))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
130 pagefi.write(ptitle.format(title))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
131 pagefi.write(datediv.format(ddate.strftime("%B %e, %Y")))
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
132 pagefi.write('<div class="content">\n')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
133 if firstline[0] == '<':
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
134 pagefi.write(firstline)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
135 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
136 pagefi.write('<p>' + firstline + '</p>')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
137 for line in notefi:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
138 if line == '\n':
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
139 continue
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
140 elif line[0] == '<':
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
141 pagefi.write(line)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
142 elif line[0] == '\\':
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
143 pagefi.write(line[1:])
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
144 else:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
145 pagefi.write('<p>' + line + '</p>')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
146 pagefi.write('</div>\n')
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
147 pagefi.write(rlgall.pend)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
148 pagefi.close()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
149 notefi.close()
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
150
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
151 if force or anynew:
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
152 mkindexfile(metadata, webdir)
5b4ff5680037 Add a basic blog manager.
John "Elwin" Edwards
parents:
diff changeset
153 mkrssfile(metadata, webdir)