218 lines
8.9 KiB
Python
218 lines
8.9 KiB
Python
import os
|
|
import sys
|
|
|
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "benchcoachproject.settings")
|
|
os.environ["DJANGO_SETTINGS_MODULE"] = "benchcoachproject.settings"
|
|
import django
|
|
django.setup()
|
|
|
|
from teamsnap.teamsnap.api import TeamSnap
|
|
import teamsnap.teamsnap.api
|
|
from teamsnap.models import User, Member, Team, Event, Location, Availability, Opponent, TeamsnapBaseModel
|
|
from typing import List
|
|
from benchcoachproject.models import Profile as BenchcoachUser
|
|
import benchcoach.models
|
|
from django.db import models
|
|
import pytz
|
|
|
|
def update_teamsnap_object(d, teamsnap_object: TeamsnapBaseModel, benchcoach_model: models.Model ,create_benchcoach_object: bool = True, create_related: bool = False):
|
|
''' Function to update from a teamsnap object to Benchcoach object. This method is a simple method when there are no related objects
|
|
|
|
:param d: The information to update.
|
|
:param teamsnap_object: The teamsnap object from which to update.
|
|
:param create_benchcoach_object: If true, will create the benchcoach object if it doesn't exist
|
|
:param create_related: This is here for decoration only. It doesn't do anything.
|
|
:return: a list of tuples in the form (obj, did_create) for created or modified objects.
|
|
'''
|
|
|
|
r = []
|
|
|
|
if teamsnap_object.benchcoach_object:
|
|
#TODO I'm not sure this does anything. need to make sure.
|
|
benchcoach_object = benchcoach_model.objects.filter(id=teamsnap_object.benchcoach_object.id).first()
|
|
created = False
|
|
r.append((benchcoach_object, created))
|
|
elif not teamsnap_object.benchcoach_object and create_benchcoach_object:
|
|
benchcoach_object = benchcoach_model(**d) # create new benchcoach object
|
|
teamsnap_object.benchcoach_object = benchcoach_object
|
|
benchcoach_object.save()
|
|
teamsnap_object.save()
|
|
created = True
|
|
r.append((benchcoach_object, created))
|
|
elif not teamsnap_object.benchcoach_object:
|
|
raise benchcoach.models.Team.DoesNotExist
|
|
|
|
return r
|
|
|
|
def update_event(event: Event, create_benchcoach_object: bool = True, create_related=False):
|
|
benchcoach_model = benchcoach.models.Event
|
|
|
|
d = {
|
|
'start': event.start_date,
|
|
}
|
|
|
|
r = []
|
|
|
|
if event.team:
|
|
if event.team.benchcoach_object:
|
|
if event.game_type == "Home":
|
|
d['home_team'] = event.team.benchcoach_object
|
|
elif event.game_type == "Away":
|
|
d['away_team'] = event.team.benchcoach_object
|
|
elif not event.team.benchcoach_object and create_related:
|
|
# create team object
|
|
# update_opponent
|
|
# r.append
|
|
pass
|
|
elif not event.team.benchcoach_object:
|
|
raise benchcoach.models.Team.DoesNotExist
|
|
|
|
if event.opponent:
|
|
if event.opponent.benchcoach_object:
|
|
if event.game_type == 'Home':
|
|
d['away_team'] = event.opponent.benchcoach_object
|
|
elif event.game_type == 'Away':
|
|
d['home_team'] = event.opponent.benchcoach_object
|
|
elif not event.opponent.benchcoach_object and create_related:
|
|
# Create opponent object
|
|
# update_opponent()
|
|
# r.append
|
|
pass
|
|
elif not event.opponent.benchcoach_object:
|
|
raise benchcoach.models.Team.DoesNotExist
|
|
|
|
if event.location:
|
|
if event.location.benchcoach_object:
|
|
if event.location:
|
|
d['venue'] = event.location.benchcoach_object
|
|
elif not event.location.benchcoach_object and create_related:
|
|
# Need to account for if no loacation assigned to teamsnap object.
|
|
# create team object
|
|
# update_opponent
|
|
# r.append
|
|
pass
|
|
elif not event.location.benchcoach_object:
|
|
raise benchcoach.models.Venue.DoesNotExist
|
|
|
|
r += update_teamsnap_object(d, teamsnap_object=event, benchcoach_model=benchcoach_model, create_benchcoach_object=create_benchcoach_object)
|
|
|
|
return r
|
|
|
|
def update_opponent(opponent: Opponent, create_benchcoach_object: bool = True, create_related: bool = False):
|
|
benchcoach_model = benchcoach.models.Team
|
|
d = {
|
|
'name': opponent.name,
|
|
}
|
|
|
|
r = update_teamsnap_object(d, teamsnap_object=opponent, benchcoach_model=benchcoach_model, create_benchcoach_object= create_benchcoach_object, create_related = create_related)
|
|
|
|
return r
|
|
|
|
def update_team(teamsnap_object: Team, create_benchcoach_object: bool = True, create_related: bool = False):
|
|
benchcoach_model = benchcoach.models.Team
|
|
d = {
|
|
'name': teamsnap_object.name,
|
|
}
|
|
|
|
r = update_teamsnap_object(d, teamsnap_object=teamsnap_object, benchcoach_model=benchcoach_model, create_benchcoach_object=create_benchcoach_object,
|
|
create_related=create_related)
|
|
|
|
return r
|
|
|
|
def update_location(teamsnap_object: Location, create_benchcoach_object: bool = True, create_related: bool = False):
|
|
benchcoach_model = benchcoach.models.Venue
|
|
d = {
|
|
'name': teamsnap_object.name,
|
|
}
|
|
|
|
r = update_teamsnap_object(d, teamsnap_object=teamsnap_object, benchcoach_model=benchcoach_model, create_benchcoach_object=create_benchcoach_object,
|
|
create_related=create_related)
|
|
|
|
return r
|
|
|
|
def update_member(teamsnap_object: Member, create_benchcoach_object: bool = True, create_related: bool = False):
|
|
benchcoach_model = benchcoach.models.Player
|
|
d = {
|
|
'first_name': teamsnap_object.first_name,
|
|
'last_name': teamsnap_object.last_name,
|
|
'jersey_number': teamsnap_object.jersey_number,
|
|
}
|
|
|
|
r = update_teamsnap_object(d, teamsnap_object=teamsnap_object, benchcoach_model=benchcoach_model, create_benchcoach_object=create_benchcoach_object,
|
|
create_related=create_related)
|
|
|
|
return r
|
|
|
|
def update_availability(availability: Availability, create_benchcoach_object: bool = True, create_related: bool = False):
|
|
benchcoach_model = benchcoach.models.Availability
|
|
translation = {
|
|
Availability.YES: benchcoach.models.Availability.YES,
|
|
Availability.NO: benchcoach.models.Availability.NO,
|
|
Availability.MAYBE: benchcoach.models.Availability.MAYBE
|
|
}
|
|
|
|
d = {
|
|
'available': translation.get(availability.status_code, benchcoach.models.Availability.UNKNOWN),
|
|
'player': availability.member.benchcoach_object,
|
|
'event': availability.event.benchcoach_object
|
|
}
|
|
|
|
r = []
|
|
|
|
if availability.member.benchcoach_object:
|
|
d['player'] = availability.member.benchcoach_object
|
|
elif not availability.member.benchcoach_object and create_related:
|
|
r += update_member(availability.member, create_benchcoach_object = True)
|
|
d['player'] = availability.member.benchcoach_object
|
|
elif not availability.member.benchcoach_object and not create_related:
|
|
raise benchcoach.models.Availability.DoesNotExist
|
|
|
|
if availability.event.benchcoach_object:
|
|
d['event'] = availability.event.benchcoach_object
|
|
elif not availability.event.benchcoach_object and create_related:
|
|
r += update_event(availability.member, create_benchcoach_object = True)
|
|
d['event'] = availability.event.benchcoach_object
|
|
elif not availability.event.benchcoach_object and not create_related:
|
|
raise benchcoach.models.Event.DoesNotExist
|
|
|
|
r += update_teamsnap_object(d, teamsnap_object=availability, benchcoach_model=benchcoach_model, create_benchcoach_object=create_benchcoach_object,
|
|
create_related=create_related)
|
|
|
|
return r
|
|
|
|
|
|
def import_teamsnap():
|
|
user = BenchcoachUser.objects.get(id=1)
|
|
TOKEN = user.teamsnap_access_token
|
|
USER_ID = user.teamsnap_user.id
|
|
TEAM_ID = user.teamsnapsettings.managed_team.id
|
|
CLIENT = TeamSnap(token=TOKEN)
|
|
|
|
l = []
|
|
for team in Opponent.objects.filter(team_id=TEAM_ID):
|
|
l += update_opponent(team, create_benchcoach_object=True, create_related=True)
|
|
|
|
for team in Team.objects.filter(id=TEAM_ID):
|
|
l += update_team(team, create_benchcoach_object=True, create_related=True)
|
|
|
|
for location in Location.objects.filter(team_id=TEAM_ID):
|
|
l += update_location(location, create_benchcoach_object=True, create_related=True)
|
|
|
|
for member in Member.objects.filter(team_id=TEAM_ID, is_non_player=False):
|
|
l += update_member(member, create_benchcoach_object= True, create_related=True)
|
|
|
|
for event in Event.objects.filter(team_id=TEAM_ID):
|
|
l += update_event(event, create_benchcoach_object=True, create_related=True)
|
|
|
|
for availability in Availability.objects.filter(team_id=TEAM_ID):
|
|
l += update_availability(availability, create_benchcoach_object=True, create_related=True)
|
|
|
|
pass
|
|
# l += update_teams(CLIENT, team_id=TEAM_ID)
|
|
# l += update_members(CLIENT, team_id=TEAM_ID)
|
|
# l += update_locations(CLIENT, team_id=TEAM_ID)
|
|
# l += update_events(CLIENT, team_id=TEAM_ID)
|
|
# l += update_availabilities(CLIENT, team_id=TEAM_ID)
|
|
|
|
if __name__ == "__main__":
|
|
import_teamsnap() |