Mercurial > hg > rlgallery-misc
comparison py/rlgalldb.py @ 19:78580bffc13d
Add high score list support for arogue5.
| author | John "Elwin" Edwards <elwin@sdf.org> |
|---|---|
| date | Mon, 17 Sep 2012 10:24:38 -0700 |
| parents | 5731d2ecaec4 |
| children | c05050f78d81 |
comparison
equal
deleted
inserted
replaced
| 18:5731d2ecaec4 | 19:78580bffc13d |
|---|---|
| 42 tblend = '</div>\n' | 42 tblend = '</div>\n' |
| 43 pend = "</body></html>\n" | 43 pend = "</body></html>\n" |
| 44 | 44 |
| 45 # This would be more useful if we had to do translation | 45 # This would be more useful if we had to do translation |
| 46 headerbook = {"endt":"End time", "score":"Score", "name":"Name", "xl":"XL", | 46 headerbook = {"endt":"End time", "score":"Score", "name":"Name", "xl":"XL", |
| 47 "fate":"Fate", "rank":"Rank", "game":"Game"} | 47 "fate":"Fate", "rank":"Rank", "game":"Game", "class": "Class"} |
| 48 # Queries for the games table | 48 # Queries for the games table |
| 49 offselstr = "SELECT offbytes FROM games WHERE gname = %s;" | 49 offselstr = "SELECT offbytes FROM games WHERE gname = %s;" |
| 50 newoffstr = "UPDATE games SET offbytes = %s WHERE gname = %s;" | 50 newoffstr = "UPDATE games SET offbytes = %s WHERE gname = %s;" |
| 51 | 51 |
| 52 # A representation of the UTC time zone. They say Py3k can better handle | 52 # A representation of the UTC time zone. They say Py3k can better handle |
| 395 # Class variables | 395 # Class variables |
| 396 fields = ["name", "score", "class", "xl", "fate", "endt"] | 396 fields = ["name", "score", "class", "xl", "fate", "endt"] |
| 397 rankfields = ["rank", "score", "name", "class", "xl", "fate", "endt"] | 397 rankfields = ["rank", "score", "name", "class", "xl", "fate", "endt"] |
| 398 pfields = ["score", "class", "xl", "fate", "endt"] | 398 pfields = ["score", "class", "xl", "fate", "endt"] |
| 399 def getHigh(self, n=10, offset=0): | 399 def getHigh(self, n=10, offset=0): |
| 400 return [] | 400 "Gets the n highest scores (starting at offset) from the database, \ |
| 401 returning a list of dicts." | |
| 402 qstr = "SELECT endt, score, name, xl, class, fate FROM {0} ORDER BY score DESC ".format(self.uname) | |
| 403 qvals = [] | |
| 404 try: | |
| 405 n = int(n) | |
| 406 except (ValueError, TypeError): | |
| 407 return [] | |
| 408 if n <= 0: | |
| 409 return [] | |
| 410 qstr += " LIMIT %s" | |
| 411 qvals.append(n) | |
| 412 try: | |
| 413 offset = int(offset) | |
| 414 except (ValueError, TypeError): | |
| 415 return [] | |
| 416 if n > 0: | |
| 417 qstr += " OFFSET %s" | |
| 418 qvals.append(offset) | |
| 419 qstr += ";" | |
| 420 conn = psycopg2.connect("dbname=rlg") | |
| 421 cur = conn.cursor() | |
| 422 cur.execute(qstr, qvals) | |
| 423 dictlist = [] | |
| 424 for record in cur: | |
| 425 ndict = {"game": self} | |
| 426 ndict["endt"] = record[0] | |
| 427 ndict["score"] = record[1] | |
| 428 ndict["name"] = record[2] | |
| 429 ndict["xl"] = record[3] | |
| 430 ndict["class"] = record[4] | |
| 431 ndict["fate"] = record[5] | |
| 432 dictlist.append(ndict) | |
| 433 cur.close() | |
| 434 conn.close() | |
| 435 return dictlist | |
| 401 def getRecent(self, n=20): | 436 def getRecent(self, n=20): |
| 402 return [] | 437 return [] |
| 403 def getPlayer(self, player): | 438 def getPlayer(self, player): |
| 404 return [] | 439 return [] |
| 405 | 440 |
| 424 entries = game.getPlayer(pname) | 459 entries = game.getPlayer(pname) |
| 425 if not entries: | 460 if not entries: |
| 426 ppagefi.write("<div>" + pname + " has not yet completed an expedition\ | 461 ppagefi.write("<div>" + pname + " has not yet completed an expedition\ |
| 427 in this dungeon.</div>\n") | 462 in this dungeon.</div>\n") |
| 428 else: | 463 else: |
| 464 entries.sort(key=lambda e: e["endt"]) | |
| 429 printTable(entries, RogueGame.pfields, ppagefi) | 465 printTable(entries, RogueGame.pfields, ppagefi) |
| 430 scoresum = 0 | 466 scoresum = 0 |
| 431 for entry in entries: | 467 for entry in entries: |
| 432 scoresum += int(entry["score"]) | 468 scoresum += int(entry["score"]) |
| 433 avgscr = scoresum / len(entries) | 469 avgscr = scoresum / len(entries) |
