def from_native(self, image_url): try: res = requests.get( image_url, headers={'User-Agent': settings.MARKETPLACE_USER_AGENT}) except: raise exceptions.ParseError( _('Invalid URL %(url)s').format(url=image_url)) # Check response code from image download. if res.status_code != 200: raise exceptions.ParseError( _('Error downloading image from %(url)s').format( url=image_url)) # Validate the image. try: Image.open(StringIO.StringIO(res.content)) except IOError: raise exceptions.ParseError( _('Image from %(url)s could not be parsed').format( url=image_url)) # Encode image to base64. img_data = StringIO.StringIO(res.content) img_data_uri = ('data:image/jpg;base64,' + img_data.read().encode('base64')) # Return image file object and hash. return DataURLImageField().from_native(img_data_uri)
def update(self, request, *a, **kw): obj = self.get_object() try: img = DataURLImageField().from_native(request.read()) except ValidationError: return Response(status=400) i = Image.open(img) with storage.open(obj.image_path(), 'wb') as f: i.save(f, 'png') return Response(status=204)
def update(self, request, *args, **kwargs): obj = self.get_object() try: img = DataURLImageField().from_native(request.read()) except ValidationError: return Response(status=status.HTTP_400_BAD_REQUEST) i = Image.open(img) with storage.open(obj.image_path(), 'wb') as f: i.save(f, 'png') obj.update(has_image=True) return Response(status=status.HTTP_204_NO_CONTENT)
def update(self, request, *args, **kwargs): obj = self.get_object() try: img, hash_ = DataURLImageField().from_native(request.read()) except ValidationError: return Response(status=status.HTTP_400_BAD_REQUEST) i = Image.open(img) with storage.open(obj.image_path(), 'wb') as f: i.save(f, 'png') # Store the hash of the original image data sent. obj.update(image_hash=hash_) return Response(status=status.HTTP_204_NO_CONTENT)
def test_from_native(self): d = DataURLImageField().from_native('data:image/gif;base64,' + IMAGE_DATA) eq_(d.read(), IMAGE_DATA.decode('base64'))
def test_from_native(self): d = DataURLImageField().from_native("data:image/gif;base64," + IMAGE_DATA) eq_(d.read(), IMAGE_DATA.decode("base64"))
def test_from_native(self): data, hash_ = DataURLImageField().from_native( 'data:image/gif;base64,' + IMAGE_DATA) eq_(hash_, hashlib.md5(IMAGE_DATA.decode('base64')).hexdigest()[:8]) eq_(data.read(), IMAGE_DATA.decode('base64'))
def test_from_native(self): data, hash_ = DataURLImageField().from_native("data:image/gif;base64," + IMAGE_DATA) eq_(hash_, hashlib.md5(IMAGE_DATA.decode("base64")).hexdigest()[:8]) eq_(data.read(), IMAGE_DATA.decode("base64"))