rule_engine.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # toolkit/rule_engine.py
  2. import json
  3. from datetime import datetime
  4. from typing import List
  5. class RuleEngine:
  6. def __init__(self, rules_json_str: str):
  7. self.rules = {}
  8. if rules_json_str:
  9. try:
  10. self.rules = json.loads(rules_json_str)
  11. except:
  12. pass
  13. self.start_date = None
  14. self.end_date = None
  15. def set_date_range_start(self, date_str: str):
  16. # Format: YYYY-MM-DD
  17. if date_str:
  18. try:
  19. self.start_date = datetime.strptime(date_str, "%Y-%m-%d")
  20. except:
  21. pass
  22. def set_date_range_end(self, date_str: str):
  23. # Format: YYYY-MM-DD
  24. if date_str:
  25. try:
  26. self.end_date = datetime.strptime(date_str, "%Y-%m-%d")
  27. except:
  28. pass
  29. # 修正:将 list[str] 改为 List[str]
  30. def select_date(self, available_dates: List[str], fmt: str = "%d/%m/%Y") -> List[str]:
  31. """
  32. 从可用日期中筛选符合规则的日期
  33. """
  34. valid_dates = []
  35. for d_str in available_dates:
  36. try:
  37. dt = datetime.strptime(d_str, fmt)
  38. # 检查日期范围
  39. if self.start_date and dt < self.start_date:
  40. continue
  41. if self.end_date and dt > self.end_date:
  42. continue
  43. # 这里可以添加星期几排除等逻辑
  44. valid_dates.append(d_str)
  45. except:
  46. continue
  47. return valid_dates