From 4fe4e3ecbfcaf15fe56f074591dee2fa84959b64 Mon Sep 17 00:00:00 2001 From: karl Date: Sun, 11 Jul 2021 20:03:07 +0200 Subject: [PATCH] Display hours as a number rather than formatted days This is useful because the total time is usually not sensibly interpreted as days. Also negatives times were really odd. Includes some autoformating. --- tx | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/tx b/tx index e1c332e..6024689 100755 --- a/tx +++ b/tx @@ -4,38 +4,43 @@ from datetime import date, datetime, timedelta import argparse import os + def get_current_date(): return date.today().strftime("%Y-%m-%d") + def get_timefile_line(date, time, desc): return date + " " + time + " " + desc + "\n" + def get_total(filename): with open(filename, 'r') as time_file: total_time = timedelta() for line in time_file: date_time_description = line.split(" ", 2) - + hours, minutes = date_time_description[1].split(':', 1) - + # Parse the time to integers hours_int = int(hours) minutes_int = int(minutes) - + # Make sure that both the hours and the minutes are negative if there's a "-" before the time - if hours_int < 0: minutes_int *= -1 - + if hours_int < 0: + minutes_int *= -1 + delta = timedelta(hours=hours_int, minutes=minutes_int) - + total_time += delta - return total_time + return "{} hours".format(str(total_time.total_seconds() / 60 / 60)) + # Parse command line arguments parser = argparse.ArgumentParser(prog='time.txt', description="simple plain-text time tracking.") subparsers = parser.add_subparsers(help='Commands', dest='mode') - + parser.add_argument("-f", "--file", help="a file in the time.txt format. default: ./time.txt") # create the parser for the "a" command @@ -43,12 +48,16 @@ parser_total = subparsers.add_parser('total', help='print the total unbilled tim # create the parser for the "b" command parser_add = subparsers.add_parser('add', help='add a time entry.') -parser_add.add_argument("date", nargs='?', default=get_current_date(), help="date in the format 2020-12-30. defaults to the current date.") +parser_add.add_argument( + "date", nargs='?', default=get_current_date(), + help="date in the format 2020-12-30. defaults to the current date.") parser_add.add_argument("time", help="time in the format 19:20.") parser_add.add_argument("description", help="short description of how the time was spent.") parser_bill = subparsers.add_parser('bill', help='add a bill entry (a negative time entry).') -parser_bill.add_argument("date", nargs='?', default=get_current_date(), help="date in the format 2020-12-30. defaults to the current date.") +parser_bill.add_argument( + "date", nargs='?', default=get_current_date(), + help="date in the format 2020-12-30. defaults to the current date.") parser_bill.add_argument("time", help="time in the format 19:20.") parser_bill.add_argument("description", help="short description of how the time was spent.") @@ -65,14 +74,14 @@ elif args.mode == "add": with open(filename, 'a') as time_file: # TODO: Validate date and time time_file.write(get_timefile_line(args.date, args.time, args.description)) - + print("New total:", get_total(filename)) elif args.mode == "bill": with open(filename, 'a') as time_file: # TODO: Validate date and time time_file.write(get_timefile_line(args.date, "-" + args.time, args.description)) - + print("New total:", get_total(filename)) elif args.mode == "create":