rule_models.py 1.2 KB

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