rule_models.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from pydantic import BaseModel
  2. from pydantic.functional_validators import field_validator
  3. from pydantic import ConfigDict
  4. from typing import Dict, Any, Optional, Union
  5. class RuleField(BaseModel):
  6. """
  7. 规则字段模型,用于验证单个规则字段
  8. """
  9. min: Union[int, float] = 0
  10. max: Union[int, float] = 0
  11. # @validator('max')
  12. # def validate_min_max(cls, v, values, field):
  13. # if 'min' in values and v != 0 and values['min'] > v:
  14. # raise ValueError('min value cannot be greater than max value')
  15. # return v
  16. class RuleModel(BaseModel):
  17. """
  18. 规则模型,用于验证规则字典
  19. """
  20. period: Optional[RuleField] = None
  21. duration: Optional[RuleField] = None
  22. play_cnt: Optional[RuleField] = None
  23. like_cnt: Optional[RuleField] = None
  24. comment_cnt: Optional[RuleField] = None
  25. share_cnt: Optional[RuleField] = None
  26. videos_cnt: Optional[RuleField] = None
  27. width: Optional[RuleField] = None
  28. height: Optional[RuleField] = None
  29. @field_validator('*')
  30. def validate_rule_fields(cls, v):
  31. if v is not None and not isinstance(v, RuleField):
  32. raise ValueError('Rule fields must be of type RuleField')
  33. return v
  34. model_config = ConfigDict(extra='allow') # 使用V2兼容的方式允许额外字段