From 7efd0d09b776f64201192a5b476ff08855849a46 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Sun, 5 Apr 2020 12:44:20 +0200 Subject: [PATCH] Use sync_m2m for group owners --- .../untis/util/mysql/importers/lessons.py | 23 +------------ aleksis/apps/untis/util/mysql/util.py | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/aleksis/apps/untis/util/mysql/importers/lessons.py b/aleksis/apps/untis/util/mysql/importers/lessons.py index 8e2ae57..d5dfc81 100644 --- a/aleksis/apps/untis/util/mysql/importers/lessons.py +++ b/aleksis/apps/untis/util/mysql/importers/lessons.py @@ -1,8 +1,6 @@ import logging -from typing import Union, List from constance import config -from django.db.models import Model, QuerySet from django.utils.translation import gettext as _ from aleksis.apps.chronos import models as chronos_models @@ -10,30 +8,11 @@ from aleksis.core import models as core_models from aleksis.core.util import messages from .... import models as mysql_models -from ..util import run_default_filter, untis_split_third, untis_date_to_date, get_term +from ..util import run_default_filter, untis_split_third, untis_date_to_date, get_term, sync_m2m, compare_m2m logger = logging.getLogger(__name__) -def sync_m2m(new_items, m2m_qs): - for item in new_items: - if item not in m2m_qs.all(): - m2m_qs.add(item) - logger.info(" Many-to-many sync: item added") - for item in m2m_qs.all(): - if item not in new_items: - m2m_qs.remove(item) - logger.info(" Many-to-many sync: item removed") - - -def compare_m2m( - a: Union[List[Model], QuerySet], b: Union[List[Model], QuerySet] -) -> bool: - ids_a = sorted([i.id for i in a]) - ids_b = sorted([i.id for i in b]) - return ids_a == ids_b - - def import_lessons( time_periods_ref, rooms_ref, subjects_ref, teachers_ref, classes_ref ): diff --git a/aleksis/apps/untis/util/mysql/util.py b/aleksis/apps/untis/util/mysql/util.py index 42aaff8..c7edfc4 100644 --- a/aleksis/apps/untis/util/mysql/util.py +++ b/aleksis/apps/untis/util/mysql/util.py @@ -1,12 +1,15 @@ +import logging from datetime import date, datetime -from typing import Optional +from typing import Optional, Union, List -from django.db.models import QuerySet +from django.db.models import QuerySet, Model from aleksis.apps.untis import models as mysql_models DB_NAME = "untis" +logger = logging.getLogger(__name__) + def run_using(obj: QuerySet) -> QuerySet: return obj.using(DB_NAME) @@ -103,3 +106,29 @@ def untis_colour_to_hex(colour: int) -> str: # Add html # return "#" + hex_rgb + + +def sync_m2m(new_items: Union[List[Model], QuerySet], m2m_qs: QuerySet): + """ Sync m2m field """ + + # Add items + for item in new_items: + if item not in m2m_qs.all(): + m2m_qs.add(item) + logger.info(" Many-to-many sync: item added") + + # Delete items + for item in m2m_qs.all(): + if item not in new_items: + m2m_qs.remove(item) + logger.info(" Many-to-many sync: item removed") + + +def compare_m2m( + a: Union[List[Model], QuerySet], b: Union[List[Model], QuerySet] +) -> bool: + """ Compare if content of two m2m fields is equal """ + + ids_a = sorted([i.id for i in a]) + ids_b = sorted([i.id for i in b]) + return ids_a == ids_b -- GitLab