From acf90d4256b17b6f0b82ab4567546ef85a8b1a3b Mon Sep 17 00:00:00 2001 From: Tony Date: Tue, 21 Dec 2021 17:18:39 -0600 Subject: [PATCH] a lot of teamsnap sync work. not entirely happy with all of it --- teamsnap/migrations/0001_initial.py | 110 ++++++-- teamsnap/templates/teamsnap/home.html | 42 ++- teamsnap/templates/teamsnap/lineup.html | 2 +- teamsnap/urls.py | 2 +- teamsnap/utils/import_teamsnap.py | 329 +++++++++++++----------- teamsnap/utils/import_teamsnap_2.py | 198 ++++++++++++++ teamsnap/utils/teamsnap_object_utils.py | 165 ++++++++++++ teamsnap/views.py | 102 ++++++-- 8 files changed, 739 insertions(+), 211 deletions(-) create mode 100644 teamsnap/utils/import_teamsnap_2.py create mode 100644 teamsnap/utils/teamsnap_object_utils.py diff --git a/teamsnap/migrations/0001_initial.py b/teamsnap/migrations/0001_initial.py index d5ee178..4ccc851 100644 --- a/teamsnap/migrations/0001_initial.py +++ b/teamsnap/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.6 on 2021-11-20 23:53 +# Generated by Django 3.2.6 on 2021-12-17 21:35 from django.db import migrations, models import django.db.models.deletion @@ -9,31 +9,47 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('teams', '0001_initial'), - ('players', '0003_player_team'), - ('venues', '0001_initial'), - ('events', '0004_delete_availability'), + ('benchcoach', '0001_initial'), ] operations = [ migrations.CreateModel( - name='User', + name='Team', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('teamsnap_id', models.CharField(max_length=10)), - ('access_token', models.CharField(max_length=50)), + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('name', models.CharField(max_length=50, null=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teamsnapteam', to='benchcoach.team')), ], options={ 'abstract': False, }, ), migrations.CreateModel( - name='Team', + name='User', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('teamsnap_id', models.CharField(max_length=10)), + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('first_name', models.CharField(max_length=50, null=True)), + ('last_name', models.CharField(max_length=50, null=True)), + ('email', models.EmailField(max_length=254, null=True)), + ('managed_teams', models.ManyToManyField(to='teamsnap.Team')), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Opponent', + fields=[ + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), ('name', models.CharField(max_length=50, null=True)), - ('team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teams.team')), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='benchcoach.team')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), ], options={ 'abstract': False, @@ -42,10 +58,15 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Member', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('teamsnap_id', models.CharField(max_length=10)), - ('name', models.CharField(max_length=50, null=True)), - ('player', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='players.player')), + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('first_name', models.CharField(max_length=50, null=True)), + ('last_name', models.CharField(max_length=50, null=True)), + ('jersey_number', models.IntegerField(null=True)), + ('is_non_player', models.BooleanField()), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='benchcoach.player')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), ], options={ 'abstract': False, @@ -54,10 +75,12 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Location', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('teamsnap_id', models.CharField(max_length=10)), + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), ('name', models.CharField(max_length=50, null=True)), - ('venue', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='venues.venue')), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='benchcoach.venue')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), ], options={ 'abstract': False, @@ -66,17 +89,54 @@ class Migration(migrations.Migration): migrations.CreateModel( name='Event', fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('teamsnap_id', models.CharField(max_length=10)), - ('name', models.CharField(max_length=50, null=True)), + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), ('label', models.CharField(max_length=50, null=True)), ('start_date', models.DateTimeField(null=True)), - ('event', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='events.event')), + ('formatted_title', models.CharField(max_length=50, null=True)), + ('points_for_opponent', models.PositiveSmallIntegerField(null=True)), + ('points_for_team', models.PositiveSmallIntegerField(null=True)), + ('is_game', models.BooleanField()), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='teamsnap_event', to='benchcoach.event')), ('location', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.location')), - ('opponent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), + ('opponent', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='opponent', to='teamsnap.opponent')), ], options={ 'abstract': False, }, ), + migrations.CreateModel( + name='Availability', + fields=[ + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('status_code', models.SmallIntegerField(choices=[(1, 'Yes'), (0, 'No'), (2, 'Maybe'), (None, 'Unknown')], default=None, null=True)), + ('benchcoach_object', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='benchcoach.availability')), + ('event', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.event')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), + ('member', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.member')), + ], + options={ + 'verbose_name_plural': 'availabilities', + }, + ), + migrations.CreateModel( + name='LineupEntry', + fields=[ + ('id', models.CharField(max_length=50, primary_key=True, serialize=False, unique=True)), + ('created_at', models.DateTimeField(null=True)), + ('updated_at', models.DateTimeField(null=True)), + ('label', models.PositiveSmallIntegerField(blank=True, choices=[(11, 'EH'), (1, 'P'), (2, 'C'), (3, '1B'), (4, '2B'), (5, '3B'), (6, 'SS'), (7, 'LF'), (8, 'CF'), (9, 'RF'), (10, 'DH')], default=None, null=True)), + ('sequence', models.PositiveSmallIntegerField(blank=True, default=0, null=True)), + ('event', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='teamsnap.event')), + ('managed_by_team', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teamsnap.team')), + ('member', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='teamsnap.member')), + ], + options={ + 'unique_together': {('member', 'event')}, + }, + ), ] diff --git a/teamsnap/templates/teamsnap/home.html b/teamsnap/templates/teamsnap/home.html index c284b61..8d65c96 100644 --- a/teamsnap/templates/teamsnap/home.html +++ b/teamsnap/templates/teamsnap/home.html @@ -2,7 +2,6 @@ {% block title %} {{ title }}{% endblock %} {% block content %} -

Currently Logged in as

BenchCoach: {{ user }} ({{ user.email }})

TeamSnap: {{ teamsnap_user.email }}

@@ -14,29 +13,48 @@ Loading... - - - + + {% include 'messages.html' %} +