class RedisFilesTest(TestCase): def setUp(self): self.source_name = "tests.png" self.size = "small" self.instance = TestModel.objects.create() with open('thumbnails/tests/tests.png', 'rb') as image_file: self.instance.avatar = File(image_file) self.instance.save() self.backend = RedisBackend() self.instance.avatar.thumbnails.metadata_backend = self.backend self.avatar_folder = \ os.path.join(self.instance.avatar.storage.temporary_location, conf.BASE_DIR, 'avatars') self.instance.avatar.thumbnails.small self.basename = os.path.basename(self.instance.avatar.path) self.filename, self.ext = os.path.splitext(self.basename) def tearDown(self): key = self.backend.get_thumbnail_key(self.instance.avatar.name) self.backend.redis.delete(key) self.instance.avatar.storage.delete_temporary_storage() super(RedisFilesTest, self).tearDown() def test_delete_with_thumbnails(self): avatar_path = self.instance.avatar.path # ensure file still exists self.assertTrue(os.path.exists(avatar_path)) key = self.backend.get_thumbnail_key(self.instance.avatar.name) self.assertTrue(self.backend.redis.exists(key)) self.instance.avatar.delete(with_thumbnails=True) # image file is deleted self.assertFalse(os.path.exists(avatar_path)) # thumbnails and their metadata are also deleted self.assertEqual(len(os.listdir(self.avatar_folder)), 0) self.assertFalse(self.backend.redis.exists(key)) def test_delete_all(self): thumbnails = self.instance.avatar.thumbnails key = self.backend.get_thumbnail_key(self.instance.avatar.name) self.assertTrue(self.backend.redis.exists(key)) thumbnails.delete_all() # thumbnails and their metadata are deleted self.assertEqual(len(os.listdir(self.avatar_folder)), 0) self.assertFalse(self.backend.redis.exists(key))
def test_populate_redis_backend_with_size(self): TestModel.objects.all().delete() for i in range(1, 10): test_objc = TestModel.objects.create() with open('thumbnails/tests/tests.png', 'rb') as image_file: test_objc.avatar = File(image_file) test_objc.save() # create all thumbnails objects = TestModel.objects.all() images = [] for obj in objects: obj.avatar.thumbnails.metadata_backend = RedisBackend() for size in conf.SIZES: obj.avatar.thumbnails.get(size) images.append(obj.avatar) # reset _thumbnails for image in images: image.thumbnails._thumbnails = {} # Adding format image run correctly fetch_thumbnails(images, ['small', 'large', 'source_with_format']) for image in images: thumbnails = image.thumbnails sizes = [size for size in thumbnails._thumbnails.keys()] for size in sizes: # Make sure all thumbnail sizes have the right value self.assertEqual(thumbnails._thumbnails[size].name, thumbnails.get(size).name) self.assertEqual(set(sizes), set(['small', 'large', 'source_with_format']))
def setUp(self): self.source_name = "tests.png" self.size = "small" self.instance = TestModel.objects.create() with open('thumbnails/tests/tests.png', 'rb') as image_file: self.instance.avatar = File(image_file) self.instance.save() self.backend = RedisBackend() self.instance.avatar.thumbnails.metadata_backend = self.backend self.avatar_folder = \ os.path.join(self.instance.avatar.storage.temporary_location, conf.BASE_DIR, 'avatars') self.instance.avatar.thumbnails.small self.basename = os.path.basename(self.instance.avatar.path) self.filename, self.ext = os.path.splitext(self.basename)
def test_fetch_redis_backend(self): TestModel.objects.all().delete() for i in range(1, 10): test_objc = TestModel.objects.create() with open('thumbnails/tests/tests.png', 'rb') as image_file: test_objc.avatar = File(image_file) test_objc.save() images = [] objects = TestModel.objects.all() # test pre-created thumbnails for obj in objects: obj.avatar.thumbnails.metadata_backend = RedisBackend() images.append(obj.avatar) # make sure cache is still empty, so it can be generated freshly fetch_thumbnails(images) for image in images: self.assertEqual(image.thumbnails._thumbnails, {}) # create all thumbnails for image in images: for size in conf.SIZES: image.thumbnails.get(size) # reset _thumbnails for image in images: image.thumbnails._thumbnails = {} fetch_thumbnails(images) for image in images: thumbnails = image.thumbnails sizes = [size for size in thumbnails._thumbnails.keys()] for size in sizes: # Make sure all thumbnail sizes have the right value self.assertEqual(thumbnails._thumbnails[size].name, thumbnails.get(size).name) self.assertEqual(set(sizes), set(conf.SIZES)) # Fetch for format image run correctly fetch_thumbnails(images, ['source_with_format']) for image in images: thumbnails = image.thumbnails sizes = [size for size in thumbnails._thumbnails.keys()] self.assertEqual(thumbnails._thumbnails['source_with_format'].name, thumbnails.get('source_with_format').name) self.assertEqual(sizes, ['source_with_format']) self.assertEqual( os.path.splitext( thumbnails._thumbnails['source_with_format'].name)[1], '.webp')
def setUp(self): self.backend = RedisBackend() self.redis = StrictRedis()
class RedisBackendTest(TestCase): def setUp(self): self.backend = RedisBackend() self.redis = StrictRedis() def test_get_source_key(self): self.assertEqual(self.backend.get_source_key("a.jpg"), "djthumbs-test:sources:a.jpg") def test_get_thumbnail_key(self): self.assertEqual(self.backend.get_thumbnail_key("a.jpg"), "djthumbs-test:thumbnails:a.jpg") def test_add_delete_source(self): source_name = "test-thumbnail.jpg" source_key = self.backend.get_source_key(source_name) self.backend.add_source(source_name) self.assertTrue(self.redis.hexists(source_key, source_name)) self.backend.delete_source(source_name) self.assertFalse(self.redis.hexists(source_key, source_name)) def test_get_source(self): source_name = "test-thumbnail.jpg" source_key = self.backend.get_source_key(source_name) self.redis.hset(source_key, source_name, source_name) self.assertEqual(self.backend.get_source(source_name), source_name) # Delete Source self.redis.hdel(source_key, source_name) def test_add_delete_thumbnail(self): source_name = "test-thumbnail.jpg" size = "small" thumbnail_key = self.backend.get_thumbnail_key(source_name) self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, size, "test-thumbnail_small.jpg") self.assertTrue(self.redis.hexists(thumbnail_key, size)) self.backend.delete_thumbnail(source_name, size) self.assertFalse(self.redis.hexists(thumbnail_key, size)) # Delete Source self.redis.hdel(self.backend.get_source_key(source_name), source_name) def test_get_thumbnail(self): source_name = "test-thumbnail.jpg" self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, "small", "test-thumbnail_small.jpg") self.assertEqual( self.backend.get_thumbnail(source_name, "small"), ImageMeta(source_name, "test-thumbnail_small.jpg", "small"), ) self.backend.add_thumbnail(source_name, "large", "test-thumbnail_large.jpg") expected = ["test-thumbnail_large.jpg", "test-thumbnail_small.jpg"] result = [image_meta.name for image_meta in self.backend.get_thumbnails(source_name)] self.assertEqual(result.sort(), expected.sort()) # Delete Source & Thumbnails thumbnail_key = self.backend.get_thumbnail_key(source_name) self.redis.hdel(self.backend.get_source_key(source_name), source_name) self.redis.hdel(thumbnail_key, "small") self.redis.hdel(thumbnail_key, "large")
class RedisBackendTest(TestCase): def setUp(self): self.backend = RedisBackend() self.redis = StrictRedis() def test_get_source_key(self): self.assertEqual(self.backend.get_source_key('a.jpg'), 'djthumbs-test:sources:a.jpg') def test_get_thumbnail_key(self): self.assertEqual(self.backend.get_thumbnail_key('a.jpg'), 'djthumbs-test:thumbnails:a.jpg') def test_add_delete_source(self): source_name = 'test-thumbnail.jpg' source_key = self.backend.get_source_key(source_name) self.backend.add_source(source_name) self.assertTrue(self.redis.hexists(source_key, source_name)) self.backend.delete_source(source_name) self.assertFalse(self.redis.hexists(source_key, source_name)) def test_get_source(self): source_name = 'test-thumbnail.jpg' source_key = self.backend.get_source_key(source_name) self.redis.hset(source_key, source_name, source_name) self.assertEqual(self.backend.get_source(source_name), source_name) # Delete Source self.redis.hdel(source_key, source_name) def test_add_delete_thumbnail(self): source_name = 'test-thumbnail.jpg' size = 'small' thumbnail_key = self.backend.get_thumbnail_key(source_name) self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, size, 'test-thumbnail_small.jpg') self.assertTrue(self.redis.hexists(thumbnail_key, size)) self.backend.delete_thumbnail(source_name, size) self.assertFalse(self.redis.hexists(thumbnail_key, size)) # Delete Source self.redis.hdel(self.backend.get_source_key(source_name), source_name) def test_get_thumbnail(self): source_name = 'test-thumbnail.jpg' self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, 'small', 'test-thumbnail_small.jpg') self.assertEqual(self.backend.get_thumbnail(source_name, 'small'), ImageMeta(source_name, 'test-thumbnail_small.jpg', 'small')) self.backend.add_thumbnail(source_name, 'large', 'test-thumbnail_large.jpg') expected = ['test-thumbnail_large.jpg', 'test-thumbnail_small.jpg'] result = [image_meta.name for image_meta in self.backend.get_thumbnails(source_name)] self.assertEqual(result.sort(), expected.sort()) # Delete Source & Thumbnails thumbnail_key = self.backend.get_thumbnail_key(source_name) self.redis.hdel(self.backend.get_source_key(source_name), source_name) self.redis.hdel(thumbnail_key, 'small') self.redis.hdel(thumbnail_key, 'large')
class RedisBackendTest(TestCase): def setUp(self): self.backend = RedisBackend() self.redis = StrictRedis() def test_get_source_key(self): self.assertEqual(self.backend.get_source_key('a.jpg'), 'djthumbs-test:sources:a.jpg') def test_get_thumbnail_key(self): self.assertEqual(self.backend.get_thumbnail_key('a.jpg'), 'djthumbs-test:thumbnails:a.jpg') def test_add_delete_source(self): source_name = 'test-thumbnail.jpg' source_key = self.backend.get_source_key(source_name) self.backend.add_source(source_name) self.assertTrue(self.redis.hexists(source_key, source_name)) self.backend.delete_source(source_name) self.assertFalse(self.redis.hexists(source_key, source_name)) def test_get_source(self): source_name = 'test-thumbnail.jpg' source_key = self.backend.get_source_key(source_name) self.redis.hset(source_key, source_name, source_name) self.assertEqual(self.backend.get_source(source_name), source_name) # Delete Source self.redis.hdel(source_key, source_name) def test_add_delete_thumbnail(self): source_name = 'test-thumbnail.jpg' size = 'small' thumbnail_key = self.backend.get_thumbnail_key(source_name) self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, size, 'test-thumbnail_small.jpg') self.assertTrue(self.redis.hexists(thumbnail_key, size)) self.backend.delete_thumbnail(source_name, size) self.assertFalse(self.redis.hexists(thumbnail_key, size)) # Delete Source self.redis.hdel(self.backend.get_source_key(source_name), source_name) def test_get_thumbnail(self): source_name = 'test-thumbnail.jpg' self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, 'small', 'test-thumbnail_small.jpg') self.assertEqual( self.backend.get_thumbnail(source_name, 'small'), ImageMeta(source_name, 'test-thumbnail_small.jpg', 'small')) self.backend.add_thumbnail(source_name, 'large', 'test-thumbnail_large.jpg') expected = ['test-thumbnail_large.jpg', 'test-thumbnail_small.jpg'] result = [ image_meta.name for image_meta in self.backend.get_thumbnails(source_name) ] # sort is replacing the variable in place, not returning new value, it will always return None result.sort() expected.sort() self.assertEqual(result, expected) # Delete Source & Thumbnails thumbnail_key = self.backend.get_thumbnail_key(source_name) self.redis.hdel(self.backend.get_source_key(source_name), source_name) self.redis.hdel(thumbnail_key, 'small') self.redis.hdel(thumbnail_key, 'large') def test_flush_thumbnails(self): source_name = 'test-thumbnail.jpg' thumbnail_key = self.backend.get_thumbnail_key(source_name) self.backend.add_source(source_name) self.backend.add_thumbnail(source_name, "small", 'test-thumbnail_small.jpg') self.backend.add_thumbnail(source_name, "default", 'test-thumbnail_default.jpg') self.backend.flush_thumbnails(source_name) self.assertFalse(self.redis.exists(thumbnail_key))