From f91e14fc46c8dcf8c01aac0adea6823850f7dc43 Mon Sep 17 00:00:00 2001 From: Jonathan Weth <git@jonathanweth.de> Date: Wed, 3 Apr 2024 19:53:07 +0200 Subject: [PATCH] Create base classes for batch mutations --- aleksis/core/schema/base.py | 32 +++++++++++++++++++++++++-- aleksis/core/schema/group_type.py | 16 +++++--------- aleksis/core/schema/holiday.py | 16 +++++--------- aleksis/core/schema/person.py | 8 ++----- aleksis/core/schema/personal_event.py | 15 +++++-------- aleksis/core/schema/room.py | 16 +++++--------- aleksis/core/schema/school_term.py | 16 +++++--------- 7 files changed, 62 insertions(+), 57 deletions(-) diff --git a/aleksis/core/schema/base.py b/aleksis/core/schema/base.py index 76e7b7180..346ae1c2e 100644 --- a/aleksis/core/schema/base.py +++ b/aleksis/core/schema/base.py @@ -8,6 +8,9 @@ import graphene import reversion from django_filters.filterset import FilterSet, filterset_factory from graphene_django import DjangoListField, DjangoObjectType +from graphene_django_cud.mutations.batch_create import DjangoBatchCreateMutation +from graphene_django_cud.mutations.batch_delete import DjangoBatchDeleteMutation +from graphene_django_cud.mutations.batch_patch import DjangoBatchPatchMutation from reversion import set_comment, set_user from ..util.core_helpers import queryset_rules_filter @@ -96,6 +99,8 @@ class OptimisticResponseTypeMixin: class PermissionBatchPatchMixin: + """Mixin for permission checking during batch patch mutations.""" + class Meta: login_required = True @@ -108,6 +113,8 @@ class PermissionBatchPatchMixin: class PermissionBatchDeleteMixin: + """Mixin for permission checking during batch delete mutations.""" + class Meta: login_required = True @@ -120,6 +127,8 @@ class PermissionBatchDeleteMixin: class PermissionPatchMixin: + """Mixin for permission checking during patch mutations.""" + class Meta: login_required = True @@ -214,15 +223,34 @@ class FilterOrderList(DjangoListField): qs = qs.order_by(*order_by) - print(f"{filters=}") - return qs class MutateWithRevisionMixin: + """Mixin for creating revision for mutation.""" + @classmethod def mutate(cls, root, info, *args, **kwargs): with reversion.create_revision(): set_user(info.context.user) set_comment(cls.__name__) super().mutate(root, info, *args, **kwargs) + + +class BaseBatchCreateMutation(MutateWithRevisionMixin, DjangoBatchCreateMutation): + class Meta: + abstract = True + + +class BaseBatchPatchMutation( + MutateWithRevisionMixin, PermissionBatchPatchMixin, DjangoBatchPatchMutation +): + class Meta: + abstract = True + + +class BaseBatchDeleteMutation( + MutateWithRevisionMixin, PermissionBatchDeleteMixin, DjangoBatchDeleteMutation +): + class Meta: + abstract = True diff --git a/aleksis/core/schema/group_type.py b/aleksis/core/schema/group_type.py index fca51e018..4d5e00cff 100644 --- a/aleksis/core/schema/group_type.py +++ b/aleksis/core/schema/group_type.py @@ -1,16 +1,12 @@ from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import ( - DjangoBatchCreateMutation, - DjangoBatchDeleteMutation, - DjangoBatchPatchMutation, -) from guardian.shortcuts import get_objects_for_user from ..models import GroupType from .base import ( + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, DjangoFilterMixin, - PermissionBatchDeleteMixin, - PermissionBatchPatchMixin, PermissionsTypeMixin, ) @@ -29,7 +25,7 @@ class GroupTypeType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): return get_objects_for_user(info.context.user, "core.view_grouptype", GroupType) -class GroupTypeBatchCreateMutation(DjangoBatchCreateMutation): +class GroupTypeBatchCreateMutation(BaseBatchCreateMutation): class Meta: model = GroupType permissions = ("core.create_grouptype_rule",) @@ -39,13 +35,13 @@ class GroupTypeBatchCreateMutation(DjangoBatchCreateMutation): ) -class GroupTypeBatchDeleteMutation(PermissionBatchDeleteMixin, DjangoBatchDeleteMutation): +class GroupTypeBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = GroupType permissions = ("core.delete_grouptype_rule",) -class GroupTypeBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): +class GroupTypeBatchPatchMutation(BaseBatchPatchMutation): class Meta: model = GroupType permissions = ("core.change_grouptype_rule",) diff --git a/aleksis/core/schema/holiday.py b/aleksis/core/schema/holiday.py index b596f6fea..4de4a8c11 100644 --- a/aleksis/core/schema/holiday.py +++ b/aleksis/core/schema/holiday.py @@ -1,16 +1,12 @@ from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import ( - DjangoBatchCreateMutation, - DjangoBatchDeleteMutation, - DjangoBatchPatchMutation, -) from guardian.shortcuts import get_objects_for_user from ..models import Holiday from .base import ( + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, DjangoFilterMixin, - PermissionBatchDeleteMixin, - PermissionBatchPatchMixin, PermissionsTypeMixin, ) @@ -31,20 +27,20 @@ class HolidayType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): return get_objects_for_user(info.context.user, "core.view_holiday", queryset) -class HolidayBatchCreateMutation(DjangoBatchCreateMutation): +class HolidayBatchCreateMutation(BaseBatchCreateMutation): class Meta: model = Holiday permissions = ("core.create_holiday_rule",) only_fields = ("holiday_name", "date_start", "date_end") -class HolidayBatchDeleteMutation(PermissionBatchDeleteMixin, DjangoBatchDeleteMutation): +class HolidayBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = Holiday permissions = ("core.delete_holiday_rule",) -class HolidayBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): +class HolidayBatchPatchMutation(BaseBatchPatchMutation): class Meta: model = Holiday permissions = ("core.edit_holiday_rule",) diff --git a/aleksis/core/schema/person.py b/aleksis/core/schema/person.py index 2772fa94c..3e2af57c2 100644 --- a/aleksis/core/schema/person.py +++ b/aleksis/core/schema/person.py @@ -6,7 +6,6 @@ from django.utils import timezone import graphene from graphene_django import DjangoObjectType from graphene_django.forms.mutation import DjangoModelFormMutation -from graphene_django_cud.mutations import DjangoBatchDeleteMutation from guardian.shortcuts import get_objects_for_user from ..filters import PersonFilter @@ -14,10 +13,9 @@ from ..forms import PersonForm from ..models import DummyPerson, Person from ..util.core_helpers import get_site_preferences, has_person from .base import ( + BaseBatchDeleteMutation, DjangoFilterMixin, FieldFileType, - MutateWithRevisionMixin, - PermissionBatchDeleteMixin, PermissionsTypeMixin, ) from .notification import NotificationType @@ -263,9 +261,7 @@ class PersonMutation(DjangoModelFormMutation): return super().perform_mutate(form, info) -class PersonBatchDeleteMutation( - MutateWithRevisionMixin, PermissionBatchDeleteMixin, DjangoBatchDeleteMutation -): +class PersonBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = Person permissions = ("core.delete_person_rule",) diff --git a/aleksis/core/schema/personal_event.py b/aleksis/core/schema/personal_event.py index 99b132479..a231bd47f 100644 --- a/aleksis/core/schema/personal_event.py +++ b/aleksis/core/schema/personal_event.py @@ -4,15 +4,12 @@ from django.utils import timezone import graphene from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import ( - DjangoBatchCreateMutation, - DjangoBatchDeleteMutation, - DjangoBatchPatchMutation, -) from ..models import PersonalEvent from .base import ( - PermissionBatchDeleteMixin, + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, PermissionBatchPatchMixin, ) @@ -37,7 +34,7 @@ class PersonalEventType(DjangoObjectType): recurrences = graphene.String() -class PersonalEventBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCreateMutation): +class PersonalEventBatchCreateMutation(PermissionBatchPatchMixin, BaseBatchCreateMutation): class Meta: model = PersonalEvent permissions = ("core.create_personal_event_with_invitations_rule",) @@ -78,13 +75,13 @@ class PersonalEventBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCre return value -class PersonalEventBatchDeleteMutation(PermissionBatchDeleteMixin, DjangoBatchDeleteMutation): +class PersonalEventBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = PersonalEvent permissions = ("core.delete_personal_event_rule",) -class PersonalEventBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): +class PersonalEventBatchPatchMutation(BaseBatchPatchMutation): class Meta: model = PersonalEvent permissions = ("core.change_personalevent",) diff --git a/aleksis/core/schema/room.py b/aleksis/core/schema/room.py index b91fc22f4..19a315ab0 100644 --- a/aleksis/core/schema/room.py +++ b/aleksis/core/schema/room.py @@ -1,16 +1,12 @@ from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import ( - DjangoBatchCreateMutation, - DjangoBatchDeleteMutation, - DjangoBatchPatchMutation, -) from guardian.shortcuts import get_objects_for_user from ..models import Room from .base import ( + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, DjangoFilterMixin, - PermissionBatchDeleteMixin, - PermissionBatchPatchMixin, PermissionsTypeMixin, ) @@ -30,20 +26,20 @@ class RoomType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): return get_objects_for_user(info.context.user, "core.view_room", queryset) -class RoomBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCreateMutation): +class RoomBatchCreateMutation(BaseBatchCreateMutation): class Meta: model = Room permissions = ("core.create_room_rule",) only_fields = ("id", "name", "short_name") -class RoomBatchDeleteMutation(PermissionBatchDeleteMixin, DjangoBatchDeleteMutation): +class RoomBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = Room permissions = ("core.delete_room_rule",) -class RoomBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): +class RoomBatchPatchMutation(BaseBatchPatchMutation): class Meta: model = Room permissions = ("core.edit_room_rule",) diff --git a/aleksis/core/schema/school_term.py b/aleksis/core/schema/school_term.py index f9af92105..3b9d6e04e 100644 --- a/aleksis/core/schema/school_term.py +++ b/aleksis/core/schema/school_term.py @@ -2,17 +2,13 @@ from django.core.exceptions import PermissionDenied, ValidationError from django.utils.translation import gettext as _ from graphene_django import DjangoObjectType -from graphene_django_cud.mutations import ( - DjangoBatchCreateMutation, - DjangoBatchDeleteMutation, - DjangoBatchPatchMutation, -) from ..models import SchoolTerm from .base import ( + BaseBatchCreateMutation, + BaseBatchDeleteMutation, + BaseBatchPatchMutation, DjangoFilterMixin, - PermissionBatchDeleteMixin, - PermissionBatchPatchMixin, PermissionsTypeMixin, ) @@ -35,7 +31,7 @@ class SchoolTermType(PermissionsTypeMixin, DjangoFilterMixin, DjangoObjectType): return queryset -class SchoolTermBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCreateMutation): +class SchoolTermBatchCreateMutation(BaseBatchCreateMutation): class Meta: model = SchoolTerm permissions = ("core.create_school_term_rule",) @@ -56,13 +52,13 @@ class SchoolTermBatchCreateMutation(PermissionBatchPatchMixin, DjangoBatchCreate ) -class SchoolTermBatchDeleteMutation(PermissionBatchDeleteMixin, DjangoBatchDeleteMutation): +class SchoolTermBatchDeleteMutation(BaseBatchDeleteMutation): class Meta: model = SchoolTerm permissions = ("core.delete_school_term_rule",) -class SchoolTermBatchPatchMutation(PermissionBatchPatchMixin, DjangoBatchPatchMutation): +class SchoolTermBatchPatchMutation(BaseBatchPatchMutation): class Meta: model = SchoolTerm permissions = ("core.edit_school_term_rule",) -- GitLab