audioform_script.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from flask_wtf import Form
  2. from wtforms import StringField, validators, SubmitField, ValidationError
  3. from larigira.formutils import AutocompleteStringField
  4. class ScriptAudioForm(Form):
  5. nick = StringField(
  6. "Audio nick",
  7. validators=[validators.required()],
  8. description="A simple name to recognize this audio",
  9. )
  10. name = AutocompleteStringField(
  11. "dl-suggested-scripts",
  12. "Name",
  13. validators=[validators.required()],
  14. description="filename (NOT path) of the script",
  15. )
  16. args = StringField("Arguments", description='arguments, separated by ";"')
  17. submit = SubmitField("Submit")
  18. def populate_from_audiospec(self, audiospec):
  19. if "nick" in audiospec:
  20. self.nick.data = audiospec["nick"]
  21. if "name" in audiospec:
  22. self.name.data = audiospec["name"]
  23. if "args" in audiospec:
  24. if type(audiospec["args"]) is str: # legacy compatibility
  25. self.args.data = audiospec["args"].replace(" ", ";")
  26. else:
  27. self.args.data = ";".join(audiospec["args"])
  28. def validate_name(self, field):
  29. if "/" in field.data:
  30. raise ValidationError(
  31. "Name cannot have slashes: " "it's a name, not a path"
  32. )
  33. def scriptaudio_receive(form):
  34. return {
  35. "kind": "script",
  36. "nick": form.nick.data,
  37. "name": form.name.data,
  38. "args": form.args.data.split(";"),
  39. }