From fcc485c8cd5705f545c8702a0342054b1aa9b47d Mon Sep 17 00:00:00 2001 From: nojhan Date: Sun, 26 Nov 2017 16:34:01 +0100 Subject: [PATCH] refactor as an iterator class --- flicksave.py | 74 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 45 insertions(+), 29 deletions(-) diff --git a/flicksave.py b/flicksave.py index 6c06bad..8cb7499 100644 --- a/flicksave.py +++ b/flicksave.py @@ -2,47 +2,63 @@ import os import glob import datetime -def make_flick(save_dir, name, date, ext): - # Current date with second precision (without micro-seconds). - tag = date.isoformat().split(".")[0] - flick = name + "_" + tag + ext - return os.path.join(save_dir, flick) - - def last_of(us): return us[-1] -def next_name(base, save_dir=".", delay=10): - full = os.path.expanduser(base) - head = os.path.basename(full) - name,ext = os.path.splitext(head) +class Flick: + def __init__(self, basename, save_dir=".", delay=10, stamp_sep='_', date_template="%Y-%m-%dT%H:%M:%S"): + self.base = basename + self.date_template = date_template + self.date_sep = stamp_sep + self.save_dir = save_dir + self.delay = delay - pattern = name+"_????-??-??T??:??:??"+ext - existing = glob.glob(os.path.join(save_dir,pattern)) + # Make a glob search expression with the date template. + self.fields = {'Y':4,'m':2,'d':2,'H':2,'M':2,'S':2} + self.glob_template = self.date_template + for k in self.fields: + self.glob_template = self.glob_template.replace("%"+k,'?'*self.fields[k]) - date_now = datetime.datetime.now() - #print(date_now) + def __iter__(self): + return self - if existing: - last = last_of(sorted(existing)) - root,ext = os.path.splitext(last) - last_name = os.path.basename(root) - # As we globbed the pattern, no need for complex regexp. - last_tag = last_of(last_name.split("_")) - last_date = datetime.datetime.strptime(last_tag, "%Y-%m-%dT%H:%M:%S") + def make(self, save_dir, name, date, ext): + # Current date with second precision (without micro-seconds). + tag = date.isoformat().split(".")[0] + flick = name + self.date_sep + tag + ext + return os.path.join(save_dir, flick) - print("Last save:",last_date.isoformat()) + def next(self): + full = os.path.expanduser(self.base) + head = os.path.basename(full) + name,ext = os.path.splitext(head) - assert(last_date <= date_now) - if date_now - last_date < datetime.timedelta(seconds=delay): - return make_flick(save_dir,name,last_date,ext) + pattern = name+self.date_sep+self.glob_template+ext + existing = glob.glob(os.path.join(self.save_dir,pattern)) - return make_flick(save_dir,name,date_now,ext) + date_now = datetime.datetime.now() + #print(date_now) + + if existing: + last = last_of(sorted(existing)) + root,ext = os.path.splitext(last) + last_name = os.path.basename(root) + # As we globbed the pattern, no need for complex regexp. + last_tag = last_of(last_name.split(self.date_sep)) + last_date = datetime.datetime.strptime(last_tag, self.date_template) + + print("Last flick on:",last_date.isoformat()) + + assert(last_date <= date_now) + if date_now - last_date < datetime.timedelta(seconds=self.delay): + return self.make(self.save_dir,name,last_date,ext) + + return self.make(self.save_dir,name,date_now,ext) if __name__=="__main__": - import sys - print(next_name(sys.argv[1])) + f = Flick(sys.argv[1]) + print(f.next())