PCv5/app/utils/tag_field.py

25 lines
819 B
Python

from wtforms.fields.simple import StringField
from wtforms.validators import ValidationError
from app.models.tag import TagInformation
def tag_validator(form, field):
all_tags = TagInformation.all_tags()
for name in field.selected_tags():
if all(ti.id != name for ctgy in all_tags for ti in all_tags[ctgy]):
raise ValidationError(f"Tag inconnu: {name}")
return True
class TagListField(StringField):
def __init__(self, title, *args, **kwargs):
validators = kwargs.get("validators", []) + [tag_validator]
super().__init__(
title,
*args,
**kwargs,
validators=[tag_validator])
def selected_tags(self):
raw = map(lambda x: x.strip(), self.data.split(","))
return [name for name in raw if name != ""]