sync improvements
allow blank for teamsnap fields
This commit is contained in:
@@ -29,9 +29,10 @@ def update_teamsnap_object(d, teamsnap_object: TeamsnapBaseModel, benchcoach_mod
|
||||
|
||||
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()
|
||||
benchcoach_object = benchcoach_model.objects.filter(id=teamsnap_object.benchcoach_object.id)
|
||||
benchcoach_object.update(**d)
|
||||
created = False
|
||||
r.append((benchcoach_object, created))
|
||||
r.append((benchcoach_object.first(), 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
|
||||
|
||||
@@ -1,198 +0,0 @@
|
||||
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, Type, Tuple
|
||||
from benchcoachproject.models import Profile as BenchcoachUser
|
||||
import benchcoach.models
|
||||
from django.db import models
|
||||
import pytz
|
||||
|
||||
def update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel: Type[TeamsnapBaseModel],
|
||||
teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
fields: List[str]= ['created_at', 'updated_at'],
|
||||
additional_fields: List[str] = [],
|
||||
related_fields: List[Tuple[str, Type[TeamsnapBaseModel]]] = [],
|
||||
create = True,
|
||||
create_related = True,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
api_response_objects = TeamsnapModel.ApiObject.search(
|
||||
client=teamsnap_client, **teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
r = []
|
||||
|
||||
for response_object in api_response_objects:
|
||||
d = {k:response_object.data[k] for k in fields}
|
||||
d.update({k:response_object.data[k] for k in additional_fields})
|
||||
|
||||
for related_field_name, RelatedTeamSnapModel in related_fields:
|
||||
related_field_name = f"{related_field_name}_id"
|
||||
filter_criteria = {related_field_name:response_object.data[related_field_name]}
|
||||
if related_field_name == "team_id" and RelatedTeamSnapModel.__name__ == "Team":
|
||||
filter_criteria = {'id':response_object.data[related_field_name]}
|
||||
related_teamsnap_object = RelatedTeamSnapModel.objects.filter(**filter_criteria).first()
|
||||
if related_teamsnap_object:
|
||||
d[related_field_name] = related_teamsnap_object
|
||||
elif not related_teamsnap_object and create_related:
|
||||
related_teamsnap_object = RelatedTeamSnapModel(**{related_field_name:response_object.data[related_field_name]})
|
||||
related_teamsnap_object.save()
|
||||
elif not related_teamsnap_object and not create_related:
|
||||
raise RelatedTeamSnapModel.DoesNotExist
|
||||
|
||||
teamsnap_object = TeamsnapModel.objects.filter(id=response_object.data['id'])
|
||||
if teamsnap_object:
|
||||
teamsnap_object.update(**d)
|
||||
created = False
|
||||
r.append((teamsnap_object.first(), created))
|
||||
elif not teamsnap_object and create:
|
||||
new_teamsnap_object = TeamsnapModel(**d) # create new benchcoach object
|
||||
new_teamsnap_object.save()
|
||||
created = True
|
||||
r.append((new_teamsnap_object, created))
|
||||
elif not teamsnap_object and not create:
|
||||
raise TeamsnapModel.DoesNotExist
|
||||
|
||||
return r
|
||||
|
||||
def update_events(
|
||||
teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
create: bool = True,
|
||||
create_related: bool = False,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
r = update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel= Event,
|
||||
teamsnap_client= teamsnap_client,
|
||||
additional_fields=['label', 'start_date', 'formatted_title', 'points_for_opponent', 'points_for_team', 'is_game', 'game_type'],
|
||||
related_fields=[('location', Location), ('opponent', Opponent), ('team', Team)],
|
||||
create=create,
|
||||
create_related=create_related,
|
||||
**teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
return r
|
||||
|
||||
def update_opponents(
|
||||
teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
create: bool = True,
|
||||
create_related: bool = False,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
r = update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel= Opponent,
|
||||
teamsnap_client= teamsnap_client,
|
||||
additional_fields=['name'],
|
||||
related_fields=[('team', Team)],
|
||||
create=create,
|
||||
create_related=create_related,
|
||||
**teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
return r
|
||||
|
||||
def update_teams(
|
||||
teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
create: bool = True,
|
||||
create_related: bool = False,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
r = update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel=Team,
|
||||
teamsnap_client=teamsnap_client,
|
||||
additional_fields=['name'],
|
||||
create=create,
|
||||
create_related=create_related,
|
||||
**teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
|
||||
def update_locations(
|
||||
teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
create: bool = True,
|
||||
create_related: bool = False,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
r = update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel=Location,
|
||||
teamsnap_client=teamsnap_client,
|
||||
additional_fields=['name'],
|
||||
related_fields=[('team', Team)],
|
||||
create=create,
|
||||
create_related=create_related,
|
||||
**teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
def update_availabilities(teamsnap_client: teamsnap.teamsnap.api.TeamSnap,
|
||||
create: bool = True,
|
||||
create_related: bool = False,
|
||||
**teamsnap_search_kwargs
|
||||
):
|
||||
r = update_teamsnapbasemodel_from_teamsnap(
|
||||
TeamsnapModel= Availability,
|
||||
teamsnap_client= teamsnap_client,
|
||||
related_fields=[('event', Event), ('member', Member), ('team', Team)],
|
||||
create=create,
|
||||
create_related=create_related,
|
||||
**teamsnap_search_kwargs
|
||||
)
|
||||
|
||||
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(managed_by_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(managed_by_team_id=TEAM_ID):
|
||||
l += update_location(location, create_benchcoach_object=True, create_related=True)
|
||||
|
||||
for member in Member.objects.filter(managed_by_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(managed_by_team_id=TEAM_ID):
|
||||
l += update_event(event, create_benchcoach_object=True, create_related=True)
|
||||
|
||||
for availability in Availability.objects.filter(managed_by_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__":
|
||||
|
||||
TOKEN = BenchcoachUser.objects.get(id=1).teamsnap_access_token
|
||||
USER_ID = BenchcoachUser.objects.get(id=1).teamsnap_user_id
|
||||
TEAM_ID = BenchcoachUser.objects.get(id=1).teamsnapsettings.managed_team_id
|
||||
CLIENT = TeamSnap(token=TOKEN)
|
||||
for Obj in [User]:
|
||||
a = Obj.ApiObject.search(CLIENT, id=USER_ID)
|
||||
for _a in a:
|
||||
obj, created = Obj.update_or_create_from_teamsnap_api(_a.data)
|
||||
|
||||
for Obj in [Event, Availability, Location, Member, Opponent, Team]:
|
||||
a = Obj.ApiObject.search(CLIENT, team_id=TEAM_ID)
|
||||
for _a in a:
|
||||
obj, created = Obj.update_or_create_from_teamsnap_api(_a.data)
|
||||
# update_opponents(CLIENT, team_id=TEAM_ID)
|
||||
# update_events(CLIENT, team_id=TEAM_ID)
|
||||
Reference in New Issue
Block a user