Mercurial > hg > rlgallery-misc
annotate py/rlgall.py @ 81:2cca66b3e262
Add some more links to the page footers.
author | John "Elwin" Edwards |
---|---|
date | Tue, 30 Jan 2018 18:28:24 -0500 |
parents | 67bcca6e3cb1 |
children | d417016bbf73 |
rev | line source |
---|---|
33
25843238434a
Change the Python module's name back to rlgall.
John "Elwin" Edwards
parents:
31
diff
changeset
|
1 # rlgall.py |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
2 # Module for the Roguelike Gallery, using a postgres database |
30 | 3 # Requires Python 3.3 |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
4 |
42
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
5 import re |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
6 import os |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
7 import psycopg2 |
30 | 8 from datetime import datetime |
9 import pytz | |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
10 import html |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
11 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
12 # Configuration |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
13 logdir = "/var/dgl/var/games/roguelike/" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
14 webdir = "/var/www/lighttpd/scoring/" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
15 ppagename = webdir + "players/{0}.html" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
16 hpagename = webdir + "highscores.html" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
17 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
18 # HTML fragments for templating |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
19 phead = """<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
20 <html><head> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
21 <title>{0}</title> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
22 <link rel="stylesheet" href="/scoring/scores.css" type="text/css"> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
23 </head> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
24 """ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
25 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
26 ptop = """<body> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
27 <h1>Yendor Guild</h1> |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
28 """ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
29 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
30 navtop = '<div class="nav"><a href="/">rlgallery.org</a> -> {0}</div>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
31 navscore = '<div class="nav"><a href="/">rlgallery.org</a> -> \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
32 <a href="/scoring/">Scores</a> -> {0}</div>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
33 navplayer = '<div class="nav"><a href="/">rlgallery.org</a> -> \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
34 <a href="/scoring/">Scores</a> -> <a href="/scoring/players/">Players</a> \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
35 -> {0}</div>' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
36 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
37 pti = '<h2>{0}</h2>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
38 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
39 secthead = '<h3>{0}</h3>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
40 tblhead = '<div class="stable">\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
41 rowstart = '<div class="sentry">\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
42 rowend = '</div>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
43 cell = ' <span class="sdata">{0}</span>\n' |
31 | 44 rcell = ' <span class="sdatar">{0}</span>\n' |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
45 hcell = ' <span class="shdata">{0}</span>\n' |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
46 tblend = '</div>\n' |
34
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
47 pend = """<div class="foot"> |
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
48 <a href="/">rlgallery.org</a> |
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
49 <a href="/recent.cgi">Recent Games</a> |
36 | 50 <a href="/scoring/high.cgi">High Scores</a> |
81
2cca66b3e262
Add some more links to the page footers.
John "Elwin" Edwards
parents:
68
diff
changeset
|
51 <a href="/notes/">Notes</a> |
2cca66b3e262
Add some more links to the page footers.
John "Elwin" Edwards
parents:
68
diff
changeset
|
52 <a href="https://rlgallery.org:8080/">Play</a> |
34
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
53 </div> |
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
54 </body></html> |
86b616d88020
Add a footer with some links to the Web pages.
John "Elwin" Edwards
parents:
33
diff
changeset
|
55 """ |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
56 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
57 # This would be more useful if we had to do translation |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
58 headerbook = {"endt":"End time", "score":"Score", "name":"Name", "xl":"XL", |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
59 "fate":"Fate", "rank":"Rank", "game":"Game", "class":"Class", |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
60 "depth":"Depth"} |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
61 # Queries for the games table |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
62 offselstr = "SELECT offbytes FROM games WHERE gname = %s;" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
63 newoffstr = "UPDATE games SET offbytes = %s WHERE gname = %s;" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
64 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
65 def getconn(): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
66 "Returns a database connection, or None if the connection fails." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
67 try: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
68 conn = psycopg2.connect("dbname=rlg") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
69 except psycopg2.OperationalError: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
70 return None |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
71 return conn |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
72 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
73 def recnameToTS(filename): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
74 pattern = "%Y-%m-%d.%H:%M:%S.ttyrec" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
75 try: |
30 | 76 dt = datetime.strptime(filename, pattern).replace(tzinfo=pytz.utc) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
77 return dt |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
78 except ValueError: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
79 return None |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
80 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
81 def playerlink(name): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
82 "Returns a link to a player's page" |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
83 escname = html.escape(name) |
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
84 lstr = '<a href="/scoring/players/' + escname + '.html">' + escname + '</a>' |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
85 return lstr |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
86 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
87 def linktoArchive(entry): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
88 "Takes an entry dict and returns a link to the ttyrec archivist." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
89 lstr = '<a href="/archive.cgi?name={0};game={1};time={2}">{3}</a>' |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
90 linktext = entry["endt"].strftime("%Y/%m/%d %H:%M:%S") |
30 | 91 stamp = int(entry["endt"].timestamp()) |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
92 escname = html.escape(entry["name"]) |
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
93 return lstr.format(escname, entry["game"].uname, stamp, linktext) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
94 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
95 def maketablerow(cells, isheader=None): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
96 "Takes a list of strings and returns a HTML table row with each string \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
97 in its own cell. isheader will make them header cells, obviously." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
98 if isheader: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
99 celler = hcell |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
100 else: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
101 celler = cell |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
102 rowstr = rowstart |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
103 for entry in cells: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
104 rowstr = rowstr + celler.format(entry) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
105 rowstr = rowstr + rowend |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
106 return rowstr |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
107 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
108 def printTable(entries, fields, of): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
109 "Takes a list of entry dicts and a list of field strings and writes a \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
110 HTML table to of." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
111 of.write(tblhead) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
112 clist = [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
113 for field in fields: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
114 if field in headerbook: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
115 clist.append(headerbook[field]) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
116 else: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
117 clist.append("{0}".format(field)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
118 of.write(maketablerow(clist, True)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
119 rnum = 0 |
35 | 120 for entry in entries: |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
121 clist = [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
122 for field in fields: |
35 | 123 if field in entry: |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
124 thing = entry[field] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
125 if field == "game": |
31 | 126 clist.append((thing.name, cell)) |
35 | 127 elif field == "xl" or field == "score" or field == "rank": # Numerics |
31 | 128 clist.append((str(thing), rcell)) |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
129 elif field == "depth" or field == "maxdepth": |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
130 clist.append((str(thing), cell)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
131 elif field == "name": |
31 | 132 clist.append((playerlink(thing), cell)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
133 elif field == "fate": |
31 | 134 clist.append((thing, cell)) |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
135 elif field == "endt": |
31 | 136 clist.append((linktoArchive(entry), cell)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
137 else: |
31 | 138 clist.append(("{0}".format(thing), cell)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
139 else: |
31 | 140 clist.append(("N/A", cell)) |
141 rowstr = rowstart + "".join([ t.format(s) for (s, t) in clist ]) + rowend | |
142 of.write(rowstr) | |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
143 of.write(tblend) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
144 return |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
145 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
146 class Game: |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
147 def __init__(self, name, uname): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
148 pass |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
149 def logtoDict(self, entry): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
150 "Processes a log entry string, returning a dict." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
151 ndict = {"game": self} |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
152 entrylist = entry.strip().split(self.logdelim, len(self.logspec) - 1) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
153 for item, value in zip(self.logspec, entrylist): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
154 if self.sqltypes[item] == "int": |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
155 ndict[item] = int(value) |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
156 if self.sqltypes[item] == "bool": |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
157 ndict[item] = bool(int(value)) |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
158 elif self.sqltypes[item] == "timestamptz": |
30 | 159 ndict[item] = datetime.fromtimestamp(int(value), pytz.utc) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
160 else: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
161 ndict[item] = value |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
162 return ndict |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
163 def getEntryDicts(self, entfile, entlist): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
164 "Reads logfile entries from entfile, interprets them according to the \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
165 instructions in self.logspec/logdelim, and adds them as dicts to entlist." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
166 while True: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
167 nextentry = entfile.readline() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
168 if not nextentry: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
169 break |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
170 if nextentry[-1] != '\n': |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
171 break |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
172 entlist.append(self.logtoDict(nextentry)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
173 return |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
174 def loadnew(self): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
175 conn = getconn() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
176 if conn == None: |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
177 return [] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
178 cur = conn.cursor() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
179 # Get the previous offset |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
180 cur.execute(offselstr, [self.uname]) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
181 offset = cur.fetchone()[0] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
182 newlist = [] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
183 try: |
30 | 184 scr = open(self.scores, encoding="utf-8") |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
185 scr.seek(offset) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
186 self.getEntryDicts(scr, newlist) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
187 except IOError: |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
188 noffset = offset # Can't read anything, assume no new games |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
189 else: |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
190 noffset = scr.tell() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
191 scr.close() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
192 cur.execute(newoffstr, [noffset, self.uname]) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
193 # The new players must already be added to the players table. |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
194 updatenames = set([ e["name"] for e in newlist ]) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
195 self.postprocess(newlist) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
196 self.putIntoDB(newlist, conn) |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
197 cur.close() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
198 conn.close() |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
199 return updatenames |
18
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
200 def postprocess(self, gamelist): |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
201 "Default postprocessing function: adds start time and ttyrec list" |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
202 names = set([ e["name"] for e in gamelist ]) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
203 conn = getconn() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
204 if conn == None: |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
205 return [] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
206 cur = conn.cursor() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
207 for nameF in names: |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
208 # Get all this player's games ordered by time |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
209 itsEntries = [ entry for entry in gamelist if entry["name"] == nameF ] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
210 itsEntries.sort(key=lambda e: e["endt"]) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
211 # Find the end time of the latest game already in the db |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
212 tquery = "SELECT endt FROM {0} WHERE name = %s ORDER BY endt DESC LIMIT 1;".format(self.uname) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
213 cur.execute(tquery, [nameF]) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
214 result = cur.fetchone() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
215 if result: |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
216 prev = result[0] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
217 else: |
30 | 218 prev = datetime.fromtimestamp(0, pytz.utc); |
18
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
219 ttyrecdir = "/var/dgl/dgldir/ttyrec/{0}/{1}/".format(nameF, self.uname) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
220 allfilekeys = [ (recnameToTS(f), f) for f in os.listdir(ttyrecdir) ] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
221 vfilekeys = [ e for e in allfilekeys if e[0] > prev ] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
222 vfilekeys.sort(key=lambda e: e[0]) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
223 # Now determine startt and ttyrecs for each game |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
224 for i in range(0, len(itsEntries)): |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
225 if i == 0: |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
226 lowlim = prev |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
227 else: |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
228 lowlim = itsEntries[i-1]["endt"] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
229 hilim = itsEntries[i]["endt"] |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
230 recs = [ k[1] for k in vfilekeys if lowlim <= k[0] < hilim ] |
68
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
231 if len(recs) == 0: |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
232 # There inexplicably are no files. TODO log an error. |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
233 itsEntries[i]["startt"] = lowlim |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
234 itsEntries[i]["ttyrecs"] = [] |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
235 else: |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
236 itsEntries[i]["startt"] = recnameToTS(recs[0]) |
67bcca6e3cb1
Prevent crashes if no ttyrec files can be associated with a game.
John "Elwin" Edwards
parents:
66
diff
changeset
|
237 itsEntries[i]["ttyrecs"] = recs |
18
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
238 cur.close() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
239 conn.close() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
240 def putIntoDB(self, dictlist, conn): |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
241 cur = conn.cursor() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
242 cur.executemany(self.insertq, [ d for d in dictlist if d["game"] == self ]) |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
243 conn.commit() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
244 cur.close() |
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
245 return |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
246 def tablerecent(self, of): |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
247 "Prints the most recent games from the logfile, NOT the database." |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
248 newest = [] |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
249 try: |
30 | 250 scr = open(self.scores, encoding="utf-8") |
251 except FileNotFoundError: | |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
252 pass |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
253 else: |
30 | 254 # Text streams don't support random seeking. |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
255 try: |
30 | 256 scr.buffer.seek(self.lookback, 2) |
257 except OSError: | |
258 scr.buffer.seek(0) # The file wasn't that long, start at the beginning | |
259 if scr.buffer.tell() != 0: | |
260 scr.buffer.readline() # Throw away the incomplete line | |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
261 self.getEntryDicts(scr, newest) |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
262 newest.reverse() |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
263 scr.close() |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
264 of.write(secthead.format(self.name)) |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
265 if not newest: |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
266 of.write("<div>No one has braved this dungeon yet.</div>\n") |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
267 else: |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
268 printTable(newest, self.fields, of) |
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
269 return |
50
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
270 def getHigh(self, n=10, offset=0, inittime=None, finaltime=None): |
35 | 271 "Gets the n highest scores (starting at offset) from the database, \ |
272 returning a list of dicts." | |
273 qfields = [] | |
274 for f in self.rankfields: | |
275 if f == "rank": | |
276 qfields.append("rank(*) OVER (ORDER BY score DESC)") | |
277 else: | |
278 qfields.append(f) | |
50
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
279 qstr = "SELECT " + ", ".join(qfields) + " FROM {0}".format(self.uname) |
35 | 280 qvals = [] |
50
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
281 if isinstance(inittime, datetime): |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
282 qstr += " WHERE endt >= %s" |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
283 qvals.append(inittime) |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
284 if isinstance(finaltime, datetime): |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
285 if finaltime < inittime: |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
286 return [] |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
287 qstr += " AND endt < %s" |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
288 qvals.append(finaltime) |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
289 elif isinstance(finaltime, datetime): |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
290 qstr += " WHERE endt < %s" |
4549b3c0cd28
rlgall.py: add time selection to Game.getHigh().
John "Elwin" Edwards
parents:
49
diff
changeset
|
291 qvals.append(finaltime) |
35 | 292 try: |
293 n = int(n) | |
294 except (ValueError, TypeError): | |
295 return [] | |
296 if n <= 0: | |
297 return [] | |
298 qstr += " LIMIT %s" | |
299 qvals.append(n) | |
300 try: | |
301 offset = int(offset) | |
302 except (ValueError, TypeError): | |
303 return [] | |
304 if offset > 0: | |
305 qstr += " OFFSET %s" | |
306 qvals.append(offset) | |
307 qstr += ";" | |
308 conn = psycopg2.connect("dbname=rlg") | |
309 cur = conn.cursor() | |
310 cur.execute(qstr, qvals) | |
311 cols = [ col.name for col in cur.description ] | |
312 data = [ dict(zip(cols, row)) for row in cur.fetchall() ] | |
313 cur.close() | |
314 conn.close() | |
315 for d in data: | |
316 d["game"] = self | |
317 return data | |
45
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
318 def getXLCounts(self, nmax=15): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
319 "Returns a list of (xlevel, gamecount) pairs." |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
320 lquery = "SELECT count(*) FROM {0} WHERE xl = %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
321 mquery = "SELECT count(*) FROM {0} WHERE xl >= %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
322 try: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
323 nmax = int(nmax) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
324 except (ValueError, TypeError): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
325 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
326 if nmax <= 0: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
327 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
328 xlevels = range(1, nmax) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
329 results = [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
330 conn = psycopg2.connect("dbname=rlg") |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
331 cur = conn.cursor() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
332 for xl in xlevels: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
333 cur.execute(lquery, [xl]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
334 results.append((xl, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
335 cur.execute(mquery, [nmax]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
336 results.append((nmax, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
337 cur.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
338 conn.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
339 return results |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
340 def getDepthCounts(self, nmax=30): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
341 "Returns a list of (maxdepth, gamecount) pairs." |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
342 dqry = "SELECT count(*) FROM {0} WHERE maxdepth = %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
343 mqry = "SELECT count(*) FROM {0} WHERE maxdepth >= %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
344 try: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
345 nmax = int(nmax) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
346 except (ValueError, TypeError): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
347 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
348 if nmax <= 0: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
349 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
350 depths = range(1, nmax) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
351 results = [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
352 conn = psycopg2.connect("dbname=rlg") |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
353 cur = conn.cursor() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
354 for lev in depths: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
355 cur.execute(dqry, [lev]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
356 results.append((lev, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
357 cur.execute(mqry, [nmax]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
358 results.append((nmax, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
359 cur.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
360 conn.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
361 return results |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
362 def getScoreCounts(self, blocks=10, size=1000): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
363 "Returns a list of (minscore, gamecount) pairs." |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
364 sqry = "SELECT count(*) FROM {0} WHERE score >= %s AND score < %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
365 mqry = "SELECT count(*) FROM {0} WHERE score >= %s;".format(self.uname) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
366 try: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
367 blocks = int(blocks) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
368 size = int(size) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
369 except (ValueError, TypeError): |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
370 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
371 if blocks <= 0 or size <= 0: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
372 return [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
373 marks = range(blocks - 1) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
374 results = [] |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
375 conn = psycopg2.connect("dbname=rlg") |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
376 cur = conn.cursor() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
377 for m in marks: |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
378 cur.execute(sqry, [m * size, (m + 1) * size]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
379 results.append((m * size, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
380 cur.execute(mqry, [(blocks - 1) * size]) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
381 results.append(((blocks - 1) * size, cur.fetchone()[0])) |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
382 cur.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
383 conn.close() |
0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
John "Elwin" Edwards
parents:
42
diff
changeset
|
384 return results |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
385 # End Game class definition |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
386 |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
387 class RogueGame(Game): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
388 def __init__(self, name, uname, suffix): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
389 self.name = name |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
390 self.uname = uname |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
391 self.scores = logdir + uname + ".log" |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
392 self.logspec = ["endt", "score", "name", "xl", "fate"] |
42
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
393 self.sqltypes = {"endt": "timestamptz", "score": "int", "name": "text", |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
394 "xl": "int", "fate": "text", "ttyrecs": "text ARRAY", |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
395 "startt": "timestamptz", "depth": "int", "maxdepth": "int"} |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
396 self.logdelim = " " |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
397 self.lookback = -1500 |
30 | 398 # Construct the insert query |
399 fields = self.sqltypes.keys() | |
400 colspec = ", ".join(fields) | |
401 valspec = ", ".join([ "%({})s".format(c) for c in fields ]) | |
402 self.insertq = "INSERT INTO {0} ({1}) VALUES ({2});".format(self.uname, | |
18
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
403 colspec, valspec) |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
404 # Class variables, used by some methods |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
405 fields = ["name", "score", "xl", "fate", "endt"] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
406 rankfields = ["rank", "score", "name", "xl", "fate", "endt"] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
407 pfields = ["score", "xl", "fate", "endt"] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
408 def getRecent(self, n=20): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
409 "Gets the n most recent games out of the database, returning a list \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
410 of dicts." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
411 try: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
412 n = int(n) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
413 except (ValueError, TypeError): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
414 return [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
415 if n <= 0: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
416 return [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
417 dictlist = [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
418 conn = psycopg2.connect("dbname=rlg") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
419 cur = conn.cursor() |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
420 qstr = "SELECT endt, score, name, xl, fate, startt FROM {0} ORDER BY endt DESC \ |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
421 LIMIT %s;".format(self.uname) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
422 cur.execute(qstr, [n]) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
423 for record in cur: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
424 # This should be less hardcodish |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
425 ndict = {"game": self} |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
426 ndict["endt"] = record[0] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
427 ndict["score"] = record[1] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
428 ndict["name"] = record[2] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
429 ndict["xl"] = record[3] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
430 ndict["fate"] = record[4] |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
431 ndict["startt"] = record[5] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
432 dictlist.append(ndict) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
433 cur.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
434 conn.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
435 return dictlist |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
436 def getPlayer(self, player): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
437 "Gets all player's games from the database." |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
438 qstr = "SELECT endt, score, xl, fate, startt FROM " + self.uname + " WHERE name = %s;" |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
439 conn = getconn() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
440 if conn == None: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
441 return [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
442 cur = conn.cursor() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
443 entries = [] |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
444 cur.execute(qstr, [player]) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
445 for record in cur: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
446 ndict = {"game": self} |
66
6542a7cf826b
Fix links from player pages to the ttyrec archive.
John "Elwin" Edwards
parents:
64
diff
changeset
|
447 ndict["name"] = player |
1
def7fecbd437
Switch to SQL timestamps.
John "Elwin" Edwards <elwin@sdf.org>
parents:
0
diff
changeset
|
448 ndict["endt"] = record[0] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
449 ndict["score"] = record[1] |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
450 ndict["xl"] = record[2] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
451 ndict["fate"] = record[3] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
452 ndict["startt"] = record[4] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
453 entries.append(ndict) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
454 cur.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
455 conn.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
456 return entries |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
457 def putIntoDB(self, dictlist, conn): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
458 "Add the entries in dictlist to the database through connection conn, \ |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
459 which needs the INSERT privilege." |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
460 cur = conn.cursor() |
30 | 461 cur.executemany(self.insertq, [ d for d in dictlist if d["game"] == self ]) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
462 conn.commit() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
463 cur.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
464 return |
42
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
465 def postprocess(self, gamelist): |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
466 lre = re.compile("^(quit|killed by (.*)) on level ([0-9]*)( \\[max ([0-9]*)\\] with the Amulet)?$") |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
467 wre = re.compile("^escaped with the Amulet \\[deepest level: ([0-9]*)\\]$") |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
468 for d in gamelist: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
469 m = lre.match(d["fate"]) |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
470 if m: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
471 d["depth"] = int(m.group(3)) |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
472 if m.group(4): |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
473 d["maxdepth"] = int(m.group(5)) |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
474 else: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
475 d["maxdepth"] = d["depth"] |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
476 else: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
477 m = wre.match(d["fate"]) |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
478 if m: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
479 d["depth"] = 0 |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
480 d["maxdepth"] = int(m.group(1)) |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
481 else: |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
482 # Something went wrong |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
483 d["depth"] = -1 |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
484 d["maxdepth"] = -1 |
e1de8aeb5ed4
Add depth and maxdepth columns to the RogueGame tables.
John "Elwin" Edwards
parents:
41
diff
changeset
|
485 Game.postprocess(self, gamelist) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
486 # End RogueGame class definition |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
487 |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
488 class ARogueGame(Game): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
489 def __init__(self, name, uname, suffix): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
490 self.name = name |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
491 self.uname = uname |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
492 self.scores = logdir + uname + ".log" |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
493 self.logspec = ["endt", "score", "name", "xl", "class", "depth", |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
494 "maxdepth", "quest", "hadquest", "fate"] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
495 self.sqltypes = {"endt": "timestamptz", "score": "int", |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
496 "name": "varchar(20)", "xl": "int", "class": "text", "depth": "int", |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
497 "maxdepth": "int", "quest": "int", "hadquest": "bool", |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
498 "fate": "text", "ttyrecs": "text ARRAY", "startt": "timestamptz"} |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
499 self.logdelim = " " |
21
453278a81371
Add tablerecent() so recent.cgi will work as before.
John "Elwin" Edwards <elwin@sdf.org>
parents:
20
diff
changeset
|
500 self.lookback = -1800 |
30 | 501 # Construct the insert query |
502 fields = self.sqltypes.keys() | |
503 colspec = ", ".join(fields) | |
504 valspec = ", ".join([ "%({})s".format(c) for c in fields ]) | |
505 self.insertq = "INSERT INTO {0} ({1}) VALUES ({2});".format(self.uname, | |
18
5731d2ecaec4
Store arogue5 results in the database.
John "Elwin" Edwards <elwin@sdf.org>
parents:
17
diff
changeset
|
506 colspec, valspec) |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
507 # Class variables |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
508 fields = ["name", "score", "class", "xl", "fate", "depth", "endt"] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
509 rankfields = ["rank", "score", "name", "class", "xl", "fate", "depth", "endt"] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
510 pfields = ["score", "class", "xl", "fate", "depth", "endt"] |
64
86ae333bb4c0
Capitalize the class field in database entries.
John "Elwin" Edwards
parents:
63
diff
changeset
|
511 def postprocess(self, gamelist): |
86ae333bb4c0
Capitalize the class field in database entries.
John "Elwin" Edwards
parents:
63
diff
changeset
|
512 "Enforces consistent capitalization of the class title." |
86ae333bb4c0
Capitalize the class field in database entries.
John "Elwin" Edwards
parents:
63
diff
changeset
|
513 for d in gamelist: |
86ae333bb4c0
Capitalize the class field in database entries.
John "Elwin" Edwards
parents:
63
diff
changeset
|
514 d["class"] = d["class"].capitalize() |
86ae333bb4c0
Capitalize the class field in database entries.
John "Elwin" Edwards
parents:
63
diff
changeset
|
515 Game.postprocess(self, gamelist) |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
516 def getRecent(self, n=20): |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
517 return [] |
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
518 def getPlayer(self, player): |
20
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
519 "Gets all player's games from the database." |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
520 qstr = "SELECT endt, score, xl, class, fate, depth FROM " + self.uname + " WHERE name = %s;" |
20
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
521 conn = getconn() |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
522 if conn == None: |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
523 return [] |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
524 cur = conn.cursor() |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
525 entries = [] |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
526 cur.execute(qstr, [player]) |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
527 for record in cur: |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
528 ndict = {"game": self} |
66
6542a7cf826b
Fix links from player pages to the ttyrec archive.
John "Elwin" Edwards
parents:
64
diff
changeset
|
529 ndict["name"] = player |
20
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
530 ndict["endt"] = record[0] |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
531 ndict["score"] = record[1] |
62
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
532 ndict["xl"] = record[2] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
533 ndict["class"] = record[3] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
534 ndict["fate"] = record[4] |
df7acc5653b3
Make the final depth appear in Advanced Rogue 5 tables.
John "Elwin" Edwards
parents:
50
diff
changeset
|
535 ndict["depth"] = record[5] |
20
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
536 entries.append(ndict) |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
537 cur.close() |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
538 conn.close() |
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
539 return entries |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
540 |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
541 rogue3 = RogueGame("Rogue V3", "rogue3", "r3") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
542 rogue4 = RogueGame("Rogue V4", "rogue4", "r4") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
543 rogue5 = RogueGame("Rogue V5", "rogue5", "r5") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
544 srogue = RogueGame("Super-Rogue", "srogue", "sr") |
17
7f7b3da664d6
Begin adding arogue5 support to the recorder script.
John "Elwin" Edwards <elwin@sdf.org>
parents:
4
diff
changeset
|
545 arogue5 = ARogueGame("Advanced Rogue 5", "arogue5", "ar5") |
63
ad103f9f2e3a
Add support for Advanced Rogue 7 and XRogue.
John "Elwin" Edwards
parents:
62
diff
changeset
|
546 arogue7 = ARogueGame("Advanced Rogue 7", "arogue7", "ar7") |
ad103f9f2e3a
Add support for Advanced Rogue 7 and XRogue.
John "Elwin" Edwards
parents:
62
diff
changeset
|
547 xrogue = ARogueGame("XRogue", "xrogue", "xr") |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
548 |
63
ad103f9f2e3a
Add support for Advanced Rogue 7 and XRogue.
John "Elwin" Edwards
parents:
62
diff
changeset
|
549 gamelist = [rogue3, rogue4, rogue5, srogue, arogue5, arogue7, xrogue] |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
550 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
551 def playerpage(pname): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
552 "Generate a player's HTML page" |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
553 # Write the beginning of the page |
30 | 554 ppagefi = open(ppagename.format(pname), "w", encoding="utf-8") |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
555 cleanpname = html.escape(pname) |
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
556 ppagefi.write(phead.format(cleanpname)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
557 ppagefi.write(ptop) |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
558 ppagefi.write(navplayer.format(cleanpname)) |
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
559 ppagefi.write(pti.format("Results for " + cleanpname)) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
560 for game in gamelist: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
561 ppagefi.write(secthead.format(game.name)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
562 entries = game.getPlayer(pname) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
563 if not entries: |
49
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
564 ppagefi.write("<div>" + cleanpname + " has not yet completed an " + |
6138c27d1950
Escape the player's name when printing it into HTML.
John "Elwin" Edwards
parents:
45
diff
changeset
|
565 "expedition in this dungeon.</div>\n") |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
566 else: |
19
78580bffc13d
Add high score list support for arogue5.
John "Elwin" Edwards <elwin@sdf.org>
parents:
18
diff
changeset
|
567 entries.sort(key=lambda e: e["endt"]) |
20
c05050f78d81
Make arogue5 scores appear on the player pages too.
John "Elwin" Edwards <elwin@sdf.org>
parents:
19
diff
changeset
|
568 printTable(entries, game.pfields, ppagefi) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
569 scoresum = 0 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
570 for entry in entries: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
571 scoresum += int(entry["score"]) |
30 | 572 avgscr = scoresum // len(entries) |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
573 ppagefi.write("<p>Average score: {0}</p>\n".format(avgscr)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
574 # That should settle it. Print the end; then stop. |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
575 ppagefi.write(pend) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
576 ppagefi.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
577 return |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
578 |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
579 def highpage(): |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
580 # open the page and print the beginning |
30 | 581 highpfi = open(hpagename, "w", encoding="utf-8") |
0
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
582 highpfi.write(phead.format("High Scores")) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
583 highpfi.write(ptop) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
584 highpfi.write(navscore.format("High Scores")) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
585 highpfi.write(pti.format("List of High Scores")) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
586 for game in gamelist: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
587 highpfi.write(secthead.format(game.name)) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
588 entries = game.getHigh(40) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
589 if not entries: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
590 highpfi.write("<div>No one has braved this dungeon yet.</div>\n") |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
591 else: |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
592 printTable(entries, game.rankfields, highpfi) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
593 # That should finish it. |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
594 highpfi.write(pend) |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
595 highpfi.close() |
5ba2123d2c20
Put this project under version control, finally.
John "Elwin" Edwards <elwin@sdf.org>
parents:
diff
changeset
|
596 return |