python - Django + solr.缩略图 : get_thumbnail() fails in test environment

标签 python django testing sorl-thumbnail

我正在尝试找到一种方法,在使用 Django 和 sorl-thumbnailget_thumbnail() 方法时如何测试缩略图生成。

环境:

Django==1.5.5
Pillow==2.1.0
sorl-thumbnail==11.12

简化的测试代码(在测试环境中运行):

from StringIO import StringIO
from PIL import Image

from django.conf import settings
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.db import models
from sorl.thumbnail import get_thumbnail

# simple class with ImageField
class User(models.Model):
    avatar = models.ImageField(upload_to='avatars', default=None, null=True, blank=True)

    def get_thumbnail_uri(self):
        avatar_thumbnail = get_thumbnail(self.avatar, '100x100')

        return avatar_thumbnail.url

# make sure we're using in-memory test env.
assert settings.THUMBNAIL_STORAGE  == 'inmemorystorage.InMemoryStorage'
assert settings.DEFAULT_FILE_STORAGE == 'inmemorystorage.InMemoryStorage'

# prepare image
fake_file = StringIO()

picture = Image.new(mode='RGBA', size=(500, 500), color=(255, 0, 0, 0))
picture.save(fake_file, 'JPEG')

fake_file.name = 'test.jpg'
fake_file.seek(0)

uploaded_image = InMemoryUploadedFile(fake_file, field_name=None, name='test.jpg',
                                      content_type='image/jpeg', size=fake_file.len,
                                      charset=None)

# add image to user
u = User()
u.avatar = uploaded_image

assert u.get_thumbnail_uri() is not None

上面的代码总是在最后一行失败:

Traceback (most recent call last):
  File "/vagrant/path/to/file.py", line 1440, in test_stackprep
    assert u.get_thumbnail_uri() is not None
  File "/vagrant/path/to/file.py", line 1413, in get_thumbnail_uri
    avatar_thumbnail = get_thumbnail(self.avatar, '100x100')
  File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/shortcuts.py", line 8, in get_thumbnail
    return default.backend.get_thumbnail(file_, geometry_string, **options)
  File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/base.py", line 56, in get_thumbnail
    source_image = default.engine.get_image(source)
  File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/sorl/thumbnail/engines/pil_engine.py", line 13, in get_image
    return Image.open(buf)
  File "/home/vagrant/.virtualenv/appname/local/lib/python2.7/site-packages/PIL/Image.py", line 2008, in open
    raise IOError("cannot identify image file")
IOError: cannot identify image file

我假设 Django 或 sorl-thumbnail 在运行测试时从 inmemorystorage 中退出。我已经研究了很长时间,但除了直接在文件系统上测试东西(我想避免)之外,我没有找到任何有效的配置。

有人设法让 sorl 的 get_thumbnail() 方法在测试中工作吗?

谢谢。

最佳答案

版本 11.12 是今天 PyPI 上的最新版本,已有 2 年历史。 repo 中有 12.0 版本,应该可以使用。它不在 PyPI 上,因为有 change of maintainers我猜他们还没有机会这样做。

我已经尝试过 master 版本,它在你的示例中工作正常。

关于python - Django + solr.缩略图 : get_thumbnail() fails in test environment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20522865/

相关文章:

python - django - 如何在模板中插入上传文件的内容?

django facebook 应用程序 : Testing with Test Users?

java - Spring Boot Controller 测试,空指针异常

python - 使用 html.parser (Python) 提取文本/解析文本

python - 当我使用 selenium 爬取网站时出现 python UnicodeEncodeError

python - 存储 Django 模型类型和从 SQL 数据库高效读取的最佳方式

c# - 测试继承的 C# 类

python - 保留满足两个或多个条件的 numpy 数组的值

python - 当参数在方括号中时,文档中的含义是什么?

python - 有没有类似 Lisp 的 SLIME for Python/Django 的东西?