timegen_cron.py 805 B

123456789101112131415161718192021222324252627282930
  1. import logging
  2. from datetime import datetime
  3. from croniter import croniter
  4. from .timegen_every import Alarm
  5. log = logging.getLogger("time-cron")
  6. class CronAlarm(Alarm):
  7. description = "Frequency specified by cron-like format. nerds preferred"
  8. def __init__(self, obj):
  9. super().__init__()
  10. self.cron_format = obj["cron_format"]
  11. if not croniter.is_valid(self.cron_format):
  12. raise ValueError("Invalid cron_format: %s" % self.cron_format)
  13. def next_ring(self, current_time=None):
  14. if current_time is None:
  15. current_time = datetime.now()
  16. return croniter(self.cron_format, current_time).get_next(datetime)
  17. def has_ring(self, current_time=None):
  18. # cron specification has no possibility of being over
  19. return True