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