from flask_wtf.file import FileField, FileAllowed, FileRequired from wtforms_alchemy.validators import ValidationError from werkzeug.utils import secure_filename from core_notifications.helpers.forms import BaseForm from core_notifications.models import Image class ImageForm(BaseForm): file = FileField( "file", validators=[ FileRequired(), FileAllowed( tuple("jpg jpe jpeg png gif svg bmp webp".split()), "Images only!", ), ], ) def validate_file(self, file): filename = secure_filename(file.data.filename) if Image.query.filter(Image.name == filename).first(): raise ValidationError("File with this name already exists!") @property def flat_errors(self): errors = [] for e in self.errors.values(): if isinstance(e, list): errors.extend(e) else: errors.append(e) return errors