timeform_cron.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import logging
  2. from flask_wtf import Form
  3. from wtforms import StringField, validators, SubmitField, ValidationError
  4. from croniter import croniter
  5. log = logging.getLogger(__name__)
  6. class CronAlarmForm(Form):
  7. nick = StringField(
  8. "Alarm nick",
  9. validators=[validators.required()],
  10. description="A simple name to recognize this alarm",
  11. )
  12. cron_format = StringField(
  13. "cron-like format",
  14. validators=[validators.required()],
  15. description="the frequency specification, as in the <tt>cron</tt> command; "
  16. 'see <a href="https://crontab.guru/">crontab.guru</a> for a hepl with cron format',
  17. )
  18. submit = SubmitField("Submit")
  19. def populate_from_timespec(self, timespec):
  20. if "nick" in timespec:
  21. self.nick.data = timespec["nick"]
  22. if "cron_format" in timespec:
  23. self.cron_format.data = timespec["cron_format"]
  24. def validate_cron_format(self, field):
  25. if not croniter.is_valid(field.data):
  26. raise ValidationError("formato di cron non valido")
  27. def cronalarm_receive(form):
  28. return {
  29. "kind": "cron",
  30. "nick": form.nick.data,
  31. "cron_format": form.cron_format.data,
  32. }