from pydantic import BaseModel from pydantic.functional_validators import field_validator from pydantic import ConfigDict from typing import Dict, Any, Optional, Union class RuleField(BaseModel): """ 规则字段模型,用于验证单个规则字段 """ min: Union[int, float] = 0 max: Union[int, float] = 0 # @validator('max') # def validate_min_max(cls, v, values, field): # if 'min' in values and v != 0 and values['min'] > v: # raise ValueError('min value cannot be greater than max value') # return v class RuleModel(BaseModel): """ 规则模型,用于验证规则字典 """ period: Optional[RuleField] = None duration: Optional[RuleField] = None play_cnt: Optional[RuleField] = None like_cnt: Optional[RuleField] = None comment_cnt: Optional[RuleField] = None share_cnt: Optional[RuleField] = None videos_cnt: Optional[RuleField] = None width: Optional[RuleField] = None height: Optional[RuleField] = None @field_validator('*') def validate_rule_fields(cls, v): if v is not None and not isinstance(v, RuleField): raise ValueError('Rule fields must be of type RuleField') return v model_config = ConfigDict(extra='allow') # 使用V2兼容的方式允许额外字段