From 64fbf85b8933a6dbf2952bf54c616cc405c8dd62 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Thu, 21 Mar 2024 21:48:55 +0100 Subject: [PATCH] Improve handling of group types for school structure --- aleksis/apps/cursus/apps.py | 9 +++++++++ aleksis/apps/cursus/schema.py | 22 +++++++++------------- aleksis/apps/cursus/settings.py | 2 ++ aleksis/apps/cursus/util/group_types.py | 17 +++++++++++++++++ 4 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 aleksis/apps/cursus/settings.py create mode 100644 aleksis/apps/cursus/util/group_types.py diff --git a/aleksis/apps/cursus/apps.py b/aleksis/apps/cursus/apps.py index 2100153..ba7bf20 100644 --- a/aleksis/apps/cursus/apps.py +++ b/aleksis/apps/cursus/apps.py @@ -11,3 +11,12 @@ class DefaultConfig(AppConfig): } licence = "EUPL-1.2+" copyright_info = (([2023], "Jonathan Weth", "dev@jonathanweth.de"),) + + def _maintain_default_data(self): + super()._maintain_default_data() + + # Ensure that default group types for school structure exist + from .util.group_types import get_school_class_group_type, get_school_grade_group_type + + get_school_grade_group_type() + get_school_class_group_type() diff --git a/aleksis/apps/cursus/schema.py b/aleksis/apps/cursus/schema.py index 0e2a3d3..711ddd0 100644 --- a/aleksis/apps/cursus/schema.py +++ b/aleksis/apps/cursus/schema.py @@ -1,4 +1,3 @@ -from django.apps import apps from django.core.exceptions import PermissionDenied from django.db.models import Q @@ -11,7 +10,12 @@ from graphene_django_cud.mutations import ( ) from guardian.shortcuts import get_objects_for_user -from aleksis.core.models import Group, GroupType, Person +from aleksis.apps.cursus.settings import SCHOOL_CLASS_GROUP_TYPE_NAME, SCHOOL_GRADE_GROUP_TYPE_NAME +from aleksis.apps.cursus.util.group_types import ( + get_school_class_group_type, + get_school_grade_group_type, +) +from aleksis.core.models import Group, Person from aleksis.core.schema.base import ( DjangoFilterMixin, FilterOrderList, @@ -25,8 +29,6 @@ from aleksis.core.util.core_helpers import has_person from .models import Course, Subject -SCHOOL_GRADE_GROUP_TYPE_NAME = "School grade" - class SubjectType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): class Meta: @@ -185,10 +187,7 @@ class CreateSchoolClassMutation(DjangoBatchCreateMutation): @classmethod def before_mutate(cls, root, info, input): # noqa - app_label = apps.get_containing_app_config(cls.__module__).label - group_type, __ = GroupType.objects.managed_by_app(app_label).get_or_create( - name="School class", managed_by_app_label=app_label - ) + group_type = get_school_class_group_type() for school_class in input: school_class["group_type"] = group_type.pk return input @@ -202,10 +201,7 @@ class CreateSchoolGradeMutation(DjangoBatchCreateMutation): @classmethod def before_mutate(cls, root, info, input): # noqa - app_label = apps.get_containing_app_config(cls.__module__).label - group_type, __ = GroupType.objects.managed_by_app(app_label).get_or_create( - name=SCHOOL_GRADE_GROUP_TYPE_NAME, managed_by_app_label=app_label - ) + group_type = get_school_grade_group_type() for school_grade in input: school_grade["group_type"] = group_type.pk return input @@ -235,7 +231,7 @@ class Query(graphene.ObjectType): return get_objects_for_user( info.context.user, "core.view_group", - Group.objects.filter(group_type__name="School class"), + Group.objects.filter(group_type__name=SCHOOL_CLASS_GROUP_TYPE_NAME), ) @staticmethod diff --git a/aleksis/apps/cursus/settings.py b/aleksis/apps/cursus/settings.py new file mode 100644 index 0000000..1065c8c --- /dev/null +++ b/aleksis/apps/cursus/settings.py @@ -0,0 +1,2 @@ +SCHOOL_GRADE_GROUP_TYPE_NAME = "School grade" +SCHOOL_CLASS_GROUP_TYPE_NAME = "School class" diff --git a/aleksis/apps/cursus/util/group_types.py b/aleksis/apps/cursus/util/group_types.py new file mode 100644 index 0000000..71f1ebb --- /dev/null +++ b/aleksis/apps/cursus/util/group_types.py @@ -0,0 +1,17 @@ +from aleksis.core.models import GroupType + +from ..settings import SCHOOL_CLASS_GROUP_TYPE_NAME, SCHOOL_GRADE_GROUP_TYPE_NAME + + +def get_school_grade_group_type(): + group_type, __ = GroupType.objects.managed_by_app("cursus").get_or_create( + name=SCHOOL_GRADE_GROUP_TYPE_NAME, managed_by_app_label="cursus" + ) + return group_type + + +def get_school_class_group_type(): + group_type, __ = GroupType.objects.managed_by_app("cursus").get_or_create( + name=SCHOOL_CLASS_GROUP_TYPE_NAME, managed_by_app_label="cursus" + ) + return group_type -- GitLab