98 lines
2.0 KiB
Python
98 lines
2.0 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="^[\u4e00-\u9fa5a-zA-Z0-9()]+$")
|
||
|
||
|
||
# Enums
|
||
class NatureEnum(Enum):
|
||
enum01 = "定量"
|
||
enum02 = "定性"
|
||
|
||
|
||
class CategoryEnum(Enum):
|
||
enum01 = "盈利能力"
|
||
enum02 = "收益质量"
|
||
enum03 = "现金流量"
|
||
enum04 = "资本结构"
|
||
enum05 = "偿债能力"
|
||
enum06 = "运营能力"
|
||
enum07 = "成长能力"
|
||
enum08 = "经营指标"
|
||
enum09 = "资质指标"
|
||
enum10 = "行业指标"
|
||
enum11 = "绿色指标"
|
||
enum12 = "司法指标"
|
||
enum13 = "合规指标"
|
||
enum14 = "舆情指标"
|
||
enum15 = "其他"
|
||
|
||
|
||
# Parameters
|
||
class ParameterBase(BaseModel):
|
||
ename: ENameRegex = "example_param"
|
||
cname: CNameRegex = "示例参数"
|
||
description: str = "参数介绍文字"
|
||
|
||
|
||
class ParameterEdit(ParameterBase):
|
||
pass
|
||
|
||
|
||
class Parameter(ParameterBase):
|
||
pid: str
|
||
_iid: str
|
||
|
||
class Config:
|
||
orm_mode = True
|
||
|
||
|
||
# Indicators
|
||
class IndicatorBase(BaseModel):
|
||
ename: ENameRegex = "example_indicator"
|
||
cname: CNameRegex = "示例指标"
|
||
description: str = "指标介绍文字"
|
||
nature: NatureEnum
|
||
category: CategoryEnum
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
|
||
class IndicatorCreate(IndicatorBase):
|
||
|
||
parameters: List[ParameterEdit]
|
||
|
||
|
||
class Indicator(IndicatorBase):
|
||
iid: str
|
||
parameters: List[Parameter] = []
|
||
|
||
class Config:
|
||
orm_mode = True
|
||
|
||
|
||
class IndicatorEdit(BaseModel):
|
||
cname: Optional[CNameRegex] = None
|
||
description: Optional[str] = None
|
||
nature: Optional[NatureEnum] = None
|
||
category: Optional[CategoryEnum] = None
|
||
|
||
class Config:
|
||
use_enum_values = True
|
||
|
||
|
||
class IndicatorSearch(BaseModel):
|
||
name: Optional[str] = None
|
||
nature: Optional[str] = None
|
||
category: Optional[CategoryEnum] = None
|
||
page: int = 1
|
||
pagesize: int = 20
|
||
|
||
class Config:
|
||
use_enum_values = True
|