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