Commit d66cc63d authored by Serge S. Koval's avatar Serge S. Koval

Fixed #791 - Validators support for FileUploadField and ImageUploadField

parent 2ff17f90
...@@ -179,11 +179,13 @@ class FileUploadField(fields.StringField): ...@@ -179,11 +179,13 @@ class FileUploadField(fields.StringField):
filename.rsplit('.', 1)[1].lower() in filename.rsplit('.', 1)[1].lower() in
map(lambda x: x.lower(), self.allowed_extensions)) map(lambda x: x.lower(), self.allowed_extensions))
def _is_uploaded_file(self, data):
return (data
and isinstance(data, FileStorage)
and data.filename)
def pre_validate(self, form): def pre_validate(self, form):
if (self.data if self._is_uploaded_file(self.data) and not self.is_file_allowed(self.data.filename):
and self.data.filename
and isinstance(self.data, FileStorage)
and not self.is_file_allowed(self.data.filename)):
raise ValidationError(gettext('Invalid file extension')) raise ValidationError(gettext('Invalid file extension'))
def process(self, formdata, data=unset_value): def process(self, formdata, data=unset_value):
...@@ -194,6 +196,15 @@ class FileUploadField(fields.StringField): ...@@ -194,6 +196,15 @@ class FileUploadField(fields.StringField):
return super(FileUploadField, self).process(formdata, data) return super(FileUploadField, self).process(formdata, data)
def process_formdata(self, valuelist):
if self._should_delete:
self.data = None
elif valuelist:
data = valuelist[0]
if self._is_uploaded_file(data):
self.data = data
def populate_obj(self, obj, name): def populate_obj(self, obj, name):
field = getattr(obj, name, None) field = getattr(obj, name, None)
if field: if field:
...@@ -203,7 +214,7 @@ class FileUploadField(fields.StringField): ...@@ -203,7 +214,7 @@ class FileUploadField(fields.StringField):
setattr(obj, name, None) setattr(obj, name, None)
return return
if self.data and self.data.filename and isinstance(self.data, FileStorage): if self._is_uploaded_file(self.data):
if field: if field:
self._delete_file(field) self._delete_file(field)
...@@ -357,9 +368,7 @@ class ImageUploadField(FileUploadField): ...@@ -357,9 +368,7 @@ class ImageUploadField(FileUploadField):
def pre_validate(self, form): def pre_validate(self, form):
super(ImageUploadField, self).pre_validate(form) super(ImageUploadField, self).pre_validate(form)
if (self.data and if self._is_uploaded_file(self.data):
isinstance(self.data, FileStorage) and
self.data.filename):
try: try:
self.image = Image.open(self.data) self.image = Image.open(self.data)
except Exception as e: except Exception as e:
...@@ -396,7 +405,7 @@ class ImageUploadField(FileUploadField): ...@@ -396,7 +405,7 @@ class ImageUploadField(FileUploadField):
self._save_image(image, self._get_path(filename), format) self._save_image(image, self._get_path(filename), format)
else: else:
data.seek(0) data.seek(0)
data.save( self._get_path(filename) ) data.save(self._get_path(filename))
self._save_thumbnail(data, filename, format) self._save_thumbnail(data, filename, format)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment