-
-
-
-
-
-
-
- |
- {{ event.data.start_date|date:"D, F j, Y g:i A" }}
- |
-
-
- |
- {{ event.data.location_name }}
- |
-
-
-
+
+
+
+
+
+ |
+ |
+ Available |
+ AVG/OBP/SLG:PA |
+ P |
+ C |
+ IF |
+ OF |
+ {% for event in events_future %}
+
+
+ {{ event.data.start_date|date:'D' }}
+
+ |
+ {% endfor %}
+ {% for event in events_past %}
+
+
+ {{ event.data.start_date|date:'D' }}
+
+ |
+ {% endfor %}
+
+
+
+ {% for member in members %}
-
-
-
-
-
-
- 
-
-
- VS.
-
-
- 
-
-
-
-
-
+ |
+ |
+ {{ member.member.jersey_number }} |
+ {{ member.member.last_name }} |
+ |
+
+ {% if "P" in member.member.position %}
+
+ {% else %}
+
+ {% endif %}
+ |
+ {% if "C" in member.member.position %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+ {% if "IF" in member.member.position or "1B" in member.member.position %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+ {% if "OF" in member.member.position %}
+
+ {% else %}
+
+ {% endif %}
+ |
+
+ {{ member.availability_future.0.data.status.0 }}
+ |
+
+ {{ member.availability_future.1.data.status.0 }}
+ |
+
+ {{ member.availability_future.2.data.status.0 }}
+ |
+
+ {{ member.availability_future.3.data.status.0 }}
+ |
+
+ {{ member.availability_past.0.data.status.0 }}
+ |
+
+ {{ member.availability_past.1.data.status.0 }}
+ |
+
+ {{ member.availability_past.2.data.status.0 }}
+ |
+
+ {{ member.availability_past.3.data.status.0 }}
+ |
+
+ {% endfor %}
+
+
+
+
+
+
+
+
+
+
+
+
+ |
+ {{ event.data.start_date|date:"D, F j, Y g:i A" }}
+ |
+
+
+ |
+ {{ event.data.location_name }}
+ |
+
+
+ |
+
+ |
+
+
+
+
+
+

+
+
+ VS.
+
+
+ {% if ts_opponent %}
+

+ {% endif %}
+
+
+
+
+
+
diff --git a/gamecard/views.py b/gamecard/views.py
index d5cc273..add918a 100644
--- a/gamecard/views.py
+++ b/gamecard/views.py
@@ -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)
diff --git a/setup.cfg b/setup.cfg
index a079122..afe0601 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,7 +1,7 @@
[flake8]
max-line-length = 120
exclude = .tox,.git,*/migrations/*,*/static/CACHE/*,docs,node_modules,venv
-ignore = W503,E203
+ignore = W503, E203
[pycodestyle]
max-line-length = 120
diff --git a/teamsnap/dashboard/views.py b/teamsnap/dashboard/views.py
index 2a786ac..8c6adf3 100644
--- a/teamsnap/dashboard/views.py
+++ b/teamsnap/dashboard/views.py
@@ -8,7 +8,8 @@ from teamsnap.views import get_teamsnap_client
def dashboard(request, team_id=None):
if not team_id:
return redirect(
- "teamsnap_dashboard", team_id=request.user.preferences.managed_team_id
+ "teamsnap_dashboard",
+ team_id=request.user.teamsnap_preferences.managed_team_id,
)
from pyteamsnap.api import AvailabilitySummary, Event
diff --git a/teamsnap/migrations/0001_initial.py b/teamsnap/migrations/0001_initial.py
index 9d70dbf..9818a15 100644
--- a/teamsnap/migrations/0001_initial.py
+++ b/teamsnap/migrations/0001_initial.py
@@ -1,4 +1,4 @@
-# Generated by Django 3.2.13 on 2022-06-10 14:00
+# Generated by Django 3.2.13 on 2022-06-09 23:57
from django.conf import settings
from django.db import migrations, models
@@ -35,10 +35,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('managed_team_id', models.IntegerField()),
- ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='teamsnap_preferences', to=settings.AUTH_USER_MODEL)),
+ ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
- options={
- 'verbose_name_plural': 'preferences',
- },
),
]
diff --git a/teamsnap/migrations/0004_auto_20220609_0722.py b/teamsnap/migrations/0004_auto_20220609_0722.py
deleted file mode 100644
index c74d7fa..0000000
--- a/teamsnap/migrations/0004_auto_20220609_0722.py
+++ /dev/null
@@ -1,33 +0,0 @@
-# Generated by Django 3.2.13 on 2022-06-09 12:22
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('teamsnap', '0003_auto_20220609_0721'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='opponent',
- name='logo',
- field=models.ImageField(blank=True, null=True, upload_to='logos'),
- ),
- migrations.AlterField(
- model_name='opponent',
- name='logo_mono',
- field=models.ImageField(blank=True, null=True, upload_to='logos_mono'),
- ),
- migrations.AlterField(
- model_name='team',
- name='logo',
- field=models.ImageField(blank=True, null=True, upload_to='logos'),
- ),
- migrations.AlterField(
- model_name='team',
- name='logo_mono',
- field=models.ImageField(blank=True, null=True, upload_to='logos_mono'),
- ),
- ]