Add django management command to rename assignments and surveys

This commit is contained in:
Ramon Wenger 2023-10-05 18:13:36 +02:00
parent 51647c6092
commit 74991704c2
1 changed files with 99 additions and 0 deletions

View File

@ -0,0 +1,99 @@
from django.core.management import BaseCommand
import re
from django.db.models import Q
from assignments.models import Assignment
from surveys.models import Survey
class Command(BaseCommand):
"""
usage: `python manage.py migrate_surveys_assignments_titles
"""
def handle(self, *args, **options):
self.stdout.write("this")
assignments = Assignment.objects.filter(
Q(owner__isnull=True) | Q(owner__username="guru")
)
count = 0
matched = 0
pattern = re.compile(
r"^(\w)\s(?:\dLJ\s)?(LF\d{1,2})\s(?:[MT]\d{1,2}\s)?(A\d{1,2}\w?)"
)
module_pattern = re.compile(r"^\w+\s(\d{1,2})") # Modul 1 --> M1
level_pattern = re.compile(r"^(\d)\.\s\w+") # 1. Lehrjahr --> LJ1
# pattern1 = re.compile(r"^\w\sLF\d{1,2}\sA\d{1,2}\w?:") # D LF1 A12: Bla
assert module_pattern.match("Modul 1")
assert module_pattern.match("Modul 24")
assert level_pattern.match("1. Lehrjahr")
assert pattern.match("D LF1 A12: Bla")
assert pattern.match("D LF1 A12g: Bla")
# pattern2 = re.compile(
# r"^\w\sLF\d{1,2}\sT\d{1,2}\sA\d{1,2}\w?:"
# ) # D LF1 T9 A12: Bla
assert pattern.match("D LF1 T9 A2a: Bla")
assert pattern.match("D LF12 T9 A12: Bla")
# pattern3 = re.compile(
# r"^\w\s\dLJ\sLF\d{1,2}\sM\d{1,2}\sA\d{1,2}\w?:"
# ) # D 1LJ LF1 M2 A12: Bla
assert pattern.match("D 1LJ LF1 M2 A12: Bla")
assert pattern.match("D 1LJ LF1 M2 A12s: Bla")
for assignment in assignments:
count += 1
match = pattern.match(assignment.title)
if (
match
is not None
# pattern1.match(assignment.title) is not None
# or pattern2.match(assignment.title) is not None
# or pattern3.match(assignment.title) is not None
):
# print(match.groups())
try:
module = assignment.module
module_match = module_pattern.match(module.meta_title)
level = module.level
level_match = level_pattern.match(level.name)
new_title = f"{match.group(1)} LJ{level_match.group(1)} {match.group(2)} M{module_match.group(1)} {match.group(3)}"
self.stdout.write(new_title)
assignment.title = new_title
matched += 1
except AttributeError:
self.stderr.write(f"assignment {assignment.id} failed")
# else:
# self.stdout.write(assignment.title)
Assignment.objects.bulk_update(assignments, ["title"])
self.stdout.write(f"assignments: {matched}/{count}")
count = 0
matched = 0
surveys = Survey.objects.all()
for survey in surveys:
count += 1
match = pattern.match(survey.title)
if (
match
is not None
# pattern1.match(survey.title) is not None
# or pattern2.match(survey.title) is not None
# or pattern3.match(survey.title) is not None
):
try:
module = survey.module
module_match = module_pattern.match(module.meta_title)
level = module.level
level_match = level_pattern.match(level.name)
new_title = f"{match.group(1)} LJ{level_match.group(1)} {match.group(2)} M{module_match.group(1)} {match.group(3)}"
self.stdout.write(new_title)
survey.title = new_title
matched += 1
except AttributeError:
self.stderr.write(f"survey {survey.id} failed")
# else:
# self.stdout.write(survey.title)
Survey.objects.bulk_update(surveys, ["title"])
self.stdout.write(f"surveys: {matched}/{count}")