]> git.xonotic.org Git - xonotic/xonstat.git/blob - xonstat/batch/badges/gen_badges.py
Hotfix - last commit introduced a bug where only the last defined skin could be used
[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 skin_classic = Skin(
17         bg              = "asfalt",
18     )
19
20 skin_archer = Skin(
21         bg              = "background_archer-v1",
22         overlay         = "",
23     )
24
25 skin_minimal = Skin(
26         bg              = None,
27         bgcolor         = (0.04, 0.04, 0.04, 1.0),
28         overlay         = "overlay_minimal",
29         width           = 560,
30         height          = 40,
31         num_gametypes   = 4,
32         gametype_pos    = (25,30),
33         gametype_text   = "%s :",
34         gametype_width  = 120,
35         gametype_fontsize = 10,
36         elo_pos         = (75,30),
37         elo_text        = "Elo %.0f",
38         elo_color       = (1.0, 1.0, 0.6),
39         rank_pos        = None,
40         nostats_pos     = (80,30),
41         nostats_fontsize = 10,
42         nostats_angle   = 0,
43         nostats_text    = "no stats!",
44         kdr_pos         = (392,15),
45         kills_pos       = None,
46         deaths_pos      = None,
47         winp_pos        = (508,15),
48         wins_pos        = None,
49         loss_pos        = None,
50         ptime_pos       = (458,30),
51         ptime_color     = (0.8, 0.8, 0.9),
52     )
53
54 # parse cmdline parameters (for testing)
55 skin = skin_classic
56 if len(sys.argv) > 1:
57     arg = sys.argv[1].lower()
58     if arg == "classic":
59         skin = skin_classic
60     elif arg == "minimal":
61         skin = skin_minimal
62     elif arg == "archer":
63         skin = skin_archer
64
65
66 # environment setup
67 env = bootstrap('../../../development.ini')
68 req = env['request']
69 req.matchdict = {'id':3}
70
71 print "Requesting player data from db ..."
72 start = datetime.now()
73 players = []
74 if locals().has_key('NUM_PLAYERS'):
75     players = DBSession.query(Player).\
76             filter(Player.player_id == PlayerElo.player_id).\
77             filter(Player.nick != None).\
78             filter(Player.player_id > 2).\
79             filter(Player.active_ind == True).\
80             limit(NUM_PLAYERS).all()
81 else:
82     players = DBSession.query(Player).\
83             filter(Player.player_id == PlayerElo.player_id).\
84             filter(Player.nick != None).\
85             filter(Player.player_id > 2).\
86             filter(Player.active_ind == True).\
87             all()
88
89 stop = datetime.now()
90 td = stop-start
91 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
92 print "Query took %.2f seconds" % (total_seconds)
93
94 print "Creating badges for %d players ..." % len(players)
95 start = datetime.now()
96 data_time, render_time = 0,0
97 for player in players:
98     req.matchdict['id'] = player.player_id
99
100     sstart = datetime.now()
101     skin.get_data(player)
102     sstop = datetime.now()
103     td = sstop-sstart
104     total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
105     data_time += total_seconds
106
107     sstart = datetime.now()
108     skin.render_image("output/%d.png" % player.player_id)
109     sstop = datetime.now()
110     td = sstop-sstart
111     total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
112     render_time += total_seconds
113
114 stop = datetime.now()
115 td = stop-start
116 total_seconds = (td.microseconds + (td.seconds + td.days * 24 * 3600) * 10**6) / 10**6
117 print "Creating the badges took %.1f seconds (%.3f s per player)" % (total_seconds, total_seconds/float(len(players)))
118 print "Total time for redering images: %.3f s" % render_time
119 print "Total time for getting data: %.3f s" % data_time
120