This commit is contained in:
2022-11-15 07:34:01 -06:00
parent 9a18bb56ab
commit d5450597dd
14 changed files with 79 additions and 50 deletions

4
.idea/benchcoach.iml generated
View File

@@ -19,10 +19,12 @@
<excludeFolder url="file://$MODULE_DIR$/docs/_build" /> <excludeFolder url="file://$MODULE_DIR$/docs/_build" />
<excludeFolder url="file://$MODULE_DIR$/venv" /> <excludeFolder url="file://$MODULE_DIR$/venv" />
</content> </content>
<orderEntry type="jdk" jdkName="Python 3.9 (benchcoach) (2)" jdkType="Python SDK" /> <orderEntry type="jdk" jdkName="Python 3.10 (benchcoach)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="pyteamsnap" /> <orderEntry type="module" module-name="pyteamsnap" />
<orderEntry type="module" module-name="gamescrapyr" /> <orderEntry type="module" module-name="gamescrapyr" />
<orderEntry type="library" name="bootstrap-icons" level="application" />
<orderEntry type="library" name="bootstrap" level="application" />
</component> </component>
<component name="PackageRequirementsSettings"> <component name="PackageRequirementsSettings">
<option name="requirementsPath" value="$MODULE_DIR$/requirements/local.txt" /> <option name="requirementsPath" value="$MODULE_DIR$/requirements/local.txt" />

View File

@@ -1,5 +1,6 @@
<component name="InspectionProjectProfileManager"> <component name="InspectionProjectProfileManager">
<settings> <settings>
<option name="PROJECT_PROFILE" value="Default" />
<option name="USE_PROJECT_PROFILE" value="false" /> <option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" /> <version value="1.0" />
</settings> </settings>

2
.idea/misc.xml generated
View File

@@ -3,5 +3,5 @@
<component name="JavaScriptSettings"> <component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" /> <option name="languageLevel" value="ES6" />
</component> </component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (benchcoach) (2)" project-jdk-type="Python SDK" /> <component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (pyteamsnap)" project-jdk-type="Python SDK" />
</project> </project>

View File

@@ -12,13 +12,16 @@
<option name="IS_MODULE_SDK" value="true" /> <option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<PathMappingSettings> <EXTENSION ID="net.ashald.envfile">
<option name="pathMappings"> <option name="IS_ENABLED" value="false" />
<list> <option name="IS_SUBST" value="false" />
<mapping local-root="$PROJECT_DIR$" remote-root="/app" /> <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
</list> <option name="IS_IGNORE_MISSING_FILES" value="false" />
</option> <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
</PathMappingSettings> <ENTRIES>
<ENTRY IS_ENABLED="true" PARSER="runconfig" />
</ENTRIES>
</EXTENSION>
<option name="launchJavascriptDebuger" value="false" /> <option name="launchJavascriptDebuger" value="false" />
<option name="host" value="" /> <option name="host" value="" />
<option name="additionalOptions" value="" /> <option name="additionalOptions" value="" />
@@ -27,6 +30,6 @@
<option name="runNoReload" value="false" /> <option name="runNoReload" value="false" />
<option name="useCustomRunCommand" value="true" /> <option name="useCustomRunCommand" value="true" />
<option name="customRunCommand" value="migrate" /> <option name="customRunCommand" value="migrate" />
<method /> <method v="2" />
</configuration> </configuration>
</component> </component>

View File

@@ -14,6 +14,16 @@
<option name="IS_MODULE_SDK" value="true" /> <option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="net.ashald.envfile">
<option name="IS_ENABLED" value="false" />
<option name="IS_SUBST" value="false" />
<option name="IS_PATH_MACRO_SUPPORTED" value="false" />
<option name="IS_IGNORE_MISSING_FILES" value="false" />
<option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
<ENTRIES>
<ENTRY IS_ENABLED="true" PARSER="runconfig" />
</ENTRIES>
</EXTENSION>
<option name="launchJavascriptDebuger" value="false" /> <option name="launchJavascriptDebuger" value="false" />
<option name="port" value="8000" /> <option name="port" value="8000" />
<option name="host" value="0.0.0.0" /> <option name="host" value="0.0.0.0" />

View File

@@ -5,8 +5,9 @@
<option name="PARENT_ENVS" value="true" /> <option name="PARENT_ENVS" value="true" />
<envs> <envs>
<env name="PYTHONUNBUFFERED" value="1" /> <env name="PYTHONUNBUFFERED" value="1" />
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.local" />
<env name="DATABASE_URL" value="postgres://postgres:debug@127.0.0.1:5432/benchcoach" /> <env name="DATABASE_URL" value="postgres://postgres:debug@127.0.0.1:5432/benchcoach" />
<env name="DEBUG" value="True" />
<env name="DJANGO_SETTINGS_MODULE" value="config.settings.local" />
<env name="USE_DOCKER" value="yes" /> <env name="USE_DOCKER" value="yes" />
</envs> </envs>
<option name="SDK_HOME" value="" /> <option name="SDK_HOME" value="" />
@@ -14,6 +15,17 @@
<option name="IS_MODULE_SDK" value="true" /> <option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" /> <option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" /> <option name="ADD_SOURCE_ROOTS" value="true" />
<EXTENSION ID="net.ashald.envfile">
<option name="IS_ENABLED" value="true" />
<option name="IS_SUBST" value="false" />
<option name="IS_PATH_MACRO_SUPPORTED" value="false" />
<option name="IS_IGNORE_MISSING_FILES" value="false" />
<option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
<ENTRIES>
<ENTRY IS_ENABLED="true" PARSER="runconfig" />
<ENTRY IS_ENABLED="true" PARSER="env" PATH=".envs/.local/.django" />
</ENTRIES>
</EXTENSION>
<option name="launchJavascriptDebuger" value="true" /> <option name="launchJavascriptDebuger" value="true" />
<option name="port" value="8000" /> <option name="port" value="8000" />
<option name="host" value="127.0.0.1" /> <option name="host" value="127.0.0.1" />
@@ -25,4 +37,4 @@
<option name="customRunCommand" value="runserver_plus" /> <option name="customRunCommand" value="runserver_plus" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
</component> </component>

View File

@@ -64,8 +64,8 @@ def gamecard(request, team_id, event_id):
gc_client = get_gamechanger_client(request) gc_client = get_gamechanger_client(request)
stats = gc_client.get_stats() stats = gc_client.get_stats()
stats_lookup = { stats_lookup = {
GcModels.Player.objects.filter(id=k).first().teamsnap_member_id: stat_row # GcModels.Player.objects.filter(id=k).first().teamsnap_member_id: stat_row
for k, stat_row in stats.items() # for k, stat_row in stats.items()
} }
members = [] members = []

View File

@@ -134,7 +134,7 @@ def roster(request):
def roster_import(request): def roster_import(request):
if request.method == "GET": if request.method == "GET":
from pyteamsnap.objects import Member from pyteamsnap.models import Member
gc_client = get_gamechanger_client(request) gc_client = get_gamechanger_client(request)
season_slug = request.user.gamechanger_preferences.managed_team.season_slug season_slug = request.user.gamechanger_preferences.managed_team.season_slug

View File

@@ -14,7 +14,7 @@ def image_generator(request, team_id, event_id):
TOKEN = current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token TOKEN = current_teamsnap_user.socialtoken_set.order_by("-expires_at").first().token
from pyteamsnap.client import TeamSnap from pyteamsnap.client import TeamSnap
from pyteamsnap.objects import Event from pyteamsnap.models import Event
client = TeamSnap(token=TOKEN) client = TeamSnap(token=TOKEN)
@@ -25,7 +25,7 @@ def image_generator(request, team_id, event_id):
def get_matchup_image(request, team_id, event_id, dimensions=None, background=None): def get_matchup_image(request, team_id, event_id, dimensions=None, background=None):
import io import io
from pyteamsnap.objects import Location, Opponent, Team from pyteamsnap.models import Location, Opponent, Team
from .utils.gen_image import Location as ImagegenLocation from .utils.gen_image import Location as ImagegenLocation
from .utils.gen_image import Team as ImagegenTeam from .utils.gen_image import Team as ImagegenTeam
@@ -45,7 +45,7 @@ def get_matchup_image(request, team_id, event_id, dimensions=None, background=No
) )
from pyteamsnap.client import TeamSnap from pyteamsnap.client import TeamSnap
from pyteamsnap.objects import Event from pyteamsnap.models import Event
teamsnap = TeamSnap(token=ts_token) teamsnap = TeamSnap(token=ts_token)

View File

@@ -18,7 +18,8 @@ django-redis==5.2.0 # https://github.com/jazzband/django-redis
api-client api-client
-e git+ssh://gituser@home.ascorrea.com/~/pyteamsnap.git#egg=pyteamsnap -e git+https://git@gitea.ascorrea.com/asc/pyteamsnap.git#egg=pyteamsnap
-e git+ssh://gituser@home.ascorrea.com/~/gamescrapyr.git#egg=gamescrapyr -e git+https://git@gitea.ascorrea.com/asc/gamescrapyr.git#egg=gamescrapyr
beautifulsoup4==4.11.1 beautifulsoup4==4.11.1
pyOpenSSL

View File

@@ -25,7 +25,7 @@ def dashboard(request, team_id=None):
team_id=request.user.teamsnap_preferences.managed_team_id, team_id=request.user.teamsnap_preferences.managed_team_id,
) )
from pyteamsnap.objects import AvailabilitySummary, Event from pyteamsnap.models import AvailabilitySummary, Event
client = get_teamsnap_client(request) client = get_teamsnap_client(request)
ts_events = Event.search(client, team_id=team_id) ts_events = Event.search(client, team_id=team_id)

View File

@@ -25,7 +25,7 @@
{% block inline_javascript %} {% block inline_javascript %}
{{ block.super }} {{ block.super }}
<script src="{% static 'js/Sortable.js' %}"></script> <script src="https://cdn.jsdelivr.net/npm/sortablejs@1.15.0/Sortable.min.js"></script>
<script src="{% static 'lineup/js/lineup.js' %}"></script> <script src="{% static 'lineup/js/lineup.js' %}"></script>
<script> <script>
window.addEventListener('DOMContentLoaded', () => { window.addEventListener('DOMContentLoaded', () => {

View File

@@ -17,7 +17,7 @@ def teamsnap_event_redirect(request, event_id, team_id):
def edit_lineup(request, event_ids, team_id): def edit_lineup(request, event_ids, team_id):
import re import re
from pyteamsnap.objects import ( from pyteamsnap.models import (
Availability, Availability,
AvailabilitySummary, AvailabilitySummary,
Event, Event,
@@ -25,7 +25,6 @@ def edit_lineup(request, event_ids, team_id):
EventLineupEntry, EventLineupEntry,
Member, Member,
) )
from teamsnap.forms import LineupEntryFormset from teamsnap.forms import LineupEntryFormset
client = get_teamsnap_client(request) client = get_teamsnap_client(request)
@@ -41,16 +40,16 @@ def edit_lineup(request, event_ids, team_id):
contexts = [] contexts = []
for event_id in event_ids: for event_id in event_ids:
ts_event = [ ts_event = next(
i for i in ts_bulkload if isinstance(i, Event) and i.data["id"] == event_id 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_availabilities = Availability.search(client, event_id=ts_event.data["id"])
ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id) ts_lineup_entries = EventLineupEntry.search(client, event_id=event_id)
ts_availability_summary = [ ts_availability_summary = next(
i i
for i in ts_bulkload for i in ts_bulkload
if isinstance(i, AvailabilitySummary) and i.data["event_id"] == event_id if isinstance(i, AvailabilitySummary) and i.data["event_id"] == event_id
][0] )
ts_members = [i for i in ts_bulkload if isinstance(i, Member)] 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_member_lookup = {m.data["id"]: m for m in ts_members}
gc_player_lookup = { gc_player_lookup = {
@@ -150,31 +149,31 @@ def edit_lineup(request, event_ids, team_id):
form.member = ts_member_lookup.get(form["member_id"].initial) form.member = ts_member_lookup.get(form["member_id"].initial)
form.availability = ts_availability_lookup.get(form["member_id"].initial) form.availability = ts_availability_lookup.get(form["member_id"].initial)
formset_startinglineup = [ formset_startinglineup = (
form form
for form in formset for form in formset
if form.initial.get("event_lineup_entry_id") if form.initial.get("event_lineup_entry_id")
and not form.initial.get("position_only") and not form.initial.get("position_only")
] )
formset_startinglineup = sorted( formset_startinglineup = sorted(
formset_startinglineup, key=lambda d: d.initial.get("sequence", 100) formset_startinglineup, key=lambda d: d.initial.get("sequence", 100)
) )
formset_startingpositiononly = [ formset_startingpositiononly = (
form form
for form in formset for form in formset
if form.initial.get("event_lineup_entry_id") if form.initial.get("event_lineup_entry_id")
and form not in formset_startinglineup and form not in formset_startinglineup
] )
formset_startingpositiononly = sorted( formset_startingpositiononly = sorted(
formset_startingpositiononly, key=lambda d: d.initial.get("sequence", 100) formset_startingpositiononly, key=lambda d: d.initial.get("sequence", 100)
) )
formset_bench = [ formset_bench = (
form form
for form in formset for form in formset
if form not in formset_startinglineup if form not in formset_startinglineup
and form not in formset_startingpositiononly and form not in formset_startingpositiononly
and form.availability.data["status_code"] in [2, 1] and form.availability.data["status_code"] in [2, 1]
] )
formset_out = [ formset_out = [
form form
for form in formset for form in formset
@@ -195,16 +194,15 @@ def edit_lineup(request, event_ids, team_id):
"formset_out": formset_out, "formset_out": formset_out,
} }
) )
return render(request, "lineup/edit.html", context={"contexts": contexts}) return render(request, "lineup/edit.html", context={"contexts": contexts})
def submit_lineup(request, team_id, event_id): def submit_lineup(request, team_id, event_id):
from pyteamsnap.objects import EventLineup, EventLineupEntry from pyteamsnap.models import Event, EventLineup, EventLineupEntry
from teamsnap.forms import LineupEntryFormset from teamsnap.forms import LineupEntryFormset
client = get_teamsnap_client(request) client = get_teamsnap_client(request)
ts_event = Event.get(client, event_id)
ts_lineup = EventLineup.search(client, event_id=event_id) ts_lineup = EventLineup.search(client, event_id=event_id)
event_lineup_id = ts_lineup[0].data["id"] event_lineup_id = ts_lineup[0].data["id"]
if request.GET: if request.GET:
@@ -260,7 +258,8 @@ def multi_lineup_choose(request, team_id=None):
team_id=request.user.teamsnap_preferences.managed_team_id, team_id=request.user.teamsnap_preferences.managed_team_id,
) )
from django.forms import formset_factory from django.forms import formset_factory
from pyteamsnap.objects import Event
from pyteamsnap.models import Event
from .forms import EventChooseForm from .forms import EventChooseForm

View File

@@ -79,17 +79,17 @@ class PreferencesFormView(FormView):
Returns the initial data to use for forms on this view. Returns the initial data to use for forms on this view.
""" """
import pyteamsnap.client import pyteamsnap.client
import pyteamsnap.objects import pyteamsnap.models
ts_account = self.request.user.socialaccount_set.first() ts_account = self.request.user.socialaccount_set.first()
ts_token = ts_account.socialtoken_set.first() ts_token = ts_account.socialtoken_set.first()
# ts_token = # ts_token =
ts = pyteamsnap.client.TeamSnap(token=ts_token) ts = pyteamsnap.client.TeamSnap(token=ts_token)
me = pyteamsnap.objects.Me(ts) me = pyteamsnap.models.Me(ts)
teams = [ teams = [
(id, pyteamsnap.objects.Team.get(ts, id=id)) (id, pyteamsnap.models.Team.get(ts, id=id))
for id in me.data["managed_team_ids"] for id in me.data["managed_team_ids"]
] ]
@@ -117,7 +117,7 @@ def schedule_view(request, team_id=None):
client = get_teamsnap_client(request) client = get_teamsnap_client(request)
no_past = bool(request.GET.get("no_past", 0)) no_past = bool(request.GET.get("no_past", 0))
games_only = bool(request.GET.get("games_only", 0)) games_only = bool(request.GET.get("games_only", 0))
from pyteamsnap.objects import Event from pyteamsnap.models import Event
ts_events = Event.search(client, team_id=team_id) ts_events = Event.search(client, team_id=team_id)
if no_past: if no_past:
@@ -144,7 +144,7 @@ def view_event(request, event_id, team_id=None):
"teamsnap_event", team_id=request.user.teamsnap_preferences.managed_team_id "teamsnap_event", team_id=request.user.teamsnap_preferences.managed_team_id
) )
from pyteamsnap.objects import ( from pyteamsnap.models import (
AvailabilitySummary, AvailabilitySummary,
Event, Event,
EventLineup, EventLineup,
@@ -184,7 +184,8 @@ def view_event(request, event_id, team_id=None):
def multi_lineup_choose(request, team_id): def multi_lineup_choose(request, team_id):
from django.forms import formset_factory from django.forms import formset_factory
from pyteamsnap.objects import Event
from pyteamsnap.models import Event
from .forms import EventChooseForm from .forms import EventChooseForm
@@ -248,13 +249,13 @@ class OpponentFormView(FormView):
def form_valid(self, form): def form_valid(self, form):
# This method is called when valid form data has been POSTed. # This method is called when valid form data has been POSTed.
# It should return an HttpResponse. # It should return an HttpResponse.
import pyteamsnap.objects import pyteamsnap.models
ts_client = get_teamsnap_client(self.request) ts_client = get_teamsnap_client(self.request)
user = pyteamsnap.objects.Me(ts_client) user = pyteamsnap.models.Me(ts_client)
team_id = int(self.kwargs.get("team_id")) team_id = int(self.kwargs.get("team_id"))
opponent_id = int(self.kwargs.get("opponent_id")) opponent_id = int(self.kwargs.get("opponent_id"))
opponent = pyteamsnap.objects.Opponent.get(ts_client, opponent_id) opponent = pyteamsnap.models.Opponent.get(ts_client, opponent_id)
if ( if (
team_id in user.data["managed_team_ids"] team_id in user.data["managed_team_ids"]
and opponent.data["team_id"] == team_id and opponent.data["team_id"] == team_id
@@ -282,11 +283,11 @@ class OpponentFormView(FormView):
return form return form
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
import pyteamsnap.objects import pyteamsnap.models
ts_client = get_teamsnap_client(self.request) ts_client = get_teamsnap_client(self.request)
context = super().get_context_data(**kwargs) context = super().get_context_data(**kwargs)
opponent = pyteamsnap.objects.Opponent.get( opponent = pyteamsnap.models.Opponent.get(
ts_client, self.kwargs.get("opponent_id") ts_client, self.kwargs.get("opponent_id")
) )
context["opponent"] = opponent context["opponent"] = opponent
@@ -299,7 +300,7 @@ class Opponents(ListView):
pass pass
def get_queryset(self): def get_queryset(self):
from pyteamsnap.objects import Opponent as TsOpponent from pyteamsnap.models import Opponent as TsOpponent
ts_client = get_teamsnap_client(self.request) ts_client = get_teamsnap_client(self.request)
team_id = self.kwargs.get("team_id") team_id = self.kwargs.get("team_id")