75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
from apps.utils.serializers import CustomModelSerializer
|
||
from apps.bi.models import Dataset, DatasetRecord
|
||
from apps.utils.constants import EXCLUDE_FIELDS
|
||
from rest_framework import serializers
|
||
from apps.bi.services import check_sql_safe
|
||
|
||
|
||
class DatasetCreateUpdateSerializer(CustomModelSerializer):
|
||
class Meta:
|
||
model = Dataset
|
||
exclude = EXCLUDE_FIELDS
|
||
|
||
def validate(self, attrs):
|
||
sql_query = attrs.get('sql_query', '')
|
||
if sql_query:
|
||
check_sql_safe(sql_query)
|
||
return attrs
|
||
|
||
|
||
class DatasetSerializer(CustomModelSerializer):
|
||
description = serializers.CharField(
|
||
label="适用场景与统计口径",
|
||
help_text="说明该数据集适合回答的问题、指标口径、参数格式和返回字段含义",
|
||
required=False,
|
||
allow_blank=True,
|
||
)
|
||
default_param = serializers.JSONField(
|
||
label="默认查询参数",
|
||
help_text="执行时可覆盖的参数及默认值;内部 SQL 片段参数应保留默认值",
|
||
required=False,
|
||
)
|
||
test_param = serializers.JSONField(
|
||
label="测试查询参数",
|
||
help_text="数据集维护时使用的示例参数,普通查询优先参考 description",
|
||
required=False,
|
||
)
|
||
|
||
class Meta:
|
||
model = Dataset
|
||
fields = '__all__'
|
||
|
||
|
||
class DatasetListResponseSerializer(serializers.Serializer):
|
||
count = serializers.IntegerField(label="数据集总数")
|
||
next = serializers.URLField(required=False, allow_null=True)
|
||
previous = serializers.URLField(required=False, allow_null=True)
|
||
results = DatasetSerializer(many=True)
|
||
|
||
|
||
class DatasetRecordSerializer(CustomModelSerializer):
|
||
class Meta:
|
||
model = DatasetRecord
|
||
fields = '__all__'
|
||
|
||
# class ReportSerializer(CustomModelSerializer):
|
||
# class Meta:
|
||
# model = Report
|
||
# fields = '__all__'
|
||
# read_only_fields = EXCLUDE_FIELDS
|
||
|
||
|
||
class DataExecSerializer(serializers.Serializer):
|
||
query = serializers.JSONField(
|
||
label="查询字典参数",
|
||
help_text="按所选数据集 description/default_param 声明的业务参数填写",
|
||
required=False,
|
||
allow_null=True,
|
||
)
|
||
is_test = serializers.BooleanField(
|
||
label='是否测试', help_text="普通业务查询固定为 false", default=False
|
||
)
|
||
raise_exception = serializers.BooleanField(
|
||
label='是否直接报错', help_text="建议为 true,便于修正缺失或非法参数", default=True
|
||
)
|