From c55b14e6c4ed2f6b8cc5fba65370029b8b5fbf1b Mon Sep 17 00:00:00 2001 From: Jaisen Mathai Date: Tue, 12 Jan 2016 20:44:15 -0800 Subject: [PATCH] gh-74 Check for existing EXIF field before writing and create if needed. Add test case. --- elodie/media/photo.py | 9 +++++++-- elodie/tests/helper.py | 1 - elodie/tests/media/photo_test.py | 22 ++++++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/elodie/media/photo.py b/elodie/media/photo.py index e1fd499..0dd20c1 100644 --- a/elodie/media/photo.py +++ b/elodie/media/photo.py @@ -171,8 +171,13 @@ class Photo(Media): exif_metadata = pyexiv2.ImageMetadata(source) exif_metadata.read() - exif_metadata['Exif.Photo.DateTimeOriginal'].value = time - exif_metadata['Exif.Image.DateTime'].value = time + # Writing exif with pyexiv2 differs if the key already exists so we + # handle both cases here. + for key in ['Exif.Photo.DateTimeOriginal', 'Exif.Image.DateTime']: + if(key in exif_metadata): + exif_metadata[key].value = time + else: + exif_metadata[key] = pyexiv2.ExifTag(key, time) exif_metadata.write() return True diff --git a/elodie/tests/helper.py b/elodie/tests/helper.py index d9176db..023726c 100644 --- a/elodie/tests/helper.py +++ b/elodie/tests/helper.py @@ -1,7 +1,6 @@ import hashlib import os import random -import shutil import string import tempfile diff --git a/elodie/tests/media/photo_test.py b/elodie/tests/media/photo_test.py index 9db42f3..41809b6 100644 --- a/elodie/tests/media/photo_test.py +++ b/elodie/tests/media/photo_test.py @@ -116,6 +116,28 @@ def test_is_not_valid(): assert not photo.is_valid() +def test_set_date_taken_with_missing_datetimeoriginal(): + # When datetimeoriginal (or other key) is missing we have to add it gh-74 + # https://github.com/jmathai/elodie/issues/74 + temporary_folder, folder = helper.create_working_folder() + + origin = '%s/photo.jpg' % folder + shutil.copyfile(helper.get_file('no-exif.jpg'), origin) + + photo = Photo(origin) + status = photo.set_date_taken(datetime.datetime(2013, 9, 30, 7, 6, 5)) + + assert status == True, status + + photo_new = Photo(origin) + metadata = photo_new.get_metadata() + + date_taken = metadata['date_taken'] + + shutil.rmtree(folder) + + assert date_taken == (2013, 9, 30, 7, 6, 5, 0, 273, 0), metadata['date_taken'] + def test_set_date_taken(): temporary_folder, folder = helper.create_working_folder()