def validate_input_file(input_file): ''' Validate the submitted input file. This validation has four layers: - extension of the file provided - MIMETYPE of the file provided - size of the image (1600x1200 minimal) - ratio of the image (16:9) :arg input_file: a File object of the candidate submitted/uploaded and for which we want to check that it compliants with our expectations. ''' extension = os.path.splitext(secure_filename( input_file.filename))[1][1:].lower() if extension not in APP.config.get('ALLOWED_EXTENSIONS', []): raise nuancierlib.NuancierException( 'The submitted candidate has the file extension "%s" which is ' 'not an allowed format' % extension) mimetype = input_file.mimetype.lower() if mimetype not in APP.config.get('ALLOWED_MIMETYPES', []): # pragma: no cover raise nuancierlib.NuancierException( 'The submitted candidate has the MIME type "%s" which is ' 'not an allowed MIME type' % mimetype) try: image = Image.open(input_file.stream) except: raise nuancierlib.NuancierException( 'The submitted candidate could not be opened as an Image') width, height = image.size min_width = APP.config.get('PICTURE_MIN_WIDTH', 1600) min_height = APP.config.get('PICTURE_MIN_HEIGHT', 1200) if width < min_width: raise nuancierlib.NuancierException( 'The submitted candidate has a width of %s pixels which is lower' ' than the minimum %s pixels required' % (width, min_width)) if height < min_height: raise nuancierlib.NuancierException( 'The submitted candidate has a height of %s pixels which is lower' ' than the minimum %s pixels required' % (height, min_height))
def validate_input_file(input_file): ''' Validate the submitted input file. This validation has four layers: - extension of the file provided - MIMETYPE of the file provided - portrait or landscape orientation - size of the image (1600x1200 minimal) - ratio of the image (16:9) - not checked by this function, it is only recommended :arg input_file: a File object of the candidate submitted/uploaded and for which we want to check that it compliants with our expectations. ''' extension = os.path.splitext(secure_filename( input_file.filename))[1][1:].lower() if extension not in APP.config.get('ALLOWED_EXTENSIONS', []): raise nuancierlib.NuancierException( 'The submitted candidate has the file extension "%s" which is ' 'not an allowed format' % extension) mimetype = input_file.mimetype.lower() if mimetype not in APP.config.get('ALLOWED_MIMETYPES', []): # pragma: no cover raise nuancierlib.NuancierException( 'The submitted candidate has the MIME type "%s" which is ' 'not an allowed MIME type' % mimetype) try: image = Image.open(input_file.stream) except: raise nuancierlib.NuancierException( 'The submitted candidate could not be opened as an Image') width, height = image.size min_width = APP.config.get('PICTURE_MIN_WIDTH', 1600) min_height = APP.config.get('PICTURE_MIN_HEIGHT', 1200) if width < height: if APP.config.get('ALLOW_PORTRAIT', False): # portrait allowed, turn condition by 90 deg.; width is heigh and # vice versa swap = min_width min_width = min_height min_height = swap else: raise nuancierlib.NuancierException( 'This instance does not support portrait oriented pictures.') if width < min_width: raise nuancierlib.NuancierException( 'The submitted candidate has a width of %s pixels which is lower' ' than the minimum %s pixels required' % (width, min_width)) if height < min_height: raise nuancierlib.NuancierException( 'The submitted candidate has a height of %s pixels which is lower' ' than the minimum %s pixels required' % (height, min_height))