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'
            )
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 deconstruct(self):
        path = "athumb.validators.ImageUploadExtensionValidator"
        args = []
        kwargs = {}
        return (path, args, kwargs)


    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'
            )
Make ImageUploadExtensionValidator work with django 1.7 migrations
Make ImageUploadExtensionValidator work with django 1.7 migrations

  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 deconstruct(self):
+         path = "athumb.validators.ImageUploadExtensionValidator"
+         args = []
+         kwargs = {}
+         return (path, args, kwargs)
+ 
  
      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'
              )
Make ImageUploadExtensionValidator work with django 1.7 migrations
## Code Before:
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'
            )
## Instruction:
Make ImageUploadExtensionValidator work with django 1.7 migrations
## Code After:
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 deconstruct(self):
        path = "athumb.validators.ImageUploadExtensionValidator"
        args = []
        kwargs = {}
        return (path, args, kwargs)


    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'
            )