Reputation: 14134
I have View
like this:
class LogoView(APIView):
permission_classes = [UserWriteSafeReadPermission]
def get_object(self):
return Config.objects.get(domain=self.request.domain)
...
def put(self, request, pk=None, format=None, **kwargs):
config = self.get_object()
try:
image = request.FILES['image']
config.set_logo(image)
return Response(status=status.HTTP_201_CREATED)
except KeyError:
return Response(status=status.HTTP_400_BAD_REQUEST, data={'detail': 'Expected image.'})
A model
:
def set_logo(self, image_data):
....
try:
image = Image.open(image_data) # <-- fails
And a unittest
:
def test_foo(self):
self.authenticate(USER_PERMISSION_WRITE)
from PIL import Image
import tempfile
image = Image.new('RGB', (100, 100))
tmp_file = tempfile.NamedTemporaryFile(suffix='.png')
image.save(tmp_file)
response = self.client.put(self.api_reverse('my_url'), {'image': tmp_file}, format='multipart')
And getting:
AssertionError: Invalid image format
EDIT: When I debug image = Image.open(image_data)
, I see that:
(Pdb) image_data.file.read()
''
Upvotes: 0
Views: 162
Reputation: 8897
Here is how I create images for testing purposes, I found this solution in the SO, maybe it helps you.
from StringIO import StringIO
from PIL import Image
.....
def create_image_file(self):
image_file = StringIO()
image = Image.new('RGBA', size=(50, 50), color=(256, 0, 0))
image.save(image_file, 'png')
image_file.seek(0)
return ContentFile(image_file.read(), 'test.png')
Upvotes: 1