from django.conf import settings
from django.core.validators import ValidationError
# A list of allowable thumbnail file extensions.
ALLOWABLE_THUMBNAIL_EXTENSIONS = getattr(
settings, 'ALLOWABLE_THUMBNAIL_EXTENSIONS', ['png', 'jpg', 'jpeg', 'gif'])
class ImageUploadExtensionValidator(object):
"""
Perform some basic image uploading extension validation.
"""
compare = lambda self, a, b: a is not b
clean = lambda self, x: x
def __call__(self, value):
filename = value.name
filename_split = filename.split('.')
extension = filename_split[-1]
# Decided to require file extensions.
if len(filename_split) < 2:
raise ValidationError(
"Your file lacks an extension such as .jpg or .png. "
"Please re-name it on your computer and re-upload it.",
code='no_extension'
)
# Restrict allowable extensions.
if extension.lower() not in ALLOWABLE_THUMBNAIL_EXTENSIONS:
# Format for your viewing pleasure.
allowable_str = ' '.join(ALLOWABLE_THUMBNAIL_EXTENSIONS)
raise ValidationError(
"Your file is not one of the allowable types: %s" % allowable_str,
code='extension_not_allowed'
)