From a3507975fb9ef5d13019cce8a35b7f49dfa31db5 Mon Sep 17 00:00:00 2001 From: Bai Date: Tue, 27 Oct 2020 18:01:08 +0800 Subject: [PATCH] =?UTF-8?q?perf(application):=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=BF=9C=E7=A8=8B=E5=BA=94=E7=94=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E5=8F=82=E6=95=B0=E7=9A=84API(2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/applications/api/remote_app.py | 13 ++++++++++--- apps/applications/models/application.py | 4 ++++ apps/applications/serializers/remote_app.py | 7 ++++++- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/applications/api/remote_app.py b/apps/applications/api/remote_app.py index 25b912398..45e5c097c 100644 --- a/apps/applications/api/remote_app.py +++ b/apps/applications/api/remote_app.py @@ -3,8 +3,9 @@ from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins import generics +from common.exceptions import JMSException from ..hands import IsOrgAdmin, IsAppUser -from ..models import RemoteApp, Application +from .. import models from ..serializers import RemoteAppSerializer, RemoteAppConnectionInfoSerializer @@ -14,7 +15,7 @@ __all__ = [ class RemoteAppViewSet(OrgBulkModelViewSet): - model = RemoteApp + model = models.RemoteApp filter_fields = ('name', 'type', 'comment') search_fields = filter_fields permission_classes = (IsOrgAdmin,) @@ -22,6 +23,12 @@ class RemoteAppViewSet(OrgBulkModelViewSet): class RemoteAppConnectionInfoApi(generics.RetrieveAPIView): - model = Application + model = models.Application permission_classes = (IsAppUser, ) serializer_class = RemoteAppConnectionInfoSerializer + + def get_object(self): + obj = super().get_object() + if not models.Category.is_remote_app(obj.category): + raise JMSException('The request instance is not of category `remote_app`') + return obj diff --git a/apps/applications/models/application.py b/apps/applications/models/application.py index 3a21942f2..35f6171c5 100644 --- a/apps/applications/models/application.py +++ b/apps/applications/models/application.py @@ -112,6 +112,10 @@ class Category(ChoiceSet): mapper = cls.get_category_serializer_mapper() return mapper.get(cg, None) + @classmethod + def is_remote_app(cls, cg): + return cg == cls.remote_app + class Application(CommonModelMixin, OrgModelMixin): name = models.CharField(max_length=128, verbose_name=_('Name')) diff --git a/apps/applications/serializers/remote_app.py b/apps/applications/serializers/remote_app.py index 81f36b3d3..d0db0ce90 100644 --- a/apps/applications/serializers/remote_app.py +++ b/apps/applications/serializers/remote_app.py @@ -106,11 +106,12 @@ class RemoteAppSerializer(BulkOrgResourceModelSerializer): class RemoteAppConnectionInfoSerializer(serializers.ModelSerializer): parameter_remote_app = serializers.SerializerMethodField() + asset = serializers.SerializerMethodField() class Meta: model = Application fields = [ - 'id', 'name', 'parameter_remote_app', + 'id', 'name', 'asset', 'parameter_remote_app', ] read_only_fields = ['parameter_remote_app'] @@ -144,3 +145,7 @@ class RemoteAppConnectionInfoSerializer(serializers.ModelSerializer): 'parameters': parameters, } return parameter + + @staticmethod + def get_asset(obj): + return obj.attrs.get('asset')