split gamecard into its own app, add models to teamsnap for custom fields (images)
This commit is contained in:
109
gamecard/views.py
Normal file
109
gamecard/views.py
Normal file
@@ -0,0 +1,109 @@
|
||||
from django.shortcuts import render
|
||||
|
||||
from teamsnap.models import Opponent, Team
|
||||
from teamsnap.utils import get_teamsnap_client
|
||||
|
||||
|
||||
def gamecard(request, team_id, event_id):
|
||||
import re
|
||||
|
||||
from pyteamsnap.api import (
|
||||
Availability,
|
||||
AvailabilitySummary,
|
||||
Event,
|
||||
EventLineup,
|
||||
EventLineupEntry,
|
||||
Member,
|
||||
)
|
||||
|
||||
client = get_teamsnap_client(request)
|
||||
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_lineup_entries = EventLineupEntry.search(client, event_id=event_id)
|
||||
|
||||
if ts_lineup_entries:
|
||||
# ts_lineup = EventLineup.get(
|
||||
# client, id=ts_lineup_entries[0].data["event_lineup_id"]
|
||||
# )
|
||||
pass
|
||||
else:
|
||||
# ts_lineup = EventLineup.search(client, event_id=event_id)
|
||||
pass
|
||||
|
||||
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_lineup_entries_lookup = {m.data["member_id"]: m for m in ts_lineup_entries}
|
||||
|
||||
members = []
|
||||
|
||||
for member in ts_members:
|
||||
if not member.data["is_non_player"]:
|
||||
members.append(
|
||||
{
|
||||
"member": getattr(member, "data"),
|
||||
"availability": getattr(
|
||||
ts_availability_lookup.get(member.data["id"], {}), "data", {}
|
||||
),
|
||||
"lineup_entry": getattr(
|
||||
ts_lineup_entries_lookup.get(member.data["id"], {}), "data", {}
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
members = sorted(
|
||||
members,
|
||||
key=lambda d: (
|
||||
{None: 3, 0: 2, 2: 1, 1: 0}.get( # No Response # No # Maybe # Yes
|
||||
d["availability"].get("status_code")
|
||||
),
|
||||
d["member"].get("last_name"),
|
||||
),
|
||||
)
|
||||
|
||||
members_startinglineup = []
|
||||
members_startingpositiononly = []
|
||||
|
||||
for member in members:
|
||||
if re.search(
|
||||
r"([A-Z0-9]+)(?:\s+\[(.*)\])?", member["lineup_entry"].get("label", "")
|
||||
):
|
||||
position, position_note = re.search(
|
||||
r"([A-Z0-9]+)(?:\s+\[(.*)\])?", member["lineup_entry"].get("label", "")
|
||||
).groups()
|
||||
else:
|
||||
position, position_note = ("", "")
|
||||
|
||||
position_only = position_note == "PO"
|
||||
|
||||
if position_only:
|
||||
member["lineup_entry"]["label"] = position
|
||||
|
||||
if member["lineup_entry"].get("id") and not position_only:
|
||||
members_startinglineup.append(member)
|
||||
elif member["lineup_entry"].get("id") and position_only:
|
||||
members_startingpositiononly.append(member)
|
||||
|
||||
members_startinglineup = sorted(
|
||||
members_startinglineup,
|
||||
key=lambda d: d.get("lineup_entry", {}).get("sequence", 100),
|
||||
)
|
||||
|
||||
context = {
|
||||
"event": ts_event,
|
||||
"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"]),
|
||||
}
|
||||
return render(request, "gamecard/gamecard.html", context=context)
|
||||
Reference in New Issue
Block a user