# -*- coding: utf-8 -*- # from rest_framework import status, mixins, viewsets from rest_framework.response import Response from common.permissions import IsOrgAdmin from orgs.mixins.api import OrgBulkModelViewSet from .. import serializers from ..tasks import execute_account_backup_plan from ..models import ( AccountBackupPlan, AccountBackupPlanExecution ) __all__ = [ 'AccountBackupPlanViewSet', 'AccountBackupPlanExecutionViewSet' ] class AccountBackupPlanViewSet(OrgBulkModelViewSet): model = AccountBackupPlan filter_fields = ('name',) search_fields = filter_fields ordering_fields = ('name',) ordering = ('name',) serializer_class = serializers.AccountBackupPlanSerializer permission_classes = (IsOrgAdmin,) class AccountBackupPlanExecutionViewSet( mixins.CreateModelMixin, mixins.ListModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet ): serializer_class = serializers.AccountBackupPlanExecutionSerializer search_fields = ('trigger', 'plan_id') filterset_fields = search_fields permission_classes = (IsOrgAdmin,) def get_queryset(self): queryset = AccountBackupPlanExecution.objects.all() return queryset def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) pid = serializer.data.get('plan') task = execute_account_backup_plan.delay( pid=pid, trigger=AccountBackupPlanExecution.Trigger.manual ) return Response({'task': task.id}, status=status.HTTP_201_CREATED) def filter_queryset(self, queryset): queryset = super().filter_queryset(queryset) queryset = queryset.order_by('-date_start') return queryset