diff --git a/aleksis/core/schema/base.py b/aleksis/core/schema/base.py index 76e7b7180aa08c4920db9c0ccd55e4519e5d8781..346ae1c2eaae1f9b5dee34cc5fd0b89f48c74516 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 fca51e01894ad9acc07147ca8ee6d5b115823d54..4d5e00cff5d187bd6fd63ce5e80244b597ec0a55 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 b596f6feae003c26696d42725605299b0d7d1a1a..4de4a8c11fedf0b7612340fa28f6eb76637b164a 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 2772fa94ca7c19f1d85d193ebac8dc352d6375d2..3e2af57c2ea06317135e82d00aa0c149e0ecfa60 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 99b1324790509c4a70eaa63abcaaca94d78863e1..a231bd47fda6c20abefe5007375a420f883679f1 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 b91fc22f4e7ff77a836c9ba25d082200055bafc3..19a315ab06cffebd7f9af29d3def2a5ff4405f60 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 f9af92105a2672eee1cdd4979568dd83cfcdd843..3b9d6e04e7b176017369a5f71bbb160eb94cd0c2 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",)