From 69db0b22febe46aeee4c554f87f1fd1e2dd5669d Mon Sep 17 00:00:00 2001
From: Jonathan Weth <git@jonathanweth.de>
Date: Thu, 23 Nov 2023 22:11:35 +0100
Subject: [PATCH] Fix lint

---
 .../management/commands/untis_import_mysql.py |  2 +-
 .../untis/util/mysql/importers/absences.py    |  4 +-
 .../untis/util/mysql/importers/common_data.py | 42 +++++++++----------
 .../apps/untis/util/mysql/importers/events.py |  4 +-
 .../apps/untis/util/mysql/importers/exams.py  |  2 +-
 .../untis/util/mysql/importers/holidays.py    |  4 +-
 .../untis/util/mysql/importers/lessons.py     | 18 +++-----
 .../util/mysql/importers/substitutions.py     | 36 +++++++---------
 .../apps/untis/util/mysql/importers/terms.py  |  4 +-
 aleksis/apps/untis/util/mysql/main.py         |  4 +-
 aleksis/apps/untis/util/mysql/util.py         |  2 +-
 11 files changed, 53 insertions(+), 69 deletions(-)

diff --git a/aleksis/apps/untis/management/commands/untis_import_mysql.py b/aleksis/apps/untis/management/commands/untis_import_mysql.py
index e4abbf5..2da36c8 100644
--- a/aleksis/apps/untis/management/commands/untis_import_mysql.py
+++ b/aleksis/apps/untis/management/commands/untis_import_mysql.py
@@ -27,4 +27,4 @@ class Command(BaseCommand):
         background = options["background"]
         school_id = options.get("school_id", None)
         version = options.get("plan_version", None)
-        command.run(background=background, version=version)
+        command.run(background=background, school_id=school_id, version=version)
diff --git a/aleksis/apps/untis/util/mysql/importers/absences.py b/aleksis/apps/untis/util/mysql/importers/absences.py
index 9d5e4e7..e5a0f23 100644
--- a/aleksis/apps/untis/util/mysql/importers/absences.py
+++ b/aleksis/apps/untis/util/mysql/importers/absences.py
@@ -55,7 +55,7 @@ def import_absences(
     for absence in tqdm(absences, desc="Import absences", **TQDM_DEFAULTS):
         import_ref = absence.absence_id
 
-        logger.info("Import absence {}".format(import_ref))
+        logger.info(f"Import absence {import_ref}")
 
         if absence.absence_reason_id == 0:
             reason = unknown_reason
@@ -181,7 +181,7 @@ def import_absences(
         date_start__lte=validity_range.date_end, date_end__gte=validity_range.date_start
     ):
         if a.import_ref_untis and a.import_ref_untis not in existing_absences:
-            logger.info("Absence {} deleted".format(a.id))
+            logger.info(f"Absence {a.id} deleted")
             a.delete()
 
     return ref, created_substitutions
diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py
index dab0e70..8ef716b 100644
--- a/aleksis/apps/untis/util/mysql/importers/common_data.py
+++ b/aleksis/apps/untis/util/mysql/importers/common_data.py
@@ -39,9 +39,7 @@ def import_subjects(validity_range: ValidityRange) -> Dict[int, chronos_models.S
         # Check if needed data are provided
         if not subject.name:
             raise RuntimeError(
-                "Subject ID {}: Cannot import subject without short name.".format(
-                    subject.subject_id
-                )
+                f"Subject ID {subject.subject_id}: Cannot import subject without short name."
             )
 
         # Build values
@@ -51,7 +49,7 @@ def import_subjects(validity_range: ValidityRange) -> Dict[int, chronos_models.S
         colour_bg = untis_colour_to_hex(subject.backcolor)
         import_ref = subject.subject_id
 
-        logger.info("Import subject {} …".format(short_name))
+        logger.info(f"Import subject {short_name} …")
 
         # Get or create subject object by short name
         new_subject, created = chronos_models.Subject.objects.get_or_create(
@@ -106,9 +104,7 @@ def import_teachers(validity_range: ValidityRange) -> Dict[int, core_models.Pers
         # Check if needed data are provided
         if not teacher.name:
             raise RuntimeError(
-                "Teacher ID {}: Cannot import teacher without short name.".format(
-                    teacher.teacher_id
-                )
+                f"Teacher ID {teacher.teacher_id}: Cannot import teacher without short name."
             )
 
         # Build values
@@ -117,7 +113,7 @@ def import_teachers(validity_range: ValidityRange) -> Dict[int, core_models.Pers
         last_name = teacher.longname if teacher.longname else teacher.name
         import_ref = teacher.teacher_id
 
-        logger.info("Import teacher {} (as person) …".format(short_name))
+        logger.info(f"Import teacher {short_name} (as person) …")
 
         try:
             new_teacher = core_models.Person.objects.get(short_name__iexact=short_name)
@@ -175,7 +171,7 @@ def import_classes(
         # Check if needed data are provided
         if not class_.name:
             raise RuntimeError(
-                "Class ID {}: Cannot import class without short name.".format(class_.teacher_id)
+                f"Class ID {class_.teacher_id}: Cannot import class without short name."
             )
 
         # Build values
@@ -185,7 +181,7 @@ def import_classes(
         owners = [teachers_ref[t_id] for t_id in teacher_ids]
         import_ref = class_.class_id
 
-        logger.info("Import class {} (as group) …".format(short_name))
+        logger.info(f"Import class {short_name} (as group) …")
 
         try:
             new_group = core_models.Group.objects.get(
@@ -274,16 +270,14 @@ def import_rooms(validity_range: ValidityRange) -> Dict[int, core_models.Room]:
 
     for room in tqdm(rooms, desc="Import rooms", **TQDM_DEFAULTS):
         if not room.name:
-            raise RuntimeError(
-                "Room ID {}: Cannot import room without short name.".format(room.room_id)
-            )
+            raise RuntimeError(f"Room ID {room.room_id}: Cannot import room without short name.")
 
         # Build values
         short_name = room.name[:10]
         name = room.longname[:30] if room.longname else short_name
         import_ref = room.room_id
 
-        logger.info("Import room {} …".format(short_name))
+        logger.info(f"Import room {short_name} …")
 
         new_room, created = core_models.Room.objects.get_or_create(
             short_name=short_name,
@@ -336,7 +330,7 @@ def import_supervision_areas(
         colour_bg = untis_colour_to_hex(area.backcolor)
         import_ref = area.corridor_id
 
-        logger.info("Import supervision area {} …".format(short_name))
+        logger.info(f"Import supervision area {short_name} …")
 
         new_area, created = chronos_models.SupervisionArea.objects.get_or_create(
             short_name=short_name,
@@ -426,14 +420,16 @@ def import_supervision_areas(
             period_after_break = supervision.break_item.before_period_number
 
             # Delete supervision if no longer existing
-            if weekday in supervisions_ref:
-                if period_after_break in supervisions_ref[weekday]:
-                    if supervision in supervisions_ref[weekday][period_after_break]:
-                        delete = False
+            if (
+                weekday in supervisions_ref
+                and period_after_break in supervisions_ref[weekday]
+                and supervision in supervisions_ref[weekday][period_after_break]
+            ):
+                delete = False
 
             if delete:
                 supervision.delete()
-                logger.info("    Supervision {} deleted".format(supervision))
+                logger.info(f"    Supervision {supervision} deleted")
 
         ref[import_ref] = {"area": new_area, "supervisions": supervisions_ref}
 
@@ -473,7 +469,7 @@ def import_time_periods(
         start_time = times_ref[period][0]
         end_time = times_ref[period][1]
 
-        logger.info("Import time period on weekday {} in the {}. period".format(weekday, period))
+        logger.info(f"Import time period on weekday {weekday} in the {period}. period")
 
         new_time_period, created = chronos_models.TimePeriod.objects.get_or_create(
             weekday=weekday,
@@ -528,7 +524,7 @@ def import_breaks(
                 before_period.period if before_period else "-",
             )
 
-            logger.info("Generate break {}".format(short_name))
+            logger.info(f"Generate break {short_name}")
 
             new_break, created = chronos_models.Break.objects.get_or_create(
                 after_period=after_period,
@@ -571,7 +567,7 @@ def import_absence_reasons(
         name = reason.longname if reason.longname else short_name
         import_ref = reason.absence_reason_id
 
-        logger.info("Import absence reason {} …".format(short_name))
+        logger.info(f"Import absence reason {short_name} …")
 
         new_reason, created = chronos_models.AbsenceReason.objects.get_or_create(
             import_ref_untis=import_ref,
diff --git a/aleksis/apps/untis/util/mysql/importers/events.py b/aleksis/apps/untis/util/mysql/importers/events.py
index 06522be..0841846 100644
--- a/aleksis/apps/untis/util/mysql/importers/events.py
+++ b/aleksis/apps/untis/util/mysql/importers/events.py
@@ -44,7 +44,7 @@ def import_events(
     for event in tqdm(events, desc="Import events", **TQDM_DEFAULTS):
         import_ref = event.event_id
 
-        logger.info("Import event {}".format(import_ref))
+        logger.info(f"Import event {import_ref}")
 
         # Build values
         comment = event.text
@@ -142,5 +142,5 @@ def import_events(
             validity_range.date_start, validity_range.date_end
         ):
             if e.import_ref_untis and e.import_ref_untis not in existing_events:
-                logger.info("Event {} deleted".format(e.id))
+                logger.info(f"Event {e.id} deleted")
                 e.delete()
diff --git a/aleksis/apps/untis/util/mysql/importers/exams.py b/aleksis/apps/untis/util/mysql/importers/exams.py
index b72deca..1eb1222 100644
--- a/aleksis/apps/untis/util/mysql/importers/exams.py
+++ b/aleksis/apps/untis/util/mysql/importers/exams.py
@@ -47,7 +47,7 @@ def import_exams(
     for exam in tqdm(exams, desc="Import exams", **TQDM_DEFAULTS):
         import_ref = exam.exam_id
 
-        logger.info("Import exam {}".format(import_ref))
+        logger.info(f"Import exam {import_ref}")
 
         # Build values
         title = exam.name or ""
diff --git a/aleksis/apps/untis/util/mysql/importers/holidays.py b/aleksis/apps/untis/util/mysql/importers/holidays.py
index cd34a05..bc992a3 100644
--- a/aleksis/apps/untis/util/mysql/importers/holidays.py
+++ b/aleksis/apps/untis/util/mysql/importers/holidays.py
@@ -25,7 +25,7 @@ def import_holidays(validity_range: ValidityRange) -> Dict[int, chronos_models.H
         # Check if needed data are provided
         if not holiday.name:
             raise RuntimeError(
-                "Holiday ID {}: Cannot import holiday without short name.".format(import_ref)
+                f"Holiday ID {import_ref}: Cannot import holiday without short name."
             )
 
         title = holiday.name[:50]
@@ -34,7 +34,7 @@ def import_holidays(validity_range: ValidityRange) -> Dict[int, chronos_models.H
         date_start = untis_date_to_date(holiday.datefrom)
         date_end = untis_date_to_date(holiday.dateto)
 
-        logger.info("Import holiday {} …".format(title))
+        logger.info(f"Import holiday {title} …")
 
         # Get or create holiday
         new_holiday, created = chronos_models.Holiday.objects.get_or_create(
diff --git a/aleksis/apps/untis/util/mysql/importers/lessons.py b/aleksis/apps/untis/util/mysql/importers/lessons.py
index 4a50d65..4b86873 100644
--- a/aleksis/apps/untis/util/mysql/importers/lessons.py
+++ b/aleksis/apps/untis/util/mysql/importers/lessons.py
@@ -88,7 +88,7 @@ def import_lessons(
         current_teacher_id = None
         # All part lessons (courses)
         for i, el in enumerate(raw_lesson_data_2):
-            logger.info("  Lesson part {}".format(i))
+            logger.info(f"  Lesson part {i}")
 
             # Get plain ids
             teacher_id = int(el[0]) if el[0] else 0
@@ -96,10 +96,7 @@ def import_lessons(
             class_ids = untis_split_third(el[17], conv=int)
 
             # Get teacher
-            if teacher_id != 0:
-                teacher = teachers_ref[teacher_id]
-            else:
-                teacher = None
+            teacher = teachers_ref[teacher_id] if teacher_id != 0 else None
 
             teachers = [teacher] if teacher else []
 
@@ -127,7 +124,7 @@ def import_lessons(
             course_group_not_found_and_not_created = False
             if get_site_preferences()["untis_mysql__use_course_groups"]:
                 # Negative import_ref denotes a course group
-                group_import_ref = -int("{}{}".format(lesson_id, i))
+                group_import_ref = -int(f"{lesson_id}{i}")
 
                 # Search by parent groups, teachers/owners and subject
                 qs = (
@@ -317,14 +314,11 @@ def import_lessons(
 
             # Sync time periods
             for j, time_period in enumerate(time_periods):
-                logger.info("    Import lesson period {}".format(time_period))
+                logger.info(f"    Import lesson period {time_period}")
 
                 # Get room if provided
                 rooms = rooms_per_periods[j]
-                if use_room_idx < len(rooms):
-                    room = rooms[use_room_idx]
-                else:
-                    room = None
+                room = rooms[use_room_idx] if use_room_idx < len(rooms) else None
 
                 # Check if an old lesson period is provided
                 old_lesson_period_qs = old_lesson_periods_qs.filter(period=time_period)
@@ -354,7 +348,7 @@ def import_lessons(
 
     for lesson in chronos_models.Lesson.objects.filter(validity=validity_range):
         if lesson.lesson_id_untis and lesson.lesson_id_untis not in existing_lessons:
-            logger.info("Lesson {} deleted".format(lesson.id))
+            logger.info(f"Lesson {lesson.id} deleted")
             with reversion.create_revision():
                 set_comment(_("Deleted by Untis import"))
                 lesson.save()
diff --git a/aleksis/apps/untis/util/mysql/importers/substitutions.py b/aleksis/apps/untis/util/mysql/importers/substitutions.py
index 682462e..ab00c79 100644
--- a/aleksis/apps/untis/util/mysql/importers/substitutions.py
+++ b/aleksis/apps/untis/util/mysql/importers/substitutions.py
@@ -65,7 +65,7 @@ def import_substitutions(
 
         lesson_id = sub.lesson_idsubst
 
-        logger.info("Import substitution {}".format(sub_id))
+        logger.info(f"Import substitution {sub_id}")
 
         # Time
         date = untis_date_to_date(sub.date)
@@ -87,10 +87,7 @@ def import_substitutions(
         comment = sub.text
 
         # Teacher
-        if sub.teacher_idlessn != 0:
-            teacher_old = teachers_ref[sub.teacher_idlessn]
-        else:
-            teacher_old = None
+        teacher_old = teachers_ref[sub.teacher_idlessn] if sub.teacher_idlessn != 0 else None
 
         teachers = []
         teacher_new = None
@@ -112,7 +109,7 @@ def import_substitutions(
 
             if lesson_periods.exists():
                 lesson_period = lesson_periods[0]
-                logger.info("  Matching lesson period found ({})".format(lesson_period))
+                logger.info(f"  Matching lesson period found ({lesson_period})")
             else:
                 lesson_period = None
 
@@ -144,17 +141,16 @@ def import_substitutions(
             for id_ in class_ids:
                 classes.append(classes_ref[id_])
 
-            if get_site_preferences()["untis_mysql__ignore_incomplete_substitutions"]:
                 # Skip incomplete substitutions
-                if (
-                    not room_new
-                    and not subject_new
-                    and not teachers
-                    and not cancelled
-                    and not cancelled_for_teachers
-                    and not comment
-                ):
-                    continue
+            if get_site_preferences()["untis_mysql__ignore_incomplete_substitutions"] and (
+                not room_new
+                and not subject_new
+                and not teachers
+                and not cancelled
+                and not cancelled_for_teachers
+                and not comment
+            ):
+                continue
 
             if lesson_period:
                 (
@@ -196,7 +192,7 @@ def import_substitutions(
                 groups = [classes_ref[pk] for pk in untis_split_first(sub.classids, int)]
 
                 room = room_old if not room_new and room_old else room_new
-                subject = subject_old if not subject_new else subject_new
+                subject = subject_new if subject_new else subject_old
                 teachers = [teacher_old] if not teacher_new else [teacher_new]
                 if not teacher_new and not teacher_old:
                     teachers = []
@@ -273,7 +269,7 @@ def import_substitutions(
         if (s.import_ref_untis and s.import_ref_untis not in existing_subs) or (
             s.absence_ref_untis and s.absence_ref_untis not in absence_substitutions
         ):
-            logger.info("Substitution {} deleted".format(s.id))
+            logger.info(f"Substitution {s.id} deleted")
             s.delete()
 
     lesson_substitutions_in_range.exclude(lesson_period__lesson__validity=validity_range).delete()
@@ -283,7 +279,7 @@ def import_substitutions(
         validity_range.date_start, validity_range.date_end
     ):
         if s.import_ref_untis and s.import_ref_untis not in existing_subs:
-            logger.info("Extra lesson {} deleted".format(s.id))
+            logger.info(f"Extra lesson {s.id} deleted")
             s.delete()
 
     # Delete all no longer existing supervision substitutions
@@ -292,7 +288,7 @@ def import_substitutions(
     )
     for s in supervision_substitutions_in_range:
         if s.import_ref_untis and s.import_ref_untis not in existing_subs:
-            logger.info("Supervision substitution {} deleted".format(s.id))
+            logger.info(f"Supervision substitution {s.id} deleted")
             s.delete()
 
     supervision_substitutions_in_range.exclude(supervision__validity=validity_range).delete()
diff --git a/aleksis/apps/untis/util/mysql/importers/terms.py b/aleksis/apps/untis/util/mysql/importers/terms.py
index c2cefb9..ea0baf8 100644
--- a/aleksis/apps/untis/util/mysql/importers/terms.py
+++ b/aleksis/apps/untis/util/mysql/importers/terms.py
@@ -94,9 +94,7 @@ def import_terms(
     school_terms = {}
     for term in tqdm(qs, desc="Import terms (as validity ranges)", **TQDM_DEFAULTS):
         if not term.name:
-            raise RuntimeError(
-                "Term ID {}: Cannot import term without short name.".format(term.term_id)
-            )
+            raise RuntimeError(f"Term ID {term.term_id}: Cannot import term without short name.")
         term_id = term.term_id
         name = term.longname if term.longname else term.name
         date_start = untis_date_to_date(term.datefrom)
diff --git a/aleksis/apps/untis/util/mysql/main.py b/aleksis/apps/untis/util/mysql/main.py
index 3e66968..08fe20a 100644
--- a/aleksis/apps/untis/util/mysql/main.py
+++ b/aleksis/apps/untis/util/mysql/main.py
@@ -39,7 +39,7 @@ def untis_import_mysql(
         with reversion.create_revision(atomic=True):
             reversion.set_comment(f"Untis import for validity range {validity_range}")
 
-            tracker = TimetableDataChangeTracker()
+            tracker = TimetableDataChangeTracker()  # noqa: F841
 
             # Common data for Chronos
             subjects_ref = import_subjects(validity_range)
@@ -55,7 +55,7 @@ def untis_import_mysql(
             breaks_ref = import_breaks(validity_range, time_periods_ref)
 
             # Holidays
-            holidays_ref = import_holidays(validity_range)
+            holidays_ref = import_holidays(validity_range)  # noqa:  F841
 
             # Supervisions
             supervision_areas_ref = import_supervision_areas(
diff --git a/aleksis/apps/untis/util/mysql/util.py b/aleksis/apps/untis/util/mysql/util.py
index 439b54c..bc3deaf 100644
--- a/aleksis/apps/untis/util/mysql/util.py
+++ b/aleksis/apps/untis/util/mysql/util.py
@@ -175,7 +175,7 @@ def connect_untis_fields(obj: Model, attr: str, limit: int) -> Sequence[str]:
     all_data = []
 
     for i in range(1, limit + 1):
-        attr_name = "{}{}".format(attr, i)
+        attr_name = f"{attr}{i}"
         raw_data = getattr(obj, attr_name, "")
         if raw_data:
             data = untis_split_first(raw_data)
-- 
GitLab