audioform_mostrecent.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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('Audio nick', validators=[validators.required()],
  7. description='A simple name to recognize this audio')
  8. path = AutocompleteStringField('dl-suggested-dirs',
  9. 'Path', validators=[validators.required()],
  10. description='Directory to pick file from')
  11. maxage = StringField('Max age',
  12. validators=[validators.required()],
  13. description='in seconds, or human-readable '
  14. '(like 9w3d12h)')
  15. submit = SubmitField('Submit')
  16. def validate_maxage(self, field):
  17. try:
  18. int(field.data)
  19. except ValueError:
  20. if timeparse(field.data) is None:
  21. raise ValidationError("maxage must either be a number "
  22. "(in seconds) or a human-readable "
  23. "string like '1h2m' or '1d12h'")
  24. def populate_from_audiospec(self, audiospec):
  25. if 'nick' in audiospec:
  26. self.nick.data = audiospec['nick']
  27. if 'path' in audiospec:
  28. self.path.data = audiospec['path']
  29. if 'maxage' in audiospec:
  30. self.maxage.data = audiospec['maxage']
  31. def audio_receive(form):
  32. return {
  33. 'kind': 'mostrecent',
  34. 'nick': form.nick.data,
  35. 'path': form.path.data,
  36. 'maxage': form.maxage.data,
  37. 'howmany': 1
  38. }