consolidated objects into one benchcoach app

created benchcoachproject app to contain all the settings and stuff
some other changes that got grouped with this commit is the adding the ApiObject to the TeamSnap object model
This commit is contained in:
2021-12-21 17:14:52 -06:00
parent e9f91126e5
commit 95697ef4fe
174 changed files with 5351 additions and 16551 deletions

View File

@@ -1,6 +0,0 @@
from django.contrib import admin
from .models import Player, StatLine
# Register your models here.
admin.site.register(Player)
admin.site.register(StatLine)

View File

@@ -1,6 +0,0 @@
from django.apps import AppConfig
class PlayersConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'players'

View File

@@ -1,477 +0,0 @@
[
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Tony",
"jersey_number": 13,
"last_name": "Correa"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Tim",
"jersey_number": 8,
"last_name": "Riggenbach"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Thomas",
"jersey_number": 44,
"last_name": "Feazelle"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Philip",
"jersey_number": 25,
"last_name": "Oweimrin"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Phil",
"jersey_number": 21,
"last_name": "Zelenka"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Nick",
"jersey_number": 23,
"last_name": "Schmidt"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Mike",
"jersey_number": 28,
"last_name": "DiCola"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Max",
"jersey_number": 99,
"last_name": "Kiefer"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Matthew",
"jersey_number": 5,
"last_name": "Steffens"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Matt",
"jersey_number": 6,
"last_name": "Burch"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Jules",
"jersey_number": 34,
"last_name": "Cantor"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "John",
"jersey_number": 34,
"last_name": "Lundgren"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Joe",
"jersey_number": 17,
"last_name": "Malafronte"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Hans",
"jersey_number": 18,
"last_name": "Hetrick"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Greg",
"jersey_number": 19,
"last_name": "Sells"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Garrett",
"jersey_number": 17,
"last_name": "Eddy"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Cole",
"jersey_number": 24,
"last_name": "Thompson"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Brian",
"jersey_number": 2,
"last_name": "Lehman"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Brent",
"jersey_number": 27,
"last_name": "Fukushima"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Brandon",
"jersey_number": 3,
"last_name": "Jessee"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Brad",
"jersey_number": 15,
"last_name": "Halperin"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Arron",
"jersey_number": 11,
"last_name": "Kruse"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Amanda",
"jersey_number": 41,
"last_name": "Mordacq"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Alec",
"jersey_number": 14,
"last_name": "Reinke"
}
},
{
"model": "players.player",
"pk": null,
"fields": {
"first_name": "Adrien",
"jersey_number": 45,
"last_name": "Kelly"
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.417,
"onbase_pct": 0.488,
"player_id": 1,
"slugging_pct": 0.472
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.422,
"onbase_pct": 0.518,
"player_id": 2,
"slugging_pct": 0.667
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0,
"onbase_pct": 0.2,
"player_id": 3,
"slugging_pct": 0
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.061,
"onbase_pct": 0.233,
"player_id": 4,
"slugging_pct": 0.061
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.282,
"onbase_pct": 0.338,
"player_id": 5,
"slugging_pct": 0.296
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.267,
"onbase_pct": 0.333,
"player_id": 6,
"slugging_pct": 0.3
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.214,
"onbase_pct": 0.235,
"player_id": 7,
"slugging_pct": 0.357
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.219,
"onbase_pct": 0.324,
"player_id": 8,
"slugging_pct": 0.344
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.28,
"onbase_pct": 0.28,
"player_id": 9,
"slugging_pct": 0.32
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.333,
"onbase_pct": 0.424,
"player_id": 10,
"slugging_pct": 0.373
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0,
"onbase_pct": 0.25,
"player_id": 11,
"slugging_pct": 0
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0,
"onbase_pct": 0,
"player_id": 12,
"slugging_pct": 0
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.379,
"onbase_pct": 0.379,
"player_id": 13,
"slugging_pct": 0.552
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.095,
"onbase_pct": 0.174,
"player_id": 14,
"slugging_pct": 0.143
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.41,
"onbase_pct": 0.486,
"player_id": 15,
"slugging_pct": 0.525
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.357,
"onbase_pct": 0.406,
"player_id": 16,
"slugging_pct": 0.536
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.185,
"onbase_pct": 0.312,
"player_id": 17,
"slugging_pct": 0.259
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.299,
"onbase_pct": 0.378,
"player_id": 18,
"slugging_pct": 0.391
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.438,
"onbase_pct": 0.571,
"player_id": 19,
"slugging_pct": 0.781
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.333,
"onbase_pct": 0.417,
"player_id": 20,
"slugging_pct": 0.367
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.333,
"onbase_pct": 0.41,
"player_id": 22,
"slugging_pct": 0.522
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.062,
"onbase_pct": 0.211,
"player_id": 23,
"slugging_pct": 0.125
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.5,
"onbase_pct": 0.611,
"player_id": 24,
"slugging_pct": 0.5
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0.25,
"onbase_pct": 0.25,
"player_id": 25,
"slugging_pct": 0.5
}
},
{
"model": "players.statline",
"pk": null,
"fields": {
"batting_avg": 0,
"onbase_pct": 0,
"player_id": 21,
"slugging_pct": 0
}
}
]

View File

@@ -1,98 +0,0 @@
- model: players.player
pk: 1
fields:
first_name: Edric
last_name: Tosser
jersey_number: 1
team: 1
- model: players.player
pk: 2
fields:
first_name: Paula
last_name: Mason
jersey_number: 2
team: 1
- model: players.player
pk: 3
fields:
first_name: Declan
last_name: Suzanne
jersey_number: 3
team: 1
- model: players.player
pk: 4
fields:
first_name: Baby
last_name: Triumphant
jersey_number: 4
team: 1
- model: players.player
pk: 5
fields:
first_name: Joshua
last_name: Butt
jersey_number: 5
team: 1
- model: players.player
pk: 6
fields:
first_name: Isaac
last_name: Johnson
jersey_number: 6
team: 1
- model: players.player
pk: 7
fields:
first_name: Rivers
last_name: Rosa
jersey_number: 7
team: 1
- model: players.player
pk: 8
fields:
first_name: Lou
last_name: Roseheart
jersey_number: 8
team: 1
- model: players.player
pk: 9
fields:
first_name: Wesley
last_name: Poole
jersey_number: 9
team: 1
- model: players.player
pk: 10
fields:
first_name: Mullen
last_name: Peterson
jersey_number: 10
team: 1
- model: players.player
pk: 11
fields:
first_name: Justice
last_name: Spoon
jersey_number: 11
team: 1
- model: players.player
pk: 12
fields:
first_name: Caleb
last_name: Alvarado
jersey_number: 12
team: 1
- model: players.player
pk: 13
fields:
first_name: Atlas
last_name: Guerra
jersey_number: 13
team: 1
- model: players.player
pk: 14
fields:
first_name: Swamuel
last_name: Mora
jersey_number: 14
team: 1

View File

@@ -1,7 +0,0 @@
from django import forms
from .models import Player
class PlayerForm(forms.ModelForm):
class Meta:
model = Player
fields = ['first_name', 'last_name', 'jersey_number', 'team']

View File

@@ -1,37 +0,0 @@
# Generated by Django 3.2.6 on 2021-11-07 17:43
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Player',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('first_name', models.CharField(max_length=200)),
('last_name', models.CharField(max_length=200)),
('jersey_number', models.IntegerField()),
],
options={
'unique_together': {('first_name', 'last_name')},
},
),
migrations.CreateModel(
name='Stat',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('batting_avg', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('onbase_pct', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('slugging_pct', models.DecimalField(decimal_places=3, default=0, max_digits=4)),
('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='players.player')),
],
),
]

View File

@@ -1,17 +0,0 @@
# Generated by Django 3.2.6 on 2021-11-07 18:46
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('players', '0001_initial'),
]
operations = [
migrations.RenameModel(
old_name='Stat',
new_name='StatLine',
),
]

View File

@@ -1,20 +0,0 @@
# Generated by Django 3.2.6 on 2021-11-09 02:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('teams', '0001_initial'),
('players', '0002_rename_stat_statline'),
]
operations = [
migrations.AddField(
model_name='player',
name='team',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='teams.team'),
),
]

View File

@@ -1,32 +0,0 @@
from django.db import models
from teams.models import Team
class Player(models.Model):
first_name = models.CharField(max_length=200)
last_name = models.CharField(max_length=200)
jersey_number = models.IntegerField()
team = models.ForeignKey(Team, null=True, on_delete=models.CASCADE)
def __str__(self):
return f"{self.last_name}, {self.first_name}"
class Meta:
unique_together = ('first_name', 'last_name',)
class StatLine(models.Model):
player = models.ForeignKey(Player, on_delete=models.CASCADE)
batting_avg = models.DecimalField(max_digits=4, decimal_places=3, default=0)
onbase_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
slugging_pct = models.DecimalField(max_digits=4, decimal_places=3, default=0)
def __str__(self):
return f"{self.slash_line}"
@property
def slash_line(self):
return "/".join([
f"{self.batting_avg:.3f}".lstrip("0"),
f"{self.onbase_pct:.3f}".lstrip("0"),
f"{self.slugging_pct:.3f}".replace("0.",".")
]
)

View File

@@ -1,58 +0,0 @@
from django.test import TestCase, Client
from django.urls import reverse
from .models import Player
FIXTURES = ['blaseball']
class TestPlayerModel(TestCase):
fixtures = FIXTURES
def test_query_player(self):
"""
Return the desired player
"""
player = Player.objects.get(id=1)
self.assertEqual(player.first_name, "Edric")
self.assertEqual(player.last_name, "Tosser")
self.assertEqual(player.jersey_number, 1)
self.assertEqual(player.team.name, "Chicago Firefighters")
class TestPlayerViews(TestCase):
fixtures = FIXTURES
def test_player_list(self):
response = self.client.get(reverse('players list'))
self.assertEqual(response.status_code, 200)
def test_player_edit(self):
response = self.client.get(reverse('edit player', args=[1]))
self.assertEqual(response.status_code, 200)
# create new player
new_player_data = {
'first_name': "A new player first name",
'last_name': "A new player last name",
'jersey_number':99,
'team':1
}
response = self.client.post(reverse('edit player', args=[0]), data=new_player_data)
self.assertEqual(201, response.status_code)
new_player = Player.objects.get(id=response.context['id'])
self.assertEqual(new_player_data['first_name'], new_player.first_name)
self.assertEqual(new_player_data['last_name'], new_player.last_name)
# modify player
modified_player_data = {
'first_name': "A changed player first name",
'last_name': "A changed player last name",
'jersey_number': 99,
'team': 1
}
response = self.client.post(reverse('edit player', args=[1]), data=modified_player_data)
self.assertEqual(200, response.status_code)
self.assertEqual(1, response.context['id'])
modified_player = Player.objects.get(id=response.context['id'])
self.assertEqual(modified_player_data['first_name'], modified_player.first_name)
self.assertEqual(modified_player_data['last_name'], modified_player.last_name)

View File

@@ -1,12 +0,0 @@
from django.urls import path, include
from .views import PlayerListView, PlayerEditView
from . import views
urlpatterns = [
path('', views.root, name="root"),
path('list', PlayerListView.as_view(), name='players list'),
path('edit/<int:id>', PlayerEditView.as_view(), name="edit player"),
path('edit', PlayerEditView.as_view(), name="edit player")
]

View File

@@ -1,27 +0,0 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic.list import ListView
from django.http import HttpResponse
from django.urls import reverse
from .models import Player
from .forms import PlayerForm
from lib.views import BenchcoachListView, BenchcoachEditView
# Create your views here.
class PlayerListView(BenchcoachListView):
Model = Player
edit_url = 'edit player'
list_url = 'players list'
page_title = "Players"
title_strf = "{first_name} {last_name}"
subtitle_strf = "#{jersey_number}"
active_tabs = ['members_tab']
def root(request):
return redirect('/players/list')
class PlayerEditView(BenchcoachEditView):
Form = PlayerForm
Model = Player
edit_url = 'edit player'
list_url = 'players list'