65 lines
2.0 KiB
Python
65 lines
2.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Copyright (c) 2017 Tomek Wójcik <tomek@bthlabs.pl>
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
# THE SOFTWARE.
|
|
#
|
|
|
|
"""
|
|
q3stats.lib.charts.day
|
|
======================
|
|
|
|
This module contains functions for genering day chart.
|
|
"""
|
|
|
|
from collections import defaultdict
|
|
|
|
from q3stats.models import Game, Score
|
|
|
|
|
|
def get_day_chart(day, session):
|
|
"""Returns chart data for *day*."""
|
|
games = session.query(Game).\
|
|
filter_by(date=day).\
|
|
order_by(Game.time).\
|
|
all()
|
|
|
|
maps = []
|
|
game_ids = []
|
|
player_scores = defaultdict(dict)
|
|
|
|
for game in games:
|
|
maps.append(game.map)
|
|
game_ids.append(game.id)
|
|
|
|
for score in game.scores:
|
|
player_scores[score.player][game.id] = score.score
|
|
|
|
scores = []
|
|
players = sorted(player_scores.keys(), key=lambda x: x.lower())
|
|
|
|
for player in players:
|
|
scores.append({
|
|
'name': player,
|
|
'data': [
|
|
player_scores[player].get(game_id, 0) for game_id in game_ids
|
|
]
|
|
})
|
|
|
|
return maps, scores
|