From 96e0f7960ff93a02fc32bc13b510bb7f82899f43 Mon Sep 17 00:00:00 2001 From: Corban-Lee <77944149+XordK@users.noreply.github.com> Date: Tue, 9 May 2023 00:31:10 +0100 Subject: [PATCH] Refactored 'create_teams_fixture' --- src/mainapp/fixtures/members_fixture.json | 120 +++++++-------- src/mainapp/fixtures/teams_fixture.json | 138 +++++++++--------- .../commands/create_members_fixture.py | 2 + .../commands/create_teams_fixture.py | 81 +++++----- 4 files changed, 171 insertions(+), 170 deletions(-) diff --git a/src/mainapp/fixtures/members_fixture.json b/src/mainapp/fixtures/members_fixture.json index 776e9a9..4ae9387 100644 --- a/src/mainapp/fixtures/members_fixture.json +++ b/src/mainapp/fixtures/members_fixture.json @@ -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 } diff --git a/src/mainapp/fixtures/teams_fixture.json b/src/mainapp/fixtures/teams_fixture.json index f2de973..1de0167 100644 --- a/src/mainapp/fixtures/teams_fixture.json +++ b/src/mainapp/fixtures/teams_fixture.json @@ -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" - } - } ] \ No newline at end of file diff --git a/src/mainapp/management/commands/create_members_fixture.py b/src/mainapp/management/commands/create_members_fixture.py index 39c9812..ebed5e8 100644 --- a/src/mainapp/management/commands/create_members_fixture.py +++ b/src/mainapp/management/commands/create_members_fixture.py @@ -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" diff --git a/src/mainapp/management/commands/create_teams_fixture.py b/src/mainapp/management/commands/create_teams_fixture.py index 64da24b..831381f 100644 --- a/src/mainapp/management/commands/create_teams_fixture.py +++ b/src/mainapp/management/commands/create_teams_fixture.py @@ -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."))