From 0a802375940d6d61c637fa61297f7c58c90608c5 Mon Sep 17 00:00:00 2001 From: jeremyharper Date: Tue, 14 Aug 2012 01:59:10 -0300 Subject: [PATCH 1/2] Added an export_from_date option Added an option to skip exporting events older than a given date, useful for making regular exports to a PC (so you don't have to re-export the whole iPhoto database each time). --- exportiphoto.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/exportiphoto.py b/exportiphoto.py index aa1bac0..3e8e35e 100644 --- a/exportiphoto.py +++ b/exportiphoto.py @@ -1,6 +1,5 @@ #!/usr/bin/env python - __version__ = "0.6" import base64 @@ -48,7 +47,7 @@ def close(self): class iPhotoLibrary(object): def __init__(self, albumDir, destDir, use_album=False, use_date=False, use_faces=False, use_metadata=False, deconflict=False, quiet=False, - year_dir=False, import_missing=False, import_from_date=None, test=False, + year_dir=False, import_missing=False, import_from_date=None, export_from_date=None, test=False, date_delimiter="-", ignore_time_delta=False): self.use_album = use_album self.use_date = use_date @@ -74,6 +73,11 @@ def __init__(self, albumDir, destDir, use_album=False, use_date=False, self.import_from_date = datetime.strptime(import_from_date, "%Y-%m-%d") else: self.import_from_date = None + print export_from_date + if export_from_date: + self.export_from_date = datetime.strptime(export_from_date, "%Y-%m-%d") + else: + self.export_from_date = None if self.import_missing: self.build_import_list() @@ -252,6 +256,7 @@ def walk(self, funcs): folderDate = None else: folderDate = self.appleDate(folder["RollDateAsTimerInterval"]) + images = folder["KeyList"] folderName = folder[targetName] @@ -264,6 +269,9 @@ def walk(self, funcs): album_name = unicode(album_name, 'utf-8') if folderName == album_name: self.import_albums.remove(ia) + print self.export_from_date + print folderDate + if self.export_from_date and folderDate < self.export_from_date: continue if folderDate and self.use_date: date = '%(year)d%(delim)s%(month)02d%(delim)s%(day)02d' % { @@ -455,12 +463,12 @@ def build_import_list(self): # if import_from_date was specified, then skip folders where the year_dir is before the import_from_date.year if self.import_from_date and int(year_dir) < self.import_from_date.year: continue - self.build_import_album_dirs(os.path.join(self.dest_dir, year_dir)) else: self.build_import_album_dirs(self.dest_dir) def build_import_album_dirs(self, base_dir): + delim = str(self.date_delimiter) for album_name in os.listdir(base_dir): album_names = [album_name] @@ -477,6 +485,7 @@ def build_import_album_dirs(self, base_dir): folder_date = datetime.strptime(album_name, "%Y" + delim + "%m" + delim + "%d") month, day, year = folder_date.strftime("%b %d %Y").split(" ") album_names.append("%s %d, %s" %(month, int(day), year)) + # Don't import folders that are prior to the specified date if not folder_date: continue @@ -557,6 +566,11 @@ def error(msg): help="only import missing folers if folder date occurs after (YYYY-MM-DD). Uses date in folder name." ) + option_parser.add_option("-p", "--export_from_date", + action="store", type="string", dest="export_from_date", + help="skip events older than this date (YYYY-MM-DD)." + ) + if pyexiv2: option_parser.add_option("-m", "--metadata", action="store_true", dest="metadata", @@ -590,6 +604,7 @@ def error(msg): year_dir=options.year_dir, import_missing=options.import_missing, import_from_date=options.import_from_date, + export_from_date=options.export_from_date, test=options.test, date_delimiter=options.date_delimiter, ignore_time_delta=options.ignore_time_delta From ec6b5acad11dc5e0ec1d578f58e49c41b6cdf6ae Mon Sep 17 00:00:00 2001 From: jeremyharper Date: Tue, 14 Aug 2012 02:07:13 -0300 Subject: [PATCH 2/2] Cleanup of export_from_date --- exportiphoto.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/exportiphoto.py b/exportiphoto.py index 3e8e35e..032b0ba 100644 --- a/exportiphoto.py +++ b/exportiphoto.py @@ -1,5 +1,6 @@ #!/usr/bin/env python + __version__ = "0.6" import base64 @@ -73,7 +74,7 @@ def __init__(self, albumDir, destDir, use_album=False, use_date=False, self.import_from_date = datetime.strptime(import_from_date, "%Y-%m-%d") else: self.import_from_date = None - print export_from_date + if export_from_date: self.export_from_date = datetime.strptime(export_from_date, "%Y-%m-%d") else: @@ -256,7 +257,6 @@ def walk(self, funcs): folderDate = None else: folderDate = self.appleDate(folder["RollDateAsTimerInterval"]) - images = folder["KeyList"] folderName = folder[targetName] @@ -269,8 +269,7 @@ def walk(self, funcs): album_name = unicode(album_name, 'utf-8') if folderName == album_name: self.import_albums.remove(ia) - print self.export_from_date - print folderDate + if self.export_from_date and folderDate < self.export_from_date: continue if folderDate and self.use_date: @@ -457,6 +456,7 @@ def build_import_list(self): ''' if self.year_dir: year_dir_list = os.listdir(self.dest_dir) + for year_dir in year_dir_list: # if year_dir was specified, then only match on folders inside year folders if not re.match("^[0-9]{4}$", year_dir): continue @@ -468,7 +468,6 @@ def build_import_list(self): self.build_import_album_dirs(self.dest_dir) def build_import_album_dirs(self, base_dir): - delim = str(self.date_delimiter) for album_name in os.listdir(base_dir): album_names = [album_name] @@ -484,8 +483,7 @@ def build_import_album_dirs(self, base_dir): if m: folder_date = datetime.strptime(album_name, "%Y" + delim + "%m" + delim + "%d") month, day, year = folder_date.strftime("%b %d %Y").split(" ") - album_names.append("%s %d, %s" %(month, int(day), year)) - + album_names.append("%s %d, %s" %(month, int(day), year)) # Don't import folders that are prior to the specified date if not folder_date: continue @@ -568,7 +566,7 @@ def error(msg): option_parser.add_option("-p", "--export_from_date", action="store", type="string", dest="export_from_date", - help="skip events older than this date (YYYY-MM-DD)." + help="skip exporting events older than (YYYY-MM-DD)." ) if pyexiv2: