mirror of
https://github.com/jumpserver/jumpserver.git
synced 2026-04-08 13:23:17 +00:00
* feat: 账号推送附加参数 * perf: 通过节点 资产 过滤平台api * perf: push automation params * perf: 修改playbook * perf: params serializer * perf: 账号推送playbook 调整 * perf: Automation serializer add params field * perf: params 非必填 * perf: 添加is_params 给前端判断 * perf: is_params bool * perf: 修改push account ansible逻辑 * perf: 修改获取push_kwargs方法 * perf: platform migrate * perf: 修改api * perf: 单个推送 * perf: push account * perf: 修改asset auto_config --------- Co-authored-by: feng <1304903146@qq.com> Co-authored-by: feng626 <57284900+feng626@users.noreply.github.com>
56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
from rest_framework import serializers
|
|
|
|
example_info = [
|
|
{"name": "name", "label": "姓名", "required": False, "default": "广州老广", "type": "str"},
|
|
{"name": "age", "label": "年龄", "required": False, "default": 18, "type": "int"},
|
|
]
|
|
|
|
type_field_map = {
|
|
"str": serializers.CharField,
|
|
"int": serializers.IntegerField,
|
|
"bool": serializers.BooleanField,
|
|
"text": serializers.CharField,
|
|
"choice": serializers.ChoiceField,
|
|
"list": serializers.ListField,
|
|
}
|
|
|
|
|
|
def set_default_if_need(data, i):
|
|
field_name = data.pop('name', 'Attr{}'.format(i + 1))
|
|
data['name'] = field_name
|
|
|
|
if not data.get('label'):
|
|
data['label'] = field_name
|
|
return data
|
|
|
|
|
|
def set_default_by_type(tp, data, field_info):
|
|
if tp == 'str':
|
|
data['max_length'] = 4096
|
|
elif tp == 'choice':
|
|
choices = field_info.pop('choices', [])
|
|
if isinstance(choices, str):
|
|
choices = choices.split(',')
|
|
choices = [
|
|
(c, c.title()) if not isinstance(c, (tuple, list)) else c
|
|
for c in choices
|
|
]
|
|
data['choices'] = choices
|
|
return data
|
|
|
|
|
|
def create_serializer_class(serializer_name, fields_info):
|
|
serializer_fields = {}
|
|
fields_name = ['name', 'label', 'default', 'type', 'help_text']
|
|
|
|
for i, field_info in enumerate(fields_info):
|
|
data = {k: field_info.get(k) for k in fields_name}
|
|
field_type = data.pop('type', 'str')
|
|
data = set_default_by_type(field_type, data, field_info)
|
|
data = set_default_if_need(data, i)
|
|
field_name = data.pop('name')
|
|
field_class = type_field_map.get(field_type, serializers.CharField)
|
|
serializer_fields[field_name] = field_class(**data)
|
|
|
|
return type(serializer_name, (serializers.Serializer,), serializer_fields)
|