add past and future availabilities to gamecard

This commit is contained in:
2022-06-10 11:44:44 -05:00
parent df210b71a2
commit a93d37a083
5 changed files with 275 additions and 188 deletions

View File

@@ -1,9 +1,12 @@
# TODO Remove VCR
import vcr
from django.shortcuts import render
from teamsnap.models import Opponent, Team
from teamsnap.utils import get_teamsnap_client
@vcr.use_cassette("gamecard/fixtures/gamecard.yaml", record_mode="new_episodes")
def gamecard(request, team_id, event_id):
import re
@@ -20,13 +23,28 @@ def gamecard(request, team_id, event_id):
ts_bulkload = client.bulk_load(
team_id=team_id,
types=[Event, EventLineup, EventLineupEntry, AvailabilitySummary, Member],
event__id=event_id,
)
ts_event = [
i for i in ts_bulkload if isinstance(i, Event) and i.data["id"] == event_id
][0]
ts_availabilities = Availability.search(client, event_id=ts_event.data["id"])
ts_events = [e for e in ts_bulkload if isinstance(e, Event)]
ts_events.sort(key=lambda d: d.data.get("start_date"))
ts_event = [e for e in ts_events if e.data["id"] == event_id][0]
ts_events_future = ts_events[ts_events.index(ts_event) + 1 :]
ts_events_past = ts_events[: ts_events.index(ts_event)]
ts_availabilities = Availability.search(client, team_id=team_id)
ts_availabilities_future = list(
filter(
lambda a: a.data["event_id"] in [e.data["id"] for e in ts_events_future],
ts_availabilities,
)
)
ts_availabilities_past = list(
filter(
lambda a: a.data["event_id"] in [e.data["id"] for e in ts_events_past],
ts_availabilities,
)
)
ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id)
@@ -41,7 +59,7 @@ def gamecard(request, team_id, event_id):
ts_members = [i for i in ts_bulkload if isinstance(i, Member)]
# ts_member_lookup = {m.data["id"]: m for m in ts_members}
ts_availability_lookup = {m.data["member_id"]: m for m in ts_availabilities}
ts_availability_lookup = {m.data["id"]: m for m in ts_availabilities}
ts_lineup_entries_lookup = {m.data["member_id"]: m for m in ts_lineup_entries}
members = []
@@ -52,11 +70,27 @@ def gamecard(request, team_id, event_id):
{
"member": getattr(member, "data"),
"availability": getattr(
ts_availability_lookup.get(member.data["id"], {}), "data", {}
ts_availability_lookup.get(
f"{member.data['id']}-{event_id}", {}
),
"data",
{},
),
"lineup_entry": getattr(
ts_lineup_entries_lookup.get(member.data["id"], {}), "data", {}
),
"availability_future": list(
filter(
lambda a: a.data.get("member_id") == member.data["id"],
ts_availabilities_future,
)
)[:4],
"availability_past": list(
filter(
lambda a: a.data.get("member_id") == member.data["id"],
ts_availabilities_past,
)
)[:4],
}
)
@@ -100,10 +134,12 @@ def gamecard(request, team_id, event_id):
context = {
"event": ts_event,
"events_future": ts_events_future[:4],
"events_past": list(reversed(ts_events_past))[:4],
"members": members,
"members_startinglineup": members_startinglineup,
"members_startingpositiononly": members_startingpositiononly,
"ts_team": Team.objects.get(id=team_id),
"ts_opponent": Opponent.objects.get(id=ts_event.data["opponent_id"]),
"ts_opponent": Opponent.objects.filter(id=ts_event.data["opponent_id"]).first,
}
return render(request, "gamecard/gamecard.html", context=context)