120 lines
2.6 KiB
Python
120 lines
2.6 KiB
Python
from enum import Enum
|
||
from pydantic import BaseModel, constr
|
||
from typing import List, Optional
|
||
|
||
|
||
# Regex
|
||
ENameRegex = constr(regex="^[a-z0-9_]{1,}$")
|
||
CNameRegex = constr(regex=r"^[\u4e00-\u9fa5a-zA-Z0-9()%\/]+$")
|
||
|
||
|
||
# Enums
|
||
class NatureEnum(Enum):
|
||
enum01 = "定量"
|
||
enum02 = "定性"
|
||
|
||
|
||
# Parameters
|
||
class EditParamReqBody(BaseModel):
|
||
ename: ENameRegex = "example_param"
|
||
cname: CNameRegex = "示例参数"
|
||
description: str = "参数介绍文字"
|
||
|
||
|
||
class ViewParameterResBody(BaseModel):
|
||
pid: str
|
||
cname: CNameRegex = "示例参数"
|
||
description: str = "参数介绍文字"
|
||
|
||
|
||
class CreateCategoryReqBody(BaseModel):
|
||
title: str
|
||
|
||
|
||
class DeleteCategoryReqBody(BaseModel):
|
||
category_id: str
|
||
|
||
|
||
class CreateIndicatorReqBody(BaseModel):
|
||
ename: ENameRegex = "example_indicator"
|
||
cname: CNameRegex = "示例指标"
|
||
description: str = "指标介绍文字"
|
||
nature: NatureEnum
|
||
category_id: str
|
||
parameters: List[EditParamReqBody]
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
def to_dict(self):
|
||
_dict = self.dict().copy()
|
||
_dict.pop("parameters")
|
||
return _dict
|
||
|
||
|
||
class CreateIndicatorResBody(BaseModel):
|
||
iid: str
|
||
|
||
|
||
class EditIndicatorReqBody(BaseModel):
|
||
cname: Optional[CNameRegex] = None
|
||
description: Optional[str] = None
|
||
nature: Optional[NatureEnum] = None
|
||
category_id: Optional[str] = None
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
def del_null_value(self):
|
||
_dict = self.dict()
|
||
for key in list(_dict.keys()):
|
||
if not _dict.get(key):
|
||
del _dict[key]
|
||
return _dict
|
||
|
||
|
||
class ViewIndicatorResBody(BaseModel):
|
||
iid: str
|
||
cname: CNameRegex = "示例指标"
|
||
description: str = "指标介绍文字"
|
||
nature: NatureEnum
|
||
category: str
|
||
parameters: List[ViewParameterResBody] = []
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
|
||
class IndicatorDescribeResBody(BaseModel):
|
||
description: str
|
||
|
||
|
||
class SearchIndicatorReqBody(BaseModel):
|
||
name: Optional[str] = None
|
||
nature: Optional[str] = None
|
||
category_id: Optional[str] = None
|
||
page: int = 1
|
||
pagesize: int = 20
|
||
|
||
|
||
class SearchIndicatorResBody(BaseModel):
|
||
items: List[ViewIndicatorResBody]
|
||
total: int
|
||
|
||
|
||
class RegisterIndicatorReqBody(BaseModel):
|
||
ename: ENameRegex = "example_indicator"
|
||
cname: CNameRegex = "示例指标"
|
||
description: str = "指标介绍文字"
|
||
nature: NatureEnum
|
||
category: str
|
||
parameters: List[EditParamReqBody]
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
def to_dict(self):
|
||
_dict = self.dict().copy()
|
||
_dict.pop("parameters")
|
||
return _dict
|