audioform_mostrecent.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. from pytimeparse.timeparse import timeparse
  2. from flask_wtf import Form
  3. from wtforms import StringField, validators, SubmitField, ValidationError
  4. from larigira.formutils import AutocompleteStringField
  5. class AudioForm(Form):
  6. nick = StringField(
  7. "Audio nick",
  8. validators=[validators.required()],
  9. description="A simple name to recognize this audio",
  10. )
  11. path = AutocompleteStringField(
  12. "dl-suggested-dirs",
  13. "Path",
  14. validators=[validators.required()],
  15. description="Directory to pick file from",
  16. )
  17. maxage = StringField(
  18. "Max age",
  19. validators=[validators.required()],
  20. description="in seconds, or human-readable " "(like 9w3d12h)",
  21. )
  22. submit = SubmitField("Submit")
  23. def validate_maxage(self, field):
  24. try:
  25. int(field.data)
  26. except ValueError:
  27. if timeparse(field.data) is None:
  28. raise ValidationError(
  29. "maxage must either be a number "
  30. "(in seconds) or a human-readable "
  31. "string like '1h2m' or '1d12h'"
  32. )
  33. def populate_from_audiospec(self, audiospec):
  34. if "nick" in audiospec:
  35. self.nick.data = audiospec["nick"]
  36. if "path" in audiospec:
  37. self.path.data = audiospec["path"]
  38. if "maxage" in audiospec:
  39. self.maxage.data = audiospec["maxage"]
  40. def audio_receive(form):
  41. return {
  42. "kind": "mostrecent",
  43. "nick": form.nick.data,
  44. "path": form.path.data,
  45. "maxage": form.maxage.data,
  46. "howmany": 1,
  47. }