Mercurial > hg > rlgallery-misc
comparison py/rlgall.py @ 45:0f4163dbbafc
SVG charts: separate database-querying and chart-printing code.
Create Game methods in rlgall.py to get histogram data for score, xl,
maxdepth. In stats2.py, make the chart-printing functions use this
data and avoid running hard-coded queries.
author | John "Elwin" Edwards |
---|---|
date | Thu, 16 Jan 2014 16:25:09 -0800 |
parents | e1de8aeb5ed4 |
children | 6138c27d1950 |
comparison
equal
deleted
inserted
replaced
44:7c789e87ee5d | 45:0f4163dbbafc |
---|---|
294 cur.close() | 294 cur.close() |
295 conn.close() | 295 conn.close() |
296 for d in data: | 296 for d in data: |
297 d["game"] = self | 297 d["game"] = self |
298 return data | 298 return data |
299 def getXLCounts(self, nmax=15): | |
300 "Returns a list of (xlevel, gamecount) pairs." | |
301 lquery = "SELECT count(*) FROM {0} WHERE xl = %s;".format(self.uname) | |
302 mquery = "SELECT count(*) FROM {0} WHERE xl >= %s;".format(self.uname) | |
303 try: | |
304 nmax = int(nmax) | |
305 except (ValueError, TypeError): | |
306 return [] | |
307 if nmax <= 0: | |
308 return [] | |
309 xlevels = range(1, nmax) | |
310 results = [] | |
311 conn = psycopg2.connect("dbname=rlg") | |
312 cur = conn.cursor() | |
313 for xl in xlevels: | |
314 cur.execute(lquery, [xl]) | |
315 results.append((xl, cur.fetchone()[0])) | |
316 cur.execute(mquery, [nmax]) | |
317 results.append((nmax, cur.fetchone()[0])) | |
318 cur.close() | |
319 conn.close() | |
320 return results | |
321 def getDepthCounts(self, nmax=30): | |
322 "Returns a list of (maxdepth, gamecount) pairs." | |
323 dqry = "SELECT count(*) FROM {0} WHERE maxdepth = %s;".format(self.uname) | |
324 mqry = "SELECT count(*) FROM {0} WHERE maxdepth >= %s;".format(self.uname) | |
325 try: | |
326 nmax = int(nmax) | |
327 except (ValueError, TypeError): | |
328 return [] | |
329 if nmax <= 0: | |
330 return [] | |
331 depths = range(1, nmax) | |
332 results = [] | |
333 conn = psycopg2.connect("dbname=rlg") | |
334 cur = conn.cursor() | |
335 for lev in depths: | |
336 cur.execute(dqry, [lev]) | |
337 results.append((lev, cur.fetchone()[0])) | |
338 cur.execute(mqry, [nmax]) | |
339 results.append((nmax, cur.fetchone()[0])) | |
340 cur.close() | |
341 conn.close() | |
342 return results | |
343 def getScoreCounts(self, blocks=10, size=1000): | |
344 "Returns a list of (minscore, gamecount) pairs." | |
345 sqry = "SELECT count(*) FROM {0} WHERE score >= %s AND score < %s;".format(self.uname) | |
346 mqry = "SELECT count(*) FROM {0} WHERE score >= %s;".format(self.uname) | |
347 try: | |
348 blocks = int(blocks) | |
349 size = int(size) | |
350 except (ValueError, TypeError): | |
351 return [] | |
352 if blocks <= 0 or size <= 0: | |
353 return [] | |
354 marks = range(blocks - 1) | |
355 results = [] | |
356 conn = psycopg2.connect("dbname=rlg") | |
357 cur = conn.cursor() | |
358 for m in marks: | |
359 cur.execute(sqry, [m * size, (m + 1) * size]) | |
360 results.append((m * size, cur.fetchone()[0])) | |
361 cur.execute(mqry, [(blocks - 1) * size]) | |
362 results.append(((blocks - 1) * size, cur.fetchone()[0])) | |
363 cur.close() | |
364 conn.close() | |
365 return results | |
299 # End Game class definition | 366 # End Game class definition |
300 | 367 |
301 class RogueGame(Game): | 368 class RogueGame(Game): |
302 def __init__(self, name, uname, suffix): | 369 def __init__(self, name, uname, suffix): |
303 self.name = name | 370 self.name = name |