factory/apps/bi/serializers.py

75 lines
2.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
)