import pydantic from typing import List from enum import Enum from pydantic import BaseModel ENameRegex = pydantic.constr(regex="^([A-Z][a-z0-9]+)+") CNameRegex = pydantic.constr(regex="[\u4e00-\u9fa5]") class ParameterBase(BaseModel): ename: ENameRegex = "ExampleParameter" cname: CNameRegex = "示例参数" description: str = "参数介绍文字" class ParameterCreate(ParameterBase): pass class ParameterEdit(ParameterBase): pass class Parameter(ParameterBase): id: int indicator_id: int class Config: orm_mode = True class NatureEnum(Enum): quantity = "定量" qualitative = "定性" class CategoryEnum(str, Enum): profitability = "盈利能力" quality_of_revenue = "收益质量" cash_flows = "现金流量" capital_structure = "资本结构" solvency = "偿债能力" operational_capability = "运营能力" ability_to_grow = "成长能力" operating_indicators = "经营指标" qualification_indicators = "资质指标" industry_indicators = "行业指标" green_indicators = "绿色指标" judicial_indicators = "司法指标" compliance_indicators = "合规指标" public_sentiment_indicators = "舆情指标" others = "其他" class IndicatorBase(BaseModel): ename: ENameRegex = "ExampleIndicator" cname: CNameRegex = "示例指标" description: str = "指标介绍文字" nature: NatureEnum category: CategoryEnum class IndicatorCreate(IndicatorBase): class Config: use_enum_values = True class IndicatorEdit(BaseModel): cname: CNameRegex = "示例指标" description: str = "指标介绍文字" nature: NatureEnum category: CategoryEnum is_active: bool class Config: use_enum_values = True class IndicatorSearch(BaseModel): skip: int = 0 limit: int = 20 class Indicator(IndicatorBase): id: int is_active: bool parameters: List[Parameter] = [] class Config: orm_mode = True