Skip to content
Snippets Groups Projects
Verified Commit 4f8a0d4f authored by Nik | Klampfradler's avatar Nik | Klampfradler
Browse files

[Reformat] Update all style with black

parent 2f32277c
No related branches found
No related tags found
1 merge request!13Resolve "Support import from MySQL"
...@@ -7,14 +7,10 @@ from aleksis.core import models as core_models ...@@ -7,14 +7,10 @@ from aleksis.core import models as core_models
# Core models # Core models
core_models.Person.field( core_models.Person.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
core_models.Group.field( core_models.Group.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS: if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS:
core_models.Group.field( core_models.Group.field(
...@@ -23,31 +19,24 @@ if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS: ...@@ -23,31 +19,24 @@ if config.UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS:
help_text=_( help_text=_(
"The UNTIS import will use this for matching course groups (along with parent groups)." "The UNTIS import will use this for matching course groups (along with parent groups)."
), ),
blank=True, null=True, blank=True,
max_length=255 null=True,
max_length=255,
) )
) )
# Chronos models # Chronos models
chronos_models.Subject.field( chronos_models.Subject.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.Room.field( chronos_models.Room.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.SupervisionArea.field( chronos_models.SupervisionArea.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.Lesson.field( chronos_models.Lesson.field(
lesson_id_untis=IntegerField( lesson_id_untis=IntegerField(verbose_name=_("Lesson id in UNTIS"), null=True, blank=True)
verbose_name=_("Lesson id in UNTIS"), null=True, blank=True
)
) )
chronos_models.Lesson.field( chronos_models.Lesson.field(
element_id_untis=IntegerField( element_id_untis=IntegerField(
...@@ -63,32 +52,20 @@ chronos_models.LessonPeriod.field( ...@@ -63,32 +52,20 @@ chronos_models.LessonPeriod.field(
) )
) )
chronos_models.LessonSubstitution.field( chronos_models.LessonSubstitution.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.SupervisionSubstitution.field( chronos_models.SupervisionSubstitution.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.AbsenceReason.field( chronos_models.AbsenceReason.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.Absence.field( chronos_models.Absence.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.Event.field( chronos_models.Event.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
chronos_models.Holiday.field( chronos_models.Holiday.field(
import_ref_untis=IntegerField( import_ref_untis=IntegerField(verbose_name=_("UNTIS import reference"), null=True, blank=True)
verbose_name=_("UNTIS import reference"), null=True, blank=True
)
) )
This diff is collapsed.
...@@ -13,11 +13,7 @@ DATABASES = { ...@@ -13,11 +13,7 @@ DATABASES = {
} }
CONSTANCE_CONFIG = { CONSTANCE_CONFIG = {
"UNTIS_IMPORT_MYSQL_UPDATE_SUBJECTS": ( "UNTIS_IMPORT_MYSQL_UPDATE_SUBJECTS": (True, _("Update values of existing subjects?"), bool,),
True,
_("Update values of existing subjects?"),
bool,
),
"UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_SHORT_NAME": ( "UNTIS_IMPORT_MYSQL_UPDATE_PERSONS_SHORT_NAME": (
False, False,
_("Update short name of existing persons?"), _("Update short name of existing persons?"),
...@@ -33,29 +29,21 @@ CONSTANCE_CONFIG = { ...@@ -33,29 +29,21 @@ CONSTANCE_CONFIG = {
_("Update short name of existing groups?"), _("Update short name of existing groups?"),
bool, bool,
), ),
"UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME": ( "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_NAME": (False, _("Update name of existing groups?"), bool,),
False,
_("Update name of existing groups?"),
bool,
),
"UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS": ( "UNTIS_IMPORT_MYSQL_UPDATE_GROUPS_OVERWRITE_OWNERS": (
False, False,
_("Overwrite existing owners?"), _("Overwrite existing owners?"),
bool, bool,
), ),
"UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME": ( "UNTIS_IMPORT_MYSQL_UPDATE_ROOMS_NAME": (True, _("Update name of existing rooms?"), bool,),
True,
_("Update name of existing rooms?"),
bool,
),
"UNTIS_IMPORT_MYSQL_UPDATE_SUPERVISION_AREAS": ( "UNTIS_IMPORT_MYSQL_UPDATE_SUPERVISION_AREAS": (
True, True,
_("Update values of existing supervision areas?") _("Update values of existing supervision areas?"),
), ),
"UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS": ( "UNTIS_IMPORT_MYSQL_USE_COURSE_GROUPS": (
True, True,
_("Build or search course groups for every course instead of setting classes as groups.") _("Build or search course groups for every course instead of setting classes as groups."),
) ),
} }
CONSTANCE_CONFIG_FIELDSETS = { CONSTANCE_CONFIG_FIELDSETS = {
......
...@@ -9,20 +9,24 @@ from .... import models as mysql_models ...@@ -9,20 +9,24 @@ from .... import models as mysql_models
from ..util import ( from ..util import (
run_default_filter, run_default_filter,
get_term, get_term,
untis_date_to_date, move_weekday_to_range, get_first_period, get_last_period, TQDM_DEFAULTS, untis_date_to_date,
move_weekday_to_range,
get_first_period,
get_last_period,
TQDM_DEFAULTS,
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
unknown_reason, _ = chronos_models.AbsenceReason.objects.get_or_create(short_name="?") unknown_reason, _ = chronos_models.AbsenceReason.objects.get_or_create(short_name="?")
class AbsenceType(Enum): class AbsenceType(Enum):
GROUP = 100 GROUP = 100
TEACHER = 101 TEACHER = 101
ROOM = 102 ROOM = 102
def import_absences(
absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref def import_absences(absence_reasons_ref, time_periods_ref, teachers_ref, classes_ref, rooms_ref):
):
ref = {} ref = {}
# Get term # Get term
......
...@@ -10,8 +10,13 @@ from aleksis.apps.chronos import models as chronos_models ...@@ -10,8 +10,13 @@ from aleksis.apps.chronos import models as chronos_models
from aleksis.core import models as core_models from aleksis.core import models as core_models
from .... import models as mysql_models from .... import models as mysql_models
from ..util import run_default_filter, untis_colour_to_hex, untis_split_first, connect_untis_fields, \ from ..util import (
TQDM_DEFAULTS run_default_filter,
untis_colour_to_hex,
untis_split_first,
connect_untis_fields,
TQDM_DEFAULTS,
)
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -155,9 +160,7 @@ def import_teachers() -> Dict[int, core_models.Person]: ...@@ -155,9 +160,7 @@ def import_teachers() -> Dict[int, core_models.Person]:
return teachers_ref return teachers_ref
def import_classes( def import_classes(teachers_ref: Dict[int, core_models.Person]) -> Dict[int, core_models.Group]:
teachers_ref: Dict[int, core_models.Person]
) -> Dict[int, core_models.Group]:
""" Import classes """ """ Import classes """
classes_ref = {} classes_ref = {}
...@@ -169,9 +172,7 @@ def import_classes( ...@@ -169,9 +172,7 @@ def import_classes(
# Check if needed data are provided # Check if needed data are provided
if not class_.name: if not class_.name:
raise RuntimeException( raise RuntimeException(
"Class ID {}: Cannot import class without short name.".format( "Class ID {}: Cannot import class without short name.".format(class_.teacher_id)
class_.teacher_id
)
) )
# Build values # Build values
...@@ -184,8 +185,7 @@ def import_classes( ...@@ -184,8 +185,7 @@ def import_classes(
logger.info("Import class {} (as group) …".format(short_name)) logger.info("Import class {} (as group) …".format(short_name))
new_group, created = core_models.Group.objects.get_or_create( new_group, created = core_models.Group.objects.get_or_create(
short_name__iexact=short_name, short_name__iexact=short_name, defaults={"name": name, "import_ref_untis": import_ref},
defaults={"name": name, "import_ref_untis": import_ref},
) )
if created: if created:
...@@ -237,9 +237,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]: ...@@ -237,9 +237,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]:
for room in tqdm(rooms, desc="Import rooms", **TQDM_DEFAULTS): for room in tqdm(rooms, desc="Import rooms", **TQDM_DEFAULTS):
if not room.name: if not room.name:
raise RuntimeException( raise RuntimeException(
"Room ID {}: Cannot import room without short name.".format( "Room ID {}: Cannot import room without short name.".format(room.room_id)
room.room_id
)
) )
# Build values # Build values
...@@ -250,8 +248,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]: ...@@ -250,8 +248,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]:
logger.info("Import room {} …".format(short_name)) logger.info("Import room {} …".format(short_name))
new_room, created = chronos_models.Room.objects.get_or_create( new_room, created = chronos_models.Room.objects.get_or_create(
short_name=short_name, short_name=short_name, defaults={"name": name, "import_ref_untis": import_ref},
defaults={"name": name, "import_ref_untis": import_ref},
) )
if created: if created:
...@@ -277,9 +274,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]: ...@@ -277,9 +274,7 @@ def import_rooms() -> Dict[int, chronos_models.Room]:
return ref return ref
def import_supervision_areas( def import_supervision_areas(breaks_ref, teachers_ref) -> Dict[int, chronos_models.SupervisionArea]:
breaks_ref, teachers_ref
) -> Dict[int, chronos_models.SupervisionArea]:
""" Import supervision areas """ """ Import supervision areas """
ref = {} ref = {}
...@@ -403,7 +398,11 @@ def import_supervision_areas( ...@@ -403,7 +398,11 @@ def import_supervision_areas(
def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
""" Import time periods an breaks """ """ Import time periods an breaks """
times = run_default_filter(mysql_models.Commondata.objects, filter_term=False).filter(id=30).order_by("number") times = (
run_default_filter(mysql_models.Commondata.objects, filter_term=False)
.filter(id=30)
.order_by("number")
)
times_ref = {} times_ref = {}
for time_ in tqdm(times, desc="Import times", **TQDM_DEFAULTS): for time_ in tqdm(times, desc="Import times", **TQDM_DEFAULTS):
...@@ -428,9 +427,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: ...@@ -428,9 +427,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
start_time = times_ref[period][0] start_time = times_ref[period][0]
end_time = times_ref[period][1] end_time = times_ref[period][1]
logger.info( logger.info("Import time period on weekday {} in the {}. period".format(weekday, period))
"Import time period on weekday {} in the {}. period".format(weekday, period)
)
new_time_period, created = chronos_models.TimePeriod.objects.get_or_create( new_time_period, created = chronos_models.TimePeriod.objects.get_or_create(
weekday=weekday, weekday=weekday,
...@@ -441,10 +438,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]: ...@@ -441,10 +438,7 @@ def import_time_periods() -> Dict[int, Dict[int, chronos_models.TimePeriod]]:
if created: if created:
logger.info(" New time period created") logger.info(" New time period created")
if ( if new_time_period.time_start != start_time or new_time_period.time_end != end_time:
new_time_period.time_start != start_time
or new_time_period.time_end != end_time
):
new_time_period.time_start = start_time new_time_period.time_start = start_time
new_time_period.time_end = end_time new_time_period.time_end = end_time
new_time_period.save() new_time_period.save()
...@@ -463,12 +457,16 @@ def import_breaks( ...@@ -463,12 +457,16 @@ def import_breaks(
) -> Dict[int, Dict[int, chronos_models.Break]]: ) -> Dict[int, Dict[int, chronos_models.Break]]:
# Build breaks for all weekdays # Build breaks for all weekdays
breaks_ref = {} breaks_ref = {}
for weekday, time_periods in tqdm(time_periods_ref.items(), desc="Import breaks (weekday)", **TQDM_DEFAULTS): for weekday, time_periods in tqdm(
time_periods_ref.items(), desc="Import breaks (weekday)", **TQDM_DEFAULTS
):
breaks_ref[weekday] = {} breaks_ref[weekday] = {}
# Add None two times in order to create breaks before first lesson and after last lesson # Add None two times in order to create breaks before first lesson and after last lesson
time_periods_for_breaks = [None] + list(time_periods.values()) + [None] time_periods_for_breaks = [None] + list(time_periods.values()) + [None]
for i, time_period in tqdm(enumerate(time_periods_for_breaks), desc="Import breaks (period)", **TQDM_DEFAULTS): for i, time_period in tqdm(
enumerate(time_periods_for_breaks), desc="Import breaks (period)", **TQDM_DEFAULTS
):
# If last item (None) is reached, no further break must be created # If last item (None) is reached, no further break must be created
if i + 1 == len(time_periods_for_breaks): if i + 1 == len(time_periods_for_breaks):
break break
...@@ -524,8 +522,7 @@ def import_absence_reasons() -> Dict[int, chronos_models.AbsenceReason]: ...@@ -524,8 +522,7 @@ def import_absence_reasons() -> Dict[int, chronos_models.AbsenceReason]:
logger.info("Import absence reason {} …".format(short_name)) logger.info("Import absence reason {} …".format(short_name))
new_reason, created = chronos_models.AbsenceReason.objects.get_or_create( new_reason, created = chronos_models.AbsenceReason.objects.get_or_create(
import_ref_untis=import_ref, import_ref_untis=import_ref, defaults={"short_name": short_name, "name": name}
defaults={"short_name": short_name, "name": name}
) )
if created: if created:
......
...@@ -12,7 +12,8 @@ from ..util import ( ...@@ -12,7 +12,8 @@ from ..util import (
move_weekday_to_range, move_weekday_to_range,
get_first_period, get_first_period,
get_last_period, get_last_period,
connect_untis_fields, TQDM_DEFAULTS, connect_untis_fields,
TQDM_DEFAULTS,
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
......
...@@ -24,9 +24,7 @@ def import_holidays() -> Dict[int, chronos_models.Holiday]: ...@@ -24,9 +24,7 @@ def import_holidays() -> Dict[int, chronos_models.Holiday]:
# Check if needed data are provided # Check if needed data are provided
if not holiday.name: if not holiday.name:
raise RuntimeException( raise RuntimeException(
"Holiday ID {}: Cannot import holiday without short name.".format( "Holiday ID {}: Cannot import holiday without short name.".format(import_ref)
import_ref
)
) )
title = holiday.name[:50] title = holiday.name[:50]
...@@ -44,8 +42,8 @@ def import_holidays() -> Dict[int, chronos_models.Holiday]: ...@@ -44,8 +42,8 @@ def import_holidays() -> Dict[int, chronos_models.Holiday]:
"title": title, "title": title,
"comments": comments, "comments": comments,
"date_start": date_start, "date_start": date_start,
"date_end": date_end "date_end": date_end,
} },
) )
if created: if created:
......
...@@ -15,15 +15,14 @@ from ..util import ( ...@@ -15,15 +15,14 @@ from ..util import (
untis_date_to_date, untis_date_to_date,
get_term, get_term,
compare_m2m, compare_m2m,
connect_untis_fields, TQDM_DEFAULTS, connect_untis_fields,
TQDM_DEFAULTS,
) )
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def import_lessons( def import_lessons(time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref):
time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref
):
""" Import lessons """ """ Import lessons """
# Get current term # Get current term
...@@ -32,9 +31,9 @@ def import_lessons( ...@@ -32,9 +31,9 @@ def import_lessons(
date_end = untis_date_to_date(term.dateto) date_end = untis_date_to_date(term.dateto)
# Get all existing lessons for this term # Get all existing lessons for this term
lessons_in_term = chronos_models.Lesson.objects.filter( lessons_in_term = chronos_models.Lesson.objects.filter(term_untis=term.term_id).values_list(
term_untis=term.term_id "id", flat=True
).values_list("id", flat=True) )
# Set the end date of all lessons from other terms ending in this term to the day before this term starts # Set the end date of all lessons from other terms ending in this term to the day before this term starts
chronos_models.Lesson.objects.filter(date_end__gte=date_start).exclude( chronos_models.Lesson.objects.filter(date_end__gte=date_start).exclude(
...@@ -145,8 +144,7 @@ def import_lessons( ...@@ -145,8 +144,7 @@ def import_lessons(
"".join([c.short_name for c in course_classes]), subject.abbrev "".join([c.short_name for c in course_classes]), subject.abbrev
) )
group_name = "{}: {}".format( group_name = "{}: {}".format(
", ".join([c.short_name for c in course_classes]), ", ".join([c.short_name for c in course_classes]), subject.abbrev,
subject.abbrev,
) )
# Get or create course group # Get or create course group
...@@ -230,9 +228,7 @@ def import_lessons( ...@@ -230,9 +228,7 @@ def import_lessons(
lesson.teachers.set(teachers) lesson.teachers.set(teachers)
# All times for this course # All times for this course
old_lesson_periods_qs = chronos_models.LessonPeriod.objects.filter( old_lesson_periods_qs = chronos_models.LessonPeriod.objects.filter(lesson=lesson)
lesson=lesson
)
# If length has changed, delete all lesson periods # If length has changed, delete all lesson periods
if old_lesson_periods_qs.count() != len(time_periods): if old_lesson_periods_qs.count() != len(time_periods):
...@@ -256,10 +252,7 @@ def import_lessons( ...@@ -256,10 +252,7 @@ def import_lessons(
# Update old lesson period # Update old lesson period
old_lesson_period = old_lesson_period_qs[0] old_lesson_period = old_lesson_period_qs[0]
if ( if old_lesson_period.period != time_period or old_lesson_period.room != room:
old_lesson_period.period != time_period
or old_lesson_period.room != room
):
old_lesson_period.period = time_period old_lesson_period.period = time_period
old_lesson_period.room = room old_lesson_period.room = room
old_lesson_period.save() old_lesson_period.save()
...@@ -268,7 +261,6 @@ def import_lessons( ...@@ -268,7 +261,6 @@ def import_lessons(
# Create new lesson period # Create new lesson period
lesson.periods.add( lesson.periods.add(
time_period, time_period, through_defaults={"room": room, "element_id_untis": j},
through_defaults={"room": room, "element_id_untis": j},
) )
logger.info(" New time period added") logger.info(" New time period added")
...@@ -10,19 +10,20 @@ from ..util import ( ...@@ -10,19 +10,20 @@ from ..util import (
run_default_filter, run_default_filter,
untis_split_first, untis_split_first,
untis_date_to_date, untis_date_to_date,
get_term, TQDM_DEFAULTS, get_term,
TQDM_DEFAULTS,
) )
from .... import models as mysql_models from .... import models as mysql_models
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
class SubstitutionFlag(Enum): class SubstitutionFlag(Enum):
CANCELLED = "E" CANCELLED = "E"
CANCELLED_FOR_TEACHERS = "F" CANCELLED_FOR_TEACHERS = "F"
def import_substitutions(
teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref def import_substitutions(teachers_ref, subjects_ref, rooms_ref, classes_ref, supervision_areas_ref):
):
""" Import substitutions """ """ Import substitutions """
term = get_term() term = get_term()
...@@ -128,10 +129,7 @@ def import_substitutions( ...@@ -128,10 +129,7 @@ def import_substitutions(
classes.append(classes_ref[id]) classes.append(classes_ref[id])
if lesson_period: if lesson_period:
( (substitution, created,) = chronos_models.LessonSubstitution.objects.get_or_create(
substitution,
created,
) = chronos_models.LessonSubstitution.objects.get_or_create(
lesson_period=lesson_period, week=week.week lesson_period=lesson_period, week=week.week
) )
...@@ -165,7 +163,7 @@ def import_substitutions( ...@@ -165,7 +163,7 @@ def import_substitutions(
# TODO: Special assignment, no existing lesson period for that substitution # TODO: Special assignment, no existing lesson period for that substitution
else: else:
if teacher_new: if teacher_new:
logger.info (" Supervision substitution detected") logger.info(" Supervision substitution detected")
# Supervision # Supervision
area_ref = supervision_areas_ref[sub.corridor_id] area_ref = supervision_areas_ref[sub.corridor_id]
...@@ -181,9 +179,7 @@ def import_substitutions( ...@@ -181,9 +179,7 @@ def import_substitutions(
substitution, substitution,
created, created,
) = chronos_models.SupervisionSubstitution.objects.get_or_create( ) = chronos_models.SupervisionSubstitution.objects.get_or_create(
supervision=supervision, supervision=supervision, date=date, defaults={"teacher": teacher_new},
date=date,
defaults={"teacher": teacher_new},
) )
if created: if created:
...@@ -199,6 +195,10 @@ def import_substitutions( ...@@ -199,6 +195,10 @@ def import_substitutions(
logger.info(" Supervision substitution updated") logger.info(" Supervision substitution updated")
# Delete all no longer existing substitutions # Delete all no longer existing substitutions
chronos_models.LessonSubstitution.objects.within_dates(date_start, date_end).exclude(import_ref_untis__in=existing_subs).delete() chronos_models.LessonSubstitution.objects.within_dates(date_start, date_end).exclude(
chronos_models.SupervisionSubstitution.objects.filter(date__gte=date_start, date__lte=date_end).exclude(existing_subs__in=existing_subs).delete() import_ref_untis__in=existing_subs
).delete()
chronos_models.SupervisionSubstitution.objects.filter(
date__gte=date_start, date__lte=date_end
).exclude(existing_subs__in=existing_subs).delete()
logger.info("Left-over substitutions deleted") logger.info("Left-over substitutions deleted")
...@@ -11,9 +11,9 @@ DB_NAME = "untis" ...@@ -11,9 +11,9 @@ DB_NAME = "untis"
UNTIS_DATE_FORMAT = "%Y%m%d" UNTIS_DATE_FORMAT = "%Y%m%d"
TQDM_DEFAULTS = { TQDM_DEFAULTS = {
"disable": None, "disable": None,
"unit": "obj", "unit": "obj",
"dynamic_ncols": True, "dynamic_ncols": True,
} }
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
...@@ -38,7 +38,10 @@ def get_term(for_date: Optional[date] = None) -> mysql_models.Terms: ...@@ -38,7 +38,10 @@ def get_term(for_date: Optional[date] = None) -> mysql_models.Terms:
def run_default_filter( def run_default_filter(
qs: QuerySet, for_date: Optional[date] = None, filter_term: bool = True, filter_deleted: bool = True qs: QuerySet,
for_date: Optional[date] = None,
filter_term: bool = True,
filter_deleted: bool = True,
) -> QuerySet: ) -> QuerySet:
""" Add a default filter in order to select the correct term """ """ Add a default filter in order to select the correct term """
...@@ -51,9 +54,7 @@ def run_default_filter( ...@@ -51,9 +54,7 @@ def run_default_filter(
) )
qs = run_using(qs).filter( qs = run_using(qs).filter(
school_id=school_id, school_id=school_id, schoolyear_id=schoolyear_id, version_id=version_id,
schoolyear_id=schoolyear_id,
version_id=version_id,
) )
if filter_term: if filter_term:
...@@ -76,7 +77,7 @@ def clean_array(seq: Sequence, conv: Callable[[Any], Any] = lambda el: el) -> Se ...@@ -76,7 +77,7 @@ def clean_array(seq: Sequence, conv: Callable[[Any], Any] = lambda el: el) -> Se
[8, 12] [8, 12]
""" """
filtered = filter(lambda el: bool(el), map(lambda el: conv(el) if el, seq)) filtered = filter(lambda el: bool(el), map(lambda el: conv(el) if el else None, seq))
return type(a)(filtered) return type(a)(filtered)
...@@ -115,9 +116,7 @@ def untis_colour_to_hex(colour: int) -> str: ...@@ -115,9 +116,7 @@ def untis_colour_to_hex(colour: int) -> str:
return "#" + hex_rgb return "#" + hex_rgb
def compare_m2m( def compare_m2m(a: Union[List[Model], QuerySet], b: Union[List[Model], QuerySet]) -> bool:
a: Union[List[Model], QuerySet], b: Union[List[Model], QuerySet]
) -> bool:
""" Compare if content of two m2m fields is equal """ """ Compare if content of two m2m fields is equal """
return set(a) == set(b) return set(a) == set(b)
......
...@@ -164,4 +164,3 @@ def untis_import_xml(request: HttpRequest, untis_xml: Union[BinaryIO, str]) -> N ...@@ -164,4 +164,3 @@ def untis_import_xml(request: HttpRequest, untis_xml: Union[BinaryIO, str]) -> N
lesson.periods.add(period[0], through_defaults={"room": period[1]}) lesson.periods.add(period[0], through_defaults={"room": period[1]})
lesson.save() lesson.save()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment