Search code examples
pythondjangopython-imaging-librarysorl-thumbnail

TypeError using sorl-thumbnail and Pillow


im using sorl-thumbnail for Django and I found a bug:

Internal Server Error: /history/company/
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 111, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py", line 22, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/srv/mysite/mysite/mysite/history/views.py", line 39, in company_history_view
    context_instance=RequestContext(request),
  File "/usr/local/lib/python2.7/dist-packages/django/shortcuts.py", line 23, in render_to_response
    return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
  File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 178, in render_to_string
    return t.render(context_instance)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 148, in render
    return self._render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 142, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 126, in render
    return compiled_parent._render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 142, in _render
    return self.nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/loader_tags.py", line 65, in render
    result = block.nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py", line 201, in render
    nodelist.append(node.render(context))
  File "/usr/local/lib/python2.7/dist-packages/django/template/defaulttags.py", line 312, in render
    return nodelist.render(context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/base.py", line 844, in render
    bit = self.render_node(node, context)
  File "/usr/local/lib/python2.7/dist-packages/django/template/debug.py", line 80, in render_node
    return node.render(context)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/templatetags/thumbnail.py", line 58, in render
    return self._render(context)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/templatetags/thumbnail.py", line 136, in _render
    thumbnail = get_thumbnail(file_, geometry, **options)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail
    return default.backend.get_thumbnail(file_, geometry_string, **options)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/base.py", line 118, in get_thumbnail
    thumbnail)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/base.py", line 151, in _create_thumbnail
    default.engine.write(image, options, thumbnail)
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/engines/base.py", line 142, in write
    progressive=progressive
  File "/usr/local/lib/python2.7/dist-packages/sorl/thumbnail/engines/pil_engine.py", line 223, in _get_raw_data
    image.save(bf, **params)
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 1685, in save
    save_handler(self, fp, filename)
  File "/usr/local/lib/python2.7/dist-packages/PIL/JpegImagePlugin.py", line 696, in _save
    ImageFile._save(im, fp, [("jpeg", (0, 0)+im.size, 0, rawmode)], bufsize)
  File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 473, in _save
    e = Image._getencoder(im.mode, e, a, im.encoderconfig)
  File "/usr/local/lib/python2.7/dist-packages/PIL/Image.py", line 430, in _getencoder
    return encoder(mode, *args + extra)
TypeError: integer argument expected, got float

I don't know if it's a sorl-thumbnail bug or a PILLOW bug. I also dont know which parameter failed. How can I figure this out? Should I start debugging?

Thanks!

Edit 1:

Started debbugin and the last parameters are:

encoder = <built-in function jpeg_encoder>
args    = ('RGB',)
mode = 'RGB'
encoder_name = 'jpeg'
extra = (95, True, 0, True, 0, 0.0, 0.0, -1, None, '', '')

Edit 2: In /usr/local/lib/python2.7/dist-packages/PIL/Image.py in save at line 1685: save_handler(self, fp, filename) - parameter are:

fp = <cStringIO.StringO object at 0x7f0d4f3ae688>
format = 'JPEG'
self = <PIL.Image.Image image mode=RGB size=75x21 at 0x7F0D4F2079E0>
filename = ''
ext = ''
params = {'compression': 0, 'dpi': (0.0, 0.0),'optimize': 1,  'progressive': True, 'quality': 95}
close = 0
save_handler = <function _save at 0x7f0d4f13d230>

They look normal to me, maybe is a PILLOW bug.


Solution

  • Found the reason:

    File Type: PC bitmap, Windows 3.x format, 285 x 78 x 24 MIME Type: image/x-ms-bmp Suggested file extension(s): bmp

    The file is a BMP, not a JPG.

    Sorry.