creditrating-wcq/IndexStore/AppIndicators/Schemas.py

120 lines
2.6 KiB
Python
Raw Normal View History

2023-02-20 09:44:05 +08:00
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