Refactored 'create_teams_fixture'

This commit is contained in:
Corban-Lee 2023-05-09 00:31:10 +01:00
parent 73c55fc301
commit 96e0f7960f
4 changed files with 171 additions and 170 deletions

View File

@ -3,8 +3,8 @@
"model": "mainapp.member",
"pk": 1,
"fields": {
"first_name": "Michael",
"last_name": "Jewett",
"first_name": "Shaquita",
"last_name": "Nichols",
"team": 1,
"peg_number": null
}
@ -13,8 +13,8 @@
"model": "mainapp.member",
"pk": 2,
"fields": {
"first_name": "Robert",
"last_name": "Kearns",
"first_name": "Tawanna",
"last_name": "Kingsbury",
"team": 1,
"peg_number": null
}
@ -23,8 +23,8 @@
"model": "mainapp.member",
"pk": 3,
"fields": {
"first_name": "Jack",
"last_name": "Colon",
"first_name": "Ricardo",
"last_name": "Benton",
"team": 1,
"peg_number": null
}
@ -33,8 +33,8 @@
"model": "mainapp.member",
"pk": 4,
"fields": {
"first_name": "Nina",
"last_name": "Freeman",
"first_name": "David",
"last_name": "Moore",
"team": 2,
"peg_number": null
}
@ -43,8 +43,8 @@
"model": "mainapp.member",
"pk": 5,
"fields": {
"first_name": "Josephine",
"last_name": "Mcdonald",
"first_name": "Patricia",
"last_name": "Mader",
"team": 2,
"peg_number": null
}
@ -53,8 +53,8 @@
"model": "mainapp.member",
"pk": 6,
"fields": {
"first_name": "Don",
"last_name": "Wrape",
"first_name": "Sue",
"last_name": "Coleman",
"team": 2,
"peg_number": null
}
@ -63,8 +63,8 @@
"model": "mainapp.member",
"pk": 7,
"fields": {
"first_name": "Audrey",
"last_name": "Mcguire",
"first_name": "Brandon",
"last_name": "Goodwin",
"team": 3,
"peg_number": null
}
@ -73,8 +73,8 @@
"model": "mainapp.member",
"pk": 8,
"fields": {
"first_name": "Morris",
"last_name": "Delker",
"first_name": "Travis",
"last_name": "Walls",
"team": 3,
"peg_number": null
}
@ -83,8 +83,8 @@
"model": "mainapp.member",
"pk": 9,
"fields": {
"first_name": "Keith",
"last_name": "Cline",
"first_name": "Donna",
"last_name": "Sanders",
"team": 3,
"peg_number": null
}
@ -93,8 +93,8 @@
"model": "mainapp.member",
"pk": 10,
"fields": {
"first_name": "Vincent",
"last_name": "Alconcel",
"first_name": "Debra",
"last_name": "Lu",
"team": 4,
"peg_number": null
}
@ -103,8 +103,8 @@
"model": "mainapp.member",
"pk": 11,
"fields": {
"first_name": "Leroy",
"last_name": "Gibson",
"first_name": "Edwin",
"last_name": "Goldberger",
"team": 4,
"peg_number": null
}
@ -113,8 +113,8 @@
"model": "mainapp.member",
"pk": 12,
"fields": {
"first_name": "Ronald",
"last_name": "Ross",
"first_name": "Peggy",
"last_name": "Lane",
"team": 4,
"peg_number": null
}
@ -123,8 +123,8 @@
"model": "mainapp.member",
"pk": 13,
"fields": {
"first_name": "Dennis",
"last_name": "Thompson",
"first_name": "Dora",
"last_name": "Eye",
"team": 5,
"peg_number": null
}
@ -133,8 +133,8 @@
"model": "mainapp.member",
"pk": 14,
"fields": {
"first_name": "Clarence",
"last_name": "Nieto",
"first_name": "Christopher",
"last_name": "Delap",
"team": 5,
"peg_number": null
}
@ -143,8 +143,8 @@
"model": "mainapp.member",
"pk": 15,
"fields": {
"first_name": "Trena",
"last_name": "Robbins",
"first_name": "John",
"last_name": "Reyes",
"team": 5,
"peg_number": null
}
@ -153,8 +153,8 @@
"model": "mainapp.member",
"pk": 16,
"fields": {
"first_name": "Karen",
"last_name": "Vessell",
"first_name": "Robert",
"last_name": "Reveles",
"team": 6,
"peg_number": null
}
@ -163,8 +163,8 @@
"model": "mainapp.member",
"pk": 17,
"fields": {
"first_name": "Herb",
"last_name": "Mcgowan",
"first_name": "Cheryl",
"last_name": "Jones",
"team": 6,
"peg_number": null
}
@ -173,8 +173,8 @@
"model": "mainapp.member",
"pk": 18,
"fields": {
"first_name": "Jimmie",
"last_name": "Rittenhouse",
"first_name": "Anne",
"last_name": "Thomas",
"team": 6,
"peg_number": null
}
@ -183,8 +183,8 @@
"model": "mainapp.member",
"pk": 19,
"fields": {
"first_name": "Lewis",
"last_name": "Queener",
"first_name": "Erika",
"last_name": "Dolfi",
"team": 7,
"peg_number": null
}
@ -193,8 +193,8 @@
"model": "mainapp.member",
"pk": 20,
"fields": {
"first_name": "Nancy",
"last_name": "Merritt",
"first_name": "Scott",
"last_name": "Hines",
"team": 7,
"peg_number": null
}
@ -203,8 +203,8 @@
"model": "mainapp.member",
"pk": 21,
"fields": {
"first_name": "Elaine",
"last_name": "Foss",
"first_name": "Min",
"last_name": "Baker",
"team": 7,
"peg_number": null
}
@ -213,8 +213,8 @@
"model": "mainapp.member",
"pk": 22,
"fields": {
"first_name": "Natasha",
"last_name": "Perkins",
"first_name": "Laura",
"last_name": "Cleaves",
"team": 8,
"peg_number": null
}
@ -223,8 +223,8 @@
"model": "mainapp.member",
"pk": 23,
"fields": {
"first_name": "Dean",
"last_name": "Carroll",
"first_name": "Deborah",
"last_name": "Pence",
"team": 8,
"peg_number": null
}
@ -233,8 +233,8 @@
"model": "mainapp.member",
"pk": 24,
"fields": {
"first_name": "Lauren",
"last_name": "Carter",
"first_name": "Harvey",
"last_name": "Cabello",
"team": 8,
"peg_number": null
}
@ -243,8 +243,8 @@
"model": "mainapp.member",
"pk": 25,
"fields": {
"first_name": "Robert",
"last_name": "Orr",
"first_name": "Shawn",
"last_name": "Mabe",
"team": 9,
"peg_number": null
}
@ -253,8 +253,8 @@
"model": "mainapp.member",
"pk": 26,
"fields": {
"first_name": "Deborah",
"last_name": "Johnson",
"first_name": "Donald",
"last_name": "Duryea",
"team": 9,
"peg_number": null
}
@ -263,8 +263,8 @@
"model": "mainapp.member",
"pk": 27,
"fields": {
"first_name": "Helen",
"last_name": "Henry",
"first_name": "John",
"last_name": "Mcinturff",
"team": 9,
"peg_number": null
}
@ -273,8 +273,8 @@
"model": "mainapp.member",
"pk": 28,
"fields": {
"first_name": "Linda",
"last_name": "Armstrong",
"first_name": "Ivette",
"last_name": "Paterson",
"team": 10,
"peg_number": null
}
@ -283,8 +283,8 @@
"model": "mainapp.member",
"pk": 29,
"fields": {
"first_name": "Tricia",
"last_name": "Charles",
"first_name": "Mary",
"last_name": "Sussman",
"team": 10,
"peg_number": null
}
@ -293,8 +293,8 @@
"model": "mainapp.member",
"pk": 30,
"fields": {
"first_name": "Cortney",
"last_name": "Hogan",
"first_name": "Peter",
"last_name": "Faison",
"team": 10,
"peg_number": null
}

View File

@ -1,72 +1,72 @@
[
{
"model": "mainapp.team",
"pk": 1,
"fields": {
"section_letter": "A"
{
"model": "mainapp.team",
"pk": 1,
"fields": {
"section_letter": "P"
}
},
{
"model": "mainapp.team",
"pk": 2,
"fields": {
"section_letter": "C"
}
},
{
"model": "mainapp.team",
"pk": 3,
"fields": {
"section_letter": "Y"
}
},
{
"model": "mainapp.team",
"pk": 4,
"fields": {
"section_letter": "B"
}
},
{
"model": "mainapp.team",
"pk": 5,
"fields": {
"section_letter": "T"
}
},
{
"model": "mainapp.team",
"pk": 6,
"fields": {
"section_letter": "K"
}
},
{
"model": "mainapp.team",
"pk": 7,
"fields": {
"section_letter": "N"
}
},
{
"model": "mainapp.team",
"pk": 8,
"fields": {
"section_letter": "S"
}
},
{
"model": "mainapp.team",
"pk": 9,
"fields": {
"section_letter": "Z"
}
},
{
"model": "mainapp.team",
"pk": 10,
"fields": {
"section_letter": "U"
}
}
},
{
"model": "mainapp.team",
"pk": 2,
"fields": {
"section_letter": "B"
}
},
{
"model": "mainapp.team",
"pk": 3,
"fields": {
"section_letter": "C"
}
},
{
"model": "mainapp.team",
"pk": 4,
"fields": {
"section_letter": "D"
}
},
{
"model": "mainapp.team",
"pk": 5,
"fields": {
"section_letter": "E"
}
},
{
"model": "mainapp.team",
"pk": 6,
"fields": {
"section_letter": "F"
}
},
{
"model": "mainapp.team",
"pk": 7,
"fields": {
"section_letter": "G"
}
},
{
"model": "mainapp.team",
"pk": 8,
"fields": {
"section_letter": "H"
}
},
{
"model": "mainapp.team",
"pk": 9,
"fields": {
"section_letter": "J"
}
},
{
"model": "mainapp.team",
"pk": 10,
"fields": {
"section_letter": "K"
}
}
]

View File

@ -5,6 +5,8 @@ from django.core.management.base import BaseCommand
from mainapp.models import Member, Team
# TODO: refactor this file like create_teams_fixtures.py
class Command(BaseCommand):
help = "Creates a fixture with randomly generated Member objects"

View File

@ -1,3 +1,6 @@
"""Command to create test data fixture for teams."""
import random
import json
from string import ascii_uppercase
@ -5,61 +8,57 @@ from django.core.management.base import BaseCommand
from django.db.utils import IntegrityError
from mainapp.models import Team, BLOCKED_SECTION_LETTERS
for char in BLOCKED_SECTION_LETTERS:
ascii_uppercase = ascii_uppercase.replace(char.upper(), "")
class Command(BaseCommand):
help = "Creates a fixture file for Team objects"
def add_arguments(self, parser):
parser.add_argument("num_teams", type=int, help="Number of teams to create")
parser.add_argument("amount_of_teams", type=int, help="Number of teams to create")
def handle(self, *args, **options):
num_teams = options["num_teams"]
limit = len(ascii_uppercase)
if num_teams > limit:
self.stdout.write(self.style.ERROR(f"Number of teams is too large [{num_teams}/{limit}]."))
existing_teams = Team.objects.all()
# Available sections
available_sections = [
char for char in [*ascii_uppercase]
if char.lower() not in BLOCKED_SECTION_LETTERS
and char not in [team.section_letter for team in existing_teams]
]
if not available_sections:
self.stdout.write(self.style.ERROR(
f"There are no available sections for new teams."
))
return
# this code is so shit
# reminder to please rewrite this please
teams = []
iteration = 0
errors = 0
while iteration < num_teams:
try:
team = Team.objects.create(section_letter=ascii_uppercase[iteration])
except IntegrityError as err:
self.stdout.write(self.style.ERROR(err))
errors += 1
if errors > limit:
break # heavy nesting: not good
teams_amount = options["amount_of_teams"]
max_teams = len(available_sections)
iteration += 1
teams.append(team)
if not teams: # TODO: error message
self.stdout.write(self.style.ERROR(f"Couldn't make teams -> ask corban because im too lazy to write an error message right now."))
if teams_amount > max_teams:
self.stdout.write(self.style.ERROR(
f"Number of teams is too large [{teams_amount}/{max_teams}]."
))
return
for team in teams:
self.stdout.write(self.style.SUCCESS(f"Created team {team.team_number}"))
# Create the new teams (this will create them in the database)#
new_teams = []
for i in range(teams_amount):
section_letter = random.choice(available_sections)
available_sections.remove(section_letter)
team = Team.objects.create(section_letter=section_letter)
new_teams.append(team)
filename = f"src/mainapp/fixtures/teams_fixture.json"
teams_fixture = [{
"model": "mainapp.team",
"pk": team.pk,
"fields": {"section_letter": team.section_letter}
} for team in new_teams]
teams_fixture = []
for team in teams:
team_fixture = {
"model": "mainapp.team",
"pk": team.pk,
"fields": {
"section_letter": team.section_letter
}
}
teams_fixture.append(team_fixture)
# Remove the teams from the database
for team in new_teams:
team.delete()
with open(filename, "w") as f:
f.write(json.dumps(teams_fixture, indent=2))
with open("src/mainapp/fixtures/teams_fixture.json", "w") as file:
file.write(json.dumps(teams_fixture, indent=4))
self.stdout.write(self.style.SUCCESS("Created teams_fixture.json."))