perf: change secret push record list

pull/15025/head
feng 2025-03-13 14:57:05 +08:00 committed by feng626
parent 9e4b82bf45
commit 15919085bc
4 changed files with 35 additions and 8 deletions

View File

@ -122,3 +122,12 @@ class AutomationExecutionViewSet(
execution = self.get_object()
report = execution.manager.gen_report()
return HttpResponse(report)
class RecordListMixin:
def list(self, request, *args, **kwargs):
try:
response = super().list(request, *args, **kwargs)
except Exception as e:
response = Response({'detail': str(e)}, status=status.HTTP_400_BAD_REQUEST)
return response

View File

@ -15,7 +15,7 @@ from orgs.mixins.api import OrgBulkModelViewSet, OrgGenericViewSet
from rbac.permissions import RBACPermission
from .base import (
AutomationAssetsListApi, AutomationRemoveAssetApi, AutomationAddAssetApi,
AutomationNodeAddRemoveApi, AutomationExecutionViewSet
AutomationNodeAddRemoveApi, AutomationExecutionViewSet, RecordListMixin
)
__all__ = [
@ -33,7 +33,7 @@ class ChangeSecretAutomationViewSet(OrgBulkModelViewSet):
serializer_class = serializers.ChangeSecretAutomationSerializer
class ChangeSecretRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet):
class ChangeSecretRecordViewSet(RecordListMixin, mixins.ListModelMixin, OrgGenericViewSet):
filterset_class = ChangeSecretRecordFilterSet
search_fields = ('asset__address', 'account__username')
ordering_fields = ('date_finished',)

View File

@ -9,7 +9,7 @@ from accounts.models import PushAccountAutomation, PushSecretRecord
from orgs.mixins.api import OrgBulkModelViewSet, OrgGenericViewSet
from .base import (
AutomationAssetsListApi, AutomationRemoveAssetApi, AutomationAddAssetApi,
AutomationNodeAddRemoveApi, AutomationExecutionViewSet
AutomationNodeAddRemoveApi, AutomationExecutionViewSet, RecordListMixin
)
__all__ = [
@ -42,7 +42,7 @@ class PushAccountExecutionViewSet(AutomationExecutionViewSet):
return queryset
class PushAccountRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet):
class PushAccountRecordViewSet(RecordListMixin, mixins.ListModelMixin, OrgGenericViewSet):
filterset_class = PushAccountRecordFilterSet
search_fields = ('asset__address', 'account__username')
ordering_fields = ('date_finished',)

View File

@ -1,7 +1,11 @@
# -*- coding: utf-8 -*-
#
import uuid
import django_filters
from django.db.models import Q
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django_filters import rest_framework as drf_filters
from rest_framework import filters
from rest_framework.compat import coreapi
@ -176,13 +180,27 @@ class SecretRecordMixin(drf_filters.FilterSet):
return queryset.filter(date_finished__gte=dt)
class ChangeSecretRecordFilterSet(SecretRecordMixin, BaseFilterSet):
class UUIDExecutionFilterMixin:
@staticmethod
def filter_execution(queryset, name, value):
try:
uuid.UUID(value)
except ValueError:
raise ValueError(_('Enter a valid UUID.'))
return queryset.filter(**{name: value})
class ChangeSecretRecordFilterSet(SecretRecordMixin, UUIDExecutionFilterMixin, BaseFilterSet):
execution_id = django_filters.CharFilter(method="filter_execution")
class Meta:
model = ChangeSecretRecord
fields = ["id", "status", "asset_id", "execution"]
fields = ["id", "status", "asset_id", "execution_id"]
class PushAccountRecordFilterSet(SecretRecordMixin, BaseFilterSet):
class PushAccountRecordFilterSet(SecretRecordMixin, UUIDExecutionFilterMixin, BaseFilterSet):
execution_id = django_filters.CharFilter(method="filter_execution")
class Meta:
model = PushSecretRecord
fields = ["id", "status", "asset_id", "execution"]
fields = ["id", "status", "asset_id", "execution_id"]