mirror of https://github.com/jumpserver/jumpserver
perf(application): 优化一些小细节
parent
4a09dc6e3e
commit
c9065fd96e
|
@ -41,16 +41,17 @@ class ApplicationViewSet(OrgBulkModelViewSet):
|
||||||
if self.action in [
|
if self.action in [
|
||||||
'create', 'update', 'partial_update', 'bulk_update', 'partial_bulk_update'
|
'create', 'update', 'partial_update', 'bulk_update', 'partial_bulk_update'
|
||||||
] and not app_type:
|
] and not app_type:
|
||||||
# action: create / update ...
|
# action: create / update
|
||||||
raise JMSException(
|
raise JMSException(
|
||||||
'The `{}` action must take the `type` query parameter'.format(self.action)
|
'The `{}` action must take the `type` query parameter'.format(self.action)
|
||||||
)
|
)
|
||||||
|
|
||||||
if app_type:
|
if app_type:
|
||||||
|
# action: create / update / list / retrieve / metadata
|
||||||
attrs_cls = models.Category.get_type_serializer_cls(app_type)
|
attrs_cls = models.Category.get_type_serializer_cls(app_type)
|
||||||
elif app_category:
|
elif app_category:
|
||||||
# action: list / retrieve / metadata
|
# action: list / retrieve / metadata
|
||||||
attrs_cls = models.Category.get_category_serializer_cls(app_category)
|
attrs_cls = models.Category.get_category_serializer_cls(app_category)
|
||||||
else:
|
else:
|
||||||
attrs_cls = serializers.CommonCategorySerializer
|
attrs_cls = models.Category.get_no_password_serializer_cls()
|
||||||
return type('ApplicationDynamicSerializer', (serializer_class,), {'attrs': attrs_cls()})
|
return type('ApplicationDynamicSerializer', (serializer_class,), {'attrs': attrs_cls()})
|
||||||
|
|
|
@ -39,11 +39,11 @@ class SerializeApplicationToTreeNodeMixin:
|
||||||
'meta': {'type': 'k8s_app'}
|
'meta': {'type': 'k8s_app'}
|
||||||
}
|
}
|
||||||
|
|
||||||
def dispatch_serialize(self, application):
|
def _serialize(self, application):
|
||||||
method_name = f'_serialize_{application.category}'
|
method_name = f'_serialize_{application.category}'
|
||||||
data = getattr(self, method_name)(application)
|
data = getattr(self, method_name)(application)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def serialize_applications(self, applications):
|
def serialize_applications(self, applications):
|
||||||
data = [self.dispatch_serialize(application) for application in applications]
|
data = [self._serialize(application) for application in applications]
|
||||||
return data
|
return data
|
||||||
|
|
|
@ -27,8 +27,14 @@ class RemoteAppConnectionInfoApi(generics.RetrieveAPIView):
|
||||||
permission_classes = (IsAppUser, )
|
permission_classes = (IsAppUser, )
|
||||||
serializer_class = RemoteAppConnectionInfoSerializer
|
serializer_class = RemoteAppConnectionInfoSerializer
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def check_category_allowed(obj):
|
||||||
|
if not obj.category_is_remote_app:
|
||||||
|
raise JMSException(
|
||||||
|
'The request instance(`{}`) is not of category `remote_app`'.format(obj.category)
|
||||||
|
)
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
obj = super().get_object()
|
obj = super().get_object()
|
||||||
if not models.Category.is_remote_app(obj.category):
|
self.check_category_allowed(obj)
|
||||||
raise JMSException('The request instance is not of category `remote_app`')
|
|
||||||
return obj
|
return obj
|
||||||
|
|
|
@ -102,9 +102,9 @@ class Category(ChoiceSet):
|
||||||
def get_category_serializer_mapper(cls):
|
def get_category_serializer_mapper(cls):
|
||||||
from ..serializers import remote_app, database_app, k8s_app
|
from ..serializers import remote_app, database_app, k8s_app
|
||||||
return {
|
return {
|
||||||
cls.db: database_app.DatabaseCategorySerializer,
|
cls.db: database_app.DBAttrsSerializer,
|
||||||
cls.remote_app: remote_app.RemmoteAppCategorySerializer,
|
cls.remote_app: remote_app.RemoteAppAttrsSerializer,
|
||||||
cls.cloud: k8s_app.CloudCategorySerializer,
|
cls.cloud: k8s_app.CloudAttrsSerializer,
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@ -113,8 +113,9 @@ class Category(ChoiceSet):
|
||||||
return mapper.get(cg, None)
|
return mapper.get(cg, None)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_remote_app(cls, cg):
|
def get_no_password_serializer_cls(cls):
|
||||||
return cg == cls.remote_app
|
from ..serializers import common
|
||||||
|
return common.NoPasswordSerializer
|
||||||
|
|
||||||
|
|
||||||
class Application(CommonModelMixin, OrgModelMixin):
|
class Application(CommonModelMixin, OrgModelMixin):
|
||||||
|
@ -136,3 +137,6 @@ class Application(CommonModelMixin, OrgModelMixin):
|
||||||
category_display = self.get_category_display()
|
category_display = self.get_category_display()
|
||||||
type_display = self.get_type_display()
|
type_display = self.get_type_display()
|
||||||
return f'{self.name}({type_display})[{category_display}]'
|
return f'{self.name}({type_display})[{category_display}]'
|
||||||
|
|
||||||
|
def category_is_remote_app(self):
|
||||||
|
return self.category == Category.remote_app
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
|
||||||
class CommonCategorySerializer(serializers.JSONField):
|
class NoPasswordSerializer(serializers.JSONField):
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
new_value = {}
|
new_value = {}
|
||||||
for k, v in value.items():
|
for k, v in value.items():
|
||||||
|
|
|
@ -9,7 +9,7 @@ from common.serializers import AdaptedBulkListSerializer
|
||||||
from .. import models
|
from .. import models
|
||||||
|
|
||||||
|
|
||||||
class DatabaseCategorySerializer(serializers.Serializer):
|
class DBAttrsSerializer(serializers.Serializer):
|
||||||
host = serializers.CharField(max_length=128, label=_('Host'))
|
host = serializers.CharField(max_length=128, label=_('Host'))
|
||||||
port = serializers.IntegerField(label=_('Port'))
|
port = serializers.IntegerField(label=_('Port'))
|
||||||
database = serializers.CharField(
|
database = serializers.CharField(
|
||||||
|
@ -17,19 +17,15 @@ class DatabaseCategorySerializer(serializers.Serializer):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class DatabaseAttrsSerializer(DatabaseCategorySerializer):
|
class MySQLAttrsSerializer(DBAttrsSerializer):
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class MySQLAttrsSerializer(DatabaseAttrsSerializer):
|
|
||||||
port = serializers.IntegerField(default=3306, label=_('Port'))
|
port = serializers.IntegerField(default=3306, label=_('Port'))
|
||||||
|
|
||||||
|
|
||||||
class PostgreAttrsSerializer(DatabaseAttrsSerializer):
|
class PostgreAttrsSerializer(DBAttrsSerializer):
|
||||||
port = serializers.IntegerField(default=5432, label=_('Port'))
|
port = serializers.IntegerField(default=5432, label=_('Port'))
|
||||||
|
|
||||||
|
|
||||||
class OracleAttrsSerializer(DatabaseAttrsSerializer):
|
class OracleAttrsSerializer(DBAttrsSerializer):
|
||||||
port = serializers.IntegerField(default=1521, label=_('Port'))
|
port = serializers.IntegerField(default=1521, label=_('Port'))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,11 @@ from orgs.mixins.serializers import BulkOrgResourceModelSerializer
|
||||||
from .. import models
|
from .. import models
|
||||||
|
|
||||||
|
|
||||||
class CloudCategorySerializer(serializers.Serializer):
|
class CloudAttrsSerializer(serializers.Serializer):
|
||||||
cluster = serializers.CharField(max_length=1024, label=_('Cluster'))
|
cluster = serializers.CharField(max_length=1024, label=_('Cluster'))
|
||||||
|
|
||||||
|
|
||||||
class K8sAttrsSerializer(CloudCategorySerializer):
|
class K8sAttrsSerializer(CloudAttrsSerializer):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -14,11 +14,8 @@ from .. import const
|
||||||
from ..models import RemoteApp, Category, Application
|
from ..models import RemoteApp, Category, Application
|
||||||
|
|
||||||
|
|
||||||
class RemmoteAppCategorySerializer(serializers.Serializer):
|
class RemoteAppAttrsSerializer(serializers.Serializer):
|
||||||
asset = serializers.CharField(max_length=36, label=_('Assets'))
|
asset = serializers.CharField(max_length=36, label=_('Assets'))
|
||||||
|
|
||||||
|
|
||||||
class RemoteAppAttrsSerializer(RemmoteAppCategorySerializer):
|
|
||||||
path = serializers.CharField(max_length=128, label=_('Remote App path'))
|
path = serializers.CharField(max_length=128, label=_('Remote App path'))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -141,14 +141,14 @@ class SystemUser(BaseUser):
|
||||||
]
|
]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def k8s_application_protocols(self):
|
def cloud_application_protocols(self):
|
||||||
return [self.PROTOCOL_K8S]
|
return [self.PROTOCOL_K8S]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def application_category_protocols(self):
|
def application_category_protocols(self):
|
||||||
protocols = []
|
protocols = []
|
||||||
protocols.extend(self.db_application_protocols)
|
protocols.extend(self.db_application_protocols)
|
||||||
protocols.extend(self.k8s_application_protocols)
|
protocols.extend(self.cloud_application_protocols)
|
||||||
return protocols
|
return protocols
|
||||||
|
|
||||||
def is_need_push(self):
|
def is_need_push(self):
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from .user_permission import *
|
from .user_permission import *
|
||||||
from .application_permission import *
|
from .application_permission import *
|
||||||
from .application_permission_relation import *
|
from .application_permission_relation import *
|
||||||
from .user_group_permission_application import *
|
from .user_group_permission import *
|
||||||
|
|
Loading…
Reference in New Issue