/
dashboards.py
63 lines (49 loc) · 1.93 KB
/
dashboards.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from dashboards.component import Chart, Table, Text
from dashboards.dashboard import Dashboard, ModelDashboard
from dashboards.registry import registry
from demo.football.components import MatchForm
from demo.football.models import League, SPIMatch, Team
from demo.football.serializers import (
BigFiveSPIbyLeagueSerializer,
LeagueTableSerializer,
OffenceVsDefenceSerializer,
TeamRankTableSerializer,
TopSPIbyLeagueSerializer,
XGSerializer,
)
class RankingsDashboard(Dashboard):
teams = Table(defer=TeamRankTableSerializer, grid_css_classes="span-12")
top_spi_by_league = Chart(defer=TopSPIbyLeagueSerializer, grid_css_classes="span-6")
big_five_spi_by_league = Chart(
defer=BigFiveSPIbyLeagueSerializer, grid_css_classes="span-6"
)
offence_vs_defence = Chart(
defer=OffenceVsDefenceSerializer, grid_css_classes="span-12"
)
class Meta:
name = "Global Football SPI Rankings"
class LeagueDashboard(ModelDashboard):
table = Table(defer=LeagueTableSerializer, grid_css_classes="span-12", page_size=20)
class Meta:
name = "League"
model = League
class TeamDashboard(ModelDashboard):
current_position = Text(grid_css_classes="span-3")
recent_form = MatchForm(
value=lambda **k: SPIMatch.objects.played().result(team=k["object"])[:5],
grid_css_classes="span-9",
)
performance = Chart(defer=XGSerializer, grid_css_classes="span-12")
class Meta:
model = Team
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._meta.name = self.object.name
def get_current_position_value(self, *args, **kwargs):
table = Team.objects.calculate_table(league=self.object.league)
for team in table:
if team == self.object:
return f"#{team.position}"
registry.register(RankingsDashboard)
registry.register(LeagueDashboard)
registry.register(TeamDashboard)