from wtforms.validators import AnyOf, Regexp, ValidationError from src.constants import ANDROID, IOS class VersionValidator(Regexp): message = "Invalid version format." def __init__(self, regex=r"^((\d+)\.(\d+)\.(\d+))$"): super().__init__(regex=regex, message=self.message) class OsValidator(AnyOf): message = "Unsupported OS." def __init__(self, values=(IOS, ANDROID)): super().__init__(values=values, message=self.message) def __call__(self, form, field): fields_values = [field.data] if not isinstance(field.data, list) else field.data for value in fields_values: if value in self.values: continue message = self.message if message is None: message = field.gettext("Invalid value, must be one of: %(values)s.") raise ValidationError(message % dict(values=self.values_formatter(self.values)))