Add django management command to rename assignments and surveys
This commit is contained in:
parent
51647c6092
commit
74991704c2
|
|
@ -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}")
|
||||||
Loading…
Reference in New Issue