From 15919085bc5191acc1eab6b5192bfca7bf1746e0 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Thu, 13 Mar 2025 14:57:05 +0800 Subject: [PATCH] perf: change secret push record list --- apps/accounts/api/automations/base.py | 9 +++++++ .../accounts/api/automations/change_secret.py | 4 +-- apps/accounts/api/automations/push_account.py | 4 +-- apps/accounts/filters.py | 26 ++++++++++++++++--- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/apps/accounts/api/automations/base.py b/apps/accounts/api/automations/base.py index e316b7d2f..f7ab36ea7 100644 --- a/apps/accounts/api/automations/base.py +++ b/apps/accounts/api/automations/base.py @@ -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 diff --git a/apps/accounts/api/automations/change_secret.py b/apps/accounts/api/automations/change_secret.py index 925126121..db849011e 100644 --- a/apps/accounts/api/automations/change_secret.py +++ b/apps/accounts/api/automations/change_secret.py @@ -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',) diff --git a/apps/accounts/api/automations/push_account.py b/apps/accounts/api/automations/push_account.py index 812da9ab3..925e21e06 100644 --- a/apps/accounts/api/automations/push_account.py +++ b/apps/accounts/api/automations/push_account.py @@ -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',) diff --git a/apps/accounts/filters.py b/apps/accounts/filters.py index 42fc1e5e7..5345634a6 100644 --- a/apps/accounts/filters.py +++ b/apps/accounts/filters.py @@ -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"]