def validate(self, instance, value): """Checks if value is an open PNG file, valid filename, or png.Image Returns an open bytestream of the image """ # Pass if already validated if getattr(value, '__valid__', False): return value # Validate that value is PNG if isinstance(value, png.Image): pass else: value = super(ImagePNG, self).validate(instance, value) try: png.Reader(value).validate_signature() except png.FormatError: self.error(instance, value, extra='Open file is not PNG.') value.seek(0) # Write input to new bytestream output = BytesIO() output.name = self.filename output.__valid__ = True if isinstance(value, png.Image): value.save(output) else: fid = value fid.seek(0) output.write(fid.read()) fid.close() output.seek(0) return output
def validate(self, instance, value): """Checks if value is an open PNG file, valid filename, or png.Image Returns an open bytestream of the image """ # Pass if already validated if getattr(value, '__valid__', False): return value # Validate that value is PNG if isinstance(value, png.Image): pass else: value = super(ImagePNG, self).validate(instance, value) try: png.Reader(value).validate_signature() except png.FormatError: self.error(instance, value, extra='Open file is not PNG.') value.seek(0) # Write input to new bytestream output = BytesIO() output.name = self.filename output.__valid__ = True if isinstance(value, png.Image): value.write(output) else: fid = value fid.seek(0) output.write(fid.read()) fid.close() output.seek(0) return output