Added pause and resume.
1.1 --- a/cronrec.py Fri Oct 01 22:02:28 2010 +0200
1.2 +++ b/cronrec.py Fri Oct 01 23:23:26 2010 +0200
1.3 @@ -86,8 +86,9 @@
1.4 project, activity = label.split(":")
1.5 else:
1.6 project = label
1.7 - db.begin(db_file(), project, activity, datetime.now())
1.8 - print "begins %s:%s" % (project, activity)
1.9 + time = datetime.now()
1.10 + db.resume(db_file(), None, None, time)
1.11 + db.begin(db_file(), project, activity, time)
1.12
1.13 def end(args):
1.14 project = None
1.15 @@ -97,17 +98,23 @@
1.16 project, activity = label.split(":")
1.17 else:
1.18 project = label
1.19 - db.end(db_file(), project, activity, datetime.now())
1.20 - print "ends %s:%s" % (project, activity)
1.21 + time = datetime.now()
1.22 + db.resume(db_file(), None, None, time)
1.23 + db.end(db_file(), project, activity, time)
1.24 +
1.25 +def pause(args):
1.26 + db.pause(db_file(), None, None, datetime.now())
1.27 +
1.28 +def resume(args):
1.29 + db.resume(db_file(), None, None, datetime.now())
1.30
1.31 def status(args):
1.32 - result = db.find_active_tasks(db_file())
1.33 - if result:
1.34 - print "Currently active tasks:"
1.35 - for r in result:
1.36 - print "Project: %s Activity: %s" % r
1.37 + task = db.status(db_file())
1.38 + if task:
1.39 + print "Currently active task"
1.40 + print "Project: %s Activity: %s" % task
1.41 else:
1.42 - print "There are no active tasks."
1.43 + print "There is no active task."
1.44
1.45 def main():
1.46 global config
1.47 @@ -126,6 +133,14 @@
1.48 sub_end.add_argument("label", type=str, nargs="?", default="all:all")
1.49 sub_end.set_defaults(func=end)
1.50
1.51 + sub_end = subs.add_parser("pause")
1.52 + sub_end.add_argument("-m", type=str)
1.53 + sub_end.set_defaults(func=pause)
1.54 +
1.55 + sub_end = subs.add_parser("resume")
1.56 + sub_end.add_argument("-m", type=str)
1.57 + sub_end.set_defaults(func=resume)
1.58 +
1.59 sub_end = subs.add_parser("status")
1.60 sub_end.set_defaults(func=status)
1.61
2.1 --- a/db.py Fri Oct 01 22:02:28 2010 +0200
2.2 +++ b/db.py Fri Oct 01 23:23:26 2010 +0200
2.3 @@ -46,8 +46,16 @@
2.4 constraint activity_fk foreign key(activity) references activities(rowid) on delete
2.5 cascade)"""
2.6
2.7 +BREAKS_TABLE = """breaks(
2.8 +begin datetime,
2.9 +end datetime,
2.10 +task int,
2.11 +log text,
2.12 +constraint task_fk foreign key(task) references tasks(rowid) on delete
2.13 +cascade)"""
2.14 +
2.15 TABLES = (ACTIVITIES_TABLE, COMPANIES_TABLE, PROJECTS_TABLE, RATES_TABLE,
2.16 -TASKS_TABLE)
2.17 +TASKS_TABLE, BREAKS_TABLE)
2.18
2.19 DEF_PROJECT = "default"
2.20 DEF_ACTIVITY = "default"
2.21 @@ -70,6 +78,10 @@
2.22 print "\ntasks"
2.23 for c in cur:
2.24 print c
2.25 + cur.execute("select * from breaks")
2.26 + print "\nbreaks"
2.27 + for c in cur:
2.28 + print c
2.29 con.commit()
2.30 cur.close()
2.31
2.32 @@ -117,17 +129,15 @@
2.33 cur.close()
2.34 return activity
2.35
2.36 -def find_active_tasks(db_file):
2.37 +def find_active_task(db_file):
2.38 con, cur = session(db_file)
2.39 sql = "select project, activity from tasks where end is null"
2.40 cur.execute(sql)
2.41 - results = []
2.42 - if cur:
2.43 - for id in cur:
2.44 - results.append((id_name(db_file, "projects", id[0]),
2.45 - id_name(db_file, "activities", id[1])))
2.46 + task = cur.fetchone()
2.47 + if task:
2.48 + task = task[0]
2.49 cur.close()
2.50 - return results
2.51 + return task
2.52
2.53 def id_name(db_file, table, id):
2.54 con, cur = session(db_file)
2.55 @@ -198,3 +208,54 @@
2.56 con.commit()
2.57 cur.close()
2.58 test(db_file)
2.59 +
2.60 +def is_paused(db_file, time):
2.61 + con, cur = session(db_file)
2.62 + sql = "select rowid from breaks where end is null"
2.63 + cur.execute(sql)
2.64 + paused = cur.fetchone()
2.65 + cur.close()
2.66 + return paused
2.67 +
2.68 +def pause(db_file, project, activity, time):
2.69 + print "pausing"
2.70 + if not is_paused(db_file, time):
2.71 + project = find_last_project(db_file, time)
2.72 + activity = find_last_activity(db_file, time)
2.73 + con, cur = session(db_file)
2.74 + values = (time, None, project_id(db_file, project),
2.75 + activity_id(db_file, activity), None)
2.76 + sql = "insert into breaks values(?, ?, ?, ?, ?)"
2.77 + cur.execute(sql, values)
2.78 + con.commit()
2.79 + cur.close()
2.80 + test(db_file)
2.81 +
2.82 +def resume(db_file, project, activity, time):
2.83 + print "resuming"
2.84 + if is_paused(db_file, time):
2.85 + task = find_active_task(db_file)
2.86 + activity = find_last_activity(db_file, time)
2.87 + project = find_last_project(db_file, time)
2.88 + con, cur = session(db_file)
2.89 + values = (time, project_id(db_file, project), activity_id(db_file, activity))
2.90 + sql = "update breaks set end=? where project=? and activity=?"
2.91 + cur.execute(sql, values)
2.92 + con.commit()
2.93 + cur.close()
2.94 + test(db_file)
2.95 +
2.96 +def status(db_file):
2.97 + task = find_active_task(db_file)
2.98 + con, cur = session(db_file)
2.99 + result = None
2.100 + if task:
2.101 + values = (task,)
2.102 + sql = "select project, activity from tasks where rowid=?"
2.103 + cur.execute(sql, values)
2.104 + result = cur.fetchone()
2.105 + if result:
2.106 + result = (id_name(db_file, "projects", result[0]),
2.107 + id_name(db_file, "activities", result[1]))
2.108 + return result
2.109 +