From 82ff1da9449fedf8b1b085b10817c7b5e78c1f6b Mon Sep 17 00:00:00 2001 From: Jaisen Mathai Date: Wed, 14 Oct 2015 21:27:42 -0700 Subject: [PATCH] Updated time parsing to work with different formats --- elodie/media/media.py | 9 ++++++--- elodie/media/photo.py | 31 ------------------------------- tests/scripts/datetime.py | 8 +++++--- 3 files changed, 11 insertions(+), 37 deletions(-) diff --git a/elodie/media/media.py b/elodie/media/media.py index c7aa624..c3b344b 100644 --- a/elodie/media/media.py +++ b/elodie/media/media.py @@ -5,6 +5,7 @@ Media package that handles all video operations # load modules from sys import argv +from datetime import datetime from fractions import Fraction import LatLon import mimetypes @@ -117,9 +118,11 @@ class Media(object): for key in self.exif_map['date_taken']: try: if(key in exif): - seconds_since_epoch = time.mktime(datetime.strptime(str(exif[key].value), '%Y:%m:%d %H:%M:%S').timetuple()) - break; - except: + if(re.match('\d{4}(-|:)\d{2}(-|:)\d{2}', str(exif[key].value)) is not None): + seconds_since_epoch = time.mktime(exif[key].value.timetuple()) + break; + except BaseException as e: + print e pass if(seconds_since_epoch == 0): diff --git a/elodie/media/photo.py b/elodie/media/photo.py index 9fd936d..76f48e2 100644 --- a/elodie/media/photo.py +++ b/elodie/media/photo.py @@ -29,37 +29,6 @@ class Photo(Media): # We only want to parse EXIF once so we store it here self.exif = None - - """ - Get the date which the photo was taken. - The date value returned is defined by the min() of mtime and ctime. - - @returns, time object or None for non-photo files or 0 timestamp - """ - def get_date_taken(self): - if(not self.is_valid()): - return None - - source = self.source - seconds_since_epoch = min(os.path.getmtime(source), os.path.getctime(source)) - # We need to parse a string from EXIF into a timestamp. - # EXIF DateTimeOriginal and EXIF DateTime are both stored in %Y:%m:%d %H:%M:%S format - # we use date.strptime -> .timetuple -> time.mktime to do the conversion in the local timezone - # EXIF DateTime is already stored as a timestamp - # Sourced from https://github.com/photo/frontend/blob/master/src/libraries/models/Photo.php#L500 - exif = self.get_exif() - for key in self.exif_map['date_taken']: - try: - if(key in exif): - seconds_since_epoch = time.mktime(datetime.strptime(str(exif[key]), '%Y:%m:%d %H:%M:%S').timetuple()) - break; - except: - pass - - if(seconds_since_epoch == 0): - return None - - return time.gmtime(seconds_since_epoch) """ Get the duration of a photo in seconds. diff --git a/tests/scripts/datetime.py b/tests/scripts/datetime.py index 166c368..0989db4 100755 --- a/tests/scripts/datetime.py +++ b/tests/scripts/datetime.py @@ -15,14 +15,16 @@ def main(argv): print 'No file specified' sys.exit(1) - if('type' in args and args['type'] == 'photo'): - media_type = Photo - else: + if('type' in args and args['type'] == 'video'): media_type = Video + else: + media_type = Photo media = media_type(args['file']) metadata = media.get_metadata() + print '%r' % metadata + output = {'date_taken': metadata['date_taken']} print '%r' % output