2017-01-19 2 views
0

私はこのようなViewありますジャンゴREST :: AssertionErrorが:無効な画像形式

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

model

def set_logo(self, image_data): 
    .... 
    try: 
     image = Image.open(image_data) # <-- fails 

そして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') 

となって:

てAssertionError:無効な画像形式

EDIT:私はimage = Image.open(image_data)をデバッグするとき、私がいることを参照してください。ここでは

(Pdb) image_data.file.read() 
'' 

答えて

0

私はテスト目的のためにイメージを作成する方法ですが、私は、SOにこの解決策を見つけました多分それはあなたを助けます。

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') 
関連する問題