#!/usr/bin/env python2 import re import os import sys import time import pickle from thumb import pngthumbgen import EXIF class picture: re_order = re.compile("DCP_\d+") def __init__(self, path=None): if path: self.path = path # Lets check for numbering in the filename match = self.re_order.search(self.path) if match: self.order = match.group()[4:] else: self.order = 0 # time from filesystem self.mtime = os.stat(self.path)[8] # do we want to publish this picture? self.publish = 0 # time from image exif metadata self.etime = self.exif_datetime() def exif_datetime(self): """ A function to fetch the data/time from EXIF metadata """ try: file=open(self.path, 'rb') data=EXIF.process_file(file, 0) file.close() except: return 0 #if 'EXIF DateTimeDigitized' in data: # print data['EXIF DateTimeDigitized'] if 'EXIF DateTimeOriginal' in data: #print data['EXIF DateTimeOriginal'] try: return time.mktime(time.strptime("%s" % data['EXIF DateTimeOriginal'], '%Y:%m:%d %H:%M:%S')) except: # These are zeros if here # print data['EXIF DateTimeOriginal'] # print data['EXIF DateTimeDigitized'] return 0 else: return 0 def __repr__(self): return "%s, %s, [%s], %s" % (self.order, (time.strftime("%x %X", time.localtime(self.mtime))), time.strftime("%x %X", time.localtime(self.etime)), self.path) def __cmp__(self, other): return cmp(self.order, other.order) def exiffuck(self): self.exiffuck = 0 if self.mtime and self.etime: self.exiffuck = self.mtime - self.etime if self.exiffuck < -3600: print "Path:", self.path print "Todays time:", time.localtime(time.time()) print "FS:", time.localtime(self.mtime) print "EXIF:", time.localtime(self.etime) print "Diff:", self.exiffuck print '-','-'*45 #if not self.etime: # print "No EXIF time" # print '-','-'*25 class pictures: def __init__(self, repo): self.list = [] self.repo = repo self.lasttime = 0 def __repr__(self): return "[%s] number of entries: %s" % (self.repo, len(self.list)) def add_dir(self, dir): filenames = os.listdir(dir) filenames.sort() subdirs = [] for filename in filenames: pathname = os.path.join(dir, filename) if self.VALID_PICTURE(filename): self.list.append(picture(pathname)) if os.path.isdir(pathname): subdirs.append(pathname) map(self.add_dir, subdirs) def VALID_PICTURE(self, name): if re.search("\.(png|jpg)$", name, re.I): return 1 def timefuck(self): ol = [pix for pix in self.list if pix.order] print len(ol) ol.sort(lambda x, y: cmp(x.order, y.order)) lastpix = ol[0] count = 0 for pix in ol: print pix.path, lastpix.path if pix.mtime < lastpix.mtime: count += 1 print "NOK %s younger than %s" % (time.strftime("%x %X", time.localtime(pix.mtime)), time.strftime("%x %X", time.localtime(lastpix.mtime))) lastpix = pix print "Time fuck count:", count def order(self): self.list.sort() def save(self): afile=open(self.repo, 'w') pickle.dump(self, afile) afile.flush() afile.close() print "Saved", `self` def load(self): if os.path.exists(self.repo): afile=open(self.repo,'r') self = pickle.load(afile) afile.close() print "Loaded", `self` return self return self def write(self): for i in self.list: if i.etime > self.lasttime: picturepath = os.path.join('pictures', '%s/%s' % (time.localtime(i.etime)[0], time.localtime(i.etime)[1])) thumbpath = os.path.join('pictures', '%s/%s' % (time.localtime(i.etime)[0], time.localtime(i.etime)[1])) print "Creating %s" % picturepath print "Creating %s" % thumbpath try: os.makedirs(newpath) os.makedirs(newpath) except: pass os.system("cp %s %s" % (i.path, os.path.join(newpath, os.path.split(i.path)[-1]))) pngthumbgen self.lasttime = i.etime else: print "SKIPPNG", i, print "should have been higher than the lastime: ", print (time.strftime("%x %X", time.localtime(self.lasttime))) def writepictures(self, path, ): if __name__ == '__main__': coll = pictures('store.p') patharg = None if len(sys.argv) > 1: patharg = sys.argv[1] else: coll = coll.load() coll.order() print coll if patharg: print "Adding", patharg, "to", coll coll.add_dir(patharg) for i in coll.list: print i coll.write() # And save coll.save()