def test_get_info(self): from pygall.lib.imageprocessing import get_info from datetime import datetime from contextlib import nested from mock import patch with nested( patch('pygall.lib.imageprocessing.get_exif'), patch('pygall.lib.imageprocessing.img_md5'), patch('pygall.lib.imageprocessing.get_size'), ) as (mock_get_exif, mock_img_md5, mock_get_size): mock_get_exif.return_value = { 'DateTimeOriginal': '2000:12:31 23:00:00' } mock_img_md5.return_value = 'dummy_md5sum' mock_get_size.return_value = 'dummy_size' info = get_info('python.jpg') self.assertEqual(info, { 'date': datetime(2000, 12, 31, 23, 0, 0), 'ext': 'jpeg', 'md5sum': 'dummy_md5sum', 'size': 'dummy_size', }) # test date:None if invalid date mock_get_exif.return_value = { 'DateTimeOriginal': 'ERROR' } info = get_info('python.jpg') self.assertEqual(info['date'], None) # test that existing info param is given priority over calculation info = get_info('python.jpg', { 'date': 'fake_date', 'ext': 'fake_ext', 'md5sum': 'fake_md5sum', 'size': 'fake_size', }) self.assertEqual(info, { 'date': 'fake_date', 'ext': 'fake_ext', 'md5sum': 'fake_md5sum', 'size': 'fake_size', })
def after_photo_sync(context, event): if context.time and context.md5sum: return uri = context.uri info = get_info(os.path.join( event.request.registry.settings['photos_dir'], ORIG, uri)) if not context.time: context.time = info['date'] log.debug("context.time = %s" % info['date']) if not context.md5sum: context.md5sum = info['md5sum'] log.debug("context.md5sum = %s" % info['md5sum'])
def test_get_info_fileobj(self): from pygall.lib.imageprocessing import get_info from datetime import datetime with open('python.jpg', 'rb') as src: loc = src.tell() info = get_info(src) self.assertEqual(info, { 'date': datetime(2011, 11, 27, 15, 8, 47), 'ext': 'jpeg', 'md5sum': u'065c540533e7621f6fc37fb9ab297b3f', 'size': 63205 }) self.assertEqual(src.tell(), loc)