mirror of https://github.com/jumpserver/jumpserver
50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
#
|
|
from rest_framework import status, viewsets
|
|
from rest_framework.response import Response
|
|
|
|
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
|
|
|
|
|
|
class AccountBackupPlanExecutionViewSet(viewsets.ModelViewSet):
|
|
serializer_class = serializers.AccountBackupPlanExecutionSerializer
|
|
search_fields = ('trigger',)
|
|
filterset_fields = ('trigger', 'plan_id')
|
|
http_method_names = ['get', 'post', 'options']
|
|
|
|
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
|