]> de.git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/batch/badges/gen_badges.py
Improved PNG output for badges (now using zlib compression)
[xonotic/xonstat.git] / xonstat / batch / badges / gen_badges.py
1 #-*- coding: utf-8 -*-
2
3 import sys
4 from datetime import datetime
5 import sqlalchemy as sa
6 import sqlalchemy.sql.functions as func
7 from pyramid.paster import bootstrap
8 from xonstat.models import *
9
10 from render import Skin
11
12
13 # maximal number of query results (for testing, set to 0 to get all)
14 #NUM_PLAYERS = 100
15
16
17 skin_classic = Skin()
18
19 skin_archer = Skin(
20         bg="background_archer-v1",
21         overlay="",
22     )
23
24
25 # parse cmdline parameters (for testing)
26 skin = skin_classic
27 if len(sys.argv) > 1:
28     arg = sys.argv[1].lower()
29     if arg == "classic":
30         skin = skin_classic
31     elif arg == "archer":
32         skin = skin_archer
33
34
35 # environment setup
36 env = bootstrap('../../../development.ini')
37 req = env['request']
38 req.matchdict = {'id':3}
39
40 print "Requesting player data from db ..."
41 start = datetime.now()
42 players = []
43 if locals().has_key('NUM_PLAYERS'):
44     players = DBSession.query(Player).\
45             filter(Player.player_id == PlayerElo.player_id).\
46             filter(Player.nick != None).\
47             filter(Player.player_id > 2).\
48             filter(Player.active_ind == True).\
49             limit(NUM_PLAYERS).all()
50 else:
51     players = DBSession.query(Player).\
52             filter(Player.player_id == PlayerElo.player_id).\
53             filter(Player.nick != None).\
54             filter(Player.player_id > 2).\
55             filter(Player.active_ind == True).\
56             all()
57
58 stop = datetime.now()
59 td = stop-start
60 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
61 print "Query took %.2f seconds" % (total_seconds)
62
63 print "Creating badges for %d players ..." % len(players)
64 start = datetime.now()
65 data_time, render_time = 0,0
66 for player in players:
67     req.matchdict['id'] = player.player_id
68
69     sstart = datetime.now()
70     skin.get_data(player)
71     sstop = datetime.now()
72     td = sstop-sstart
73     total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
74     data_time += total_seconds
75
76     sstart = datetime.now()
77     skin.render_image("output/%d.png" % player.player_id)
78     sstop = datetime.now()
79     td = sstop-sstart
80     total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
81     render_time += total_seconds
82
83 stop = datetime.now()
84 td = stop-start
85 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
86 print "Creating the badges took %.1f seconds (%.3f s per player)" % (total_seconds, total_seconds/float(len(players)))
87 print "Total time for redering images: %.3f s" % render_time
88 print "Total time for getting data: %.3f s" % data_time
89