# HG changeset patch # User Eugen Sawin # Date 1286285918 -7200 # Node ID 8a99ccb993618b44b37ddf5e451337be039d1b02 # Parent 37ab6d0ddb30fade73480dac0477595be6363c0f Added add break command. diff -r 37ab6d0ddb30 -r 8a99ccb99361 cronrec.py --- a/cronrec.py Tue Oct 05 15:19:14 2010 +0200 +++ b/cronrec.py Tue Oct 05 15:38:38 2010 +0200 @@ -102,10 +102,10 @@ db.end(db_file(), project, activity, time, log) def pause(args): - db.pause(db_file(), None, None, datetime.now()) + db.pause(db_file(), datetime.now()) def resume(args): - db.resume(db_file(), None, None, datetime.now(), args.m) + db.resume(db_file(), None, datetime.now(), args.m) def add_task(args): project, activity = parse_label(args.label) @@ -115,6 +115,13 @@ db.begin(db_file(), project, activity, begin) db.end(db_file(), project, activity, end, log) +def add_break(args): + log = args.m + begin = datetime.strptime(args.begin, DATETIME_FORMAT) + end = datetime.strptime(args.end, DATETIME_FORMAT) + db.pause(db_file(), begin) + db.resume(db_file(), db.find_active_task(db_file(), begin), end, log) + def status(args): task = db.status(db_file()) if task: @@ -151,12 +158,19 @@ sub_add = subs.add_parser("add") sub_add_subs = sub_add.add_subparsers() + sub_add_task = sub_add_subs.add_parser("task") sub_add_task.add_argument("label", type=str) sub_add_task.add_argument("begin", type=str) sub_add_task.add_argument("end", type=str) sub_add_task.add_argument("-m", type=str) sub_add_task.set_defaults(func=add_task) + + sub_add_break = sub_add_subs.add_parser("break") + sub_add_break.add_argument("begin", type=str) + sub_add_break.add_argument("end", type=str) + sub_add_break.add_argument("-m", type=str) + sub_add_break.set_defaults(func=add_break) sub_status = subs.add_parser("status") sub_status.set_defaults(func=status) diff -r 37ab6d0ddb30 -r 8a99ccb99361 db.py --- a/db.py Tue Oct 05 15:19:14 2010 +0200 +++ b/db.py Tue Oct 05 15:38:38 2010 +0200 @@ -129,10 +129,16 @@ cur.close() return activity -def find_active_task(db_file): +def find_active_task(db_file, time=None): con, cur = session(db_file) - sql = "select project, activity from tasks where end is null" - cur.execute(sql) + if time: + values = (time, time) + sql = "select project, activity from tasks where begin < ? and \ +(end is null or end > ?)" + else: + values = () + sql = "select project, activity from tasks where end is null" + cur.execute(sql, values) task = cur.fetchone() if task: task = task[0] @@ -212,16 +218,17 @@ def is_paused(db_file, time): con, cur = session(db_file) - sql = "select rowid from breaks where end is null" - cur.execute(sql) + values = (time,) + sql = "select rowid from breaks where begin < ? and end is null" + cur.execute(sql, values) paused = cur.fetchone() cur.close() return paused -def pause(db_file, project, activity, time): +def pause(db_file, time): print "pausing" if not is_paused(db_file, time): - task = find_active_task(db_file) + task = find_active_task(db_file, time) con, cur = session(db_file) values = (time, None, task, None) sql = "insert into breaks values(?, ?, ?, ?)" @@ -232,10 +239,12 @@ def resume(db_file, task, time, log): print "resuming" - if is_paused(db_file, time): + if is_paused(db_file, time): + if not task: + task = find_active_task(db_file, time) con, cur = session(db_file) values = (time, log, task) - sql = "update breaks set end=?, log=? where task=?" + sql = "update breaks set end=?, log=? where task=? and end is null" cur.execute(sql, values) con.commit() cur.close()