import sys import logging import argparse import prompter import tagtimerc import timer import taglog def get_args() -> argparse.Namespace: parser = argparse.ArgumentParser( prog="TagTime", description=("TagTime compatible with " "the original Perl implementation."), formatter_class=argparse.RawTextHelpFormatter) parser.add_argument('--rc', metavar='tagtimerc', default='~/.tagtimerc', help="""Path to tagtimerc (default: %(default)s)""", type=str) parser.set_defaults(func=None) subparsers = parser.add_subparsers() p1 = subparsers.add_parser('daemon', help="Run in daemon mode") p1.set_defaults(func=daemon) p1.add_argument('--prompt', metavar="mode", choices=["legacy", "gui"], default="legacy", type=str, help='Prompt via another terminal or via GUI popup.') p2 = subparsers.add_parser('ping', help="Answer a single ping") p2.add_argument('--time', type=int, help="Ping time") p2.add_argument('--log_file', type=str, help='Ping into this file') p2.add_argument('--previous_tags', type=str, help='String of previous tags for ditto feature.') p2.set_defaults(func=ping) p3 = subparsers.add_parser('merge', help="Merge two or more logs") p3.set_defaults(func=merge) p4 = subparsers.add_parser('validate', help="Validate log file") p4.add_argument('--log_file', type=str, help='Grep from this log') p4.set_defaults(func=validate) p5 = subparsers.add_parser('grep', help='Get pings between start and end') p5.add_argument('--log_file', type=str, help='Grep from this log') p5.set_defaults(func=grep) p5.add_argument('start', type=str, help='Start in %Y.%m.%d') p5.add_argument('end', type=str, help='End in %Y.%m.%d') return parser.parse_args() def daemon(rc: tagtimerc.TagTimeRc, args: argparse.Namespace): if args.prompt == "gui": p = prompter.Prompter(rc, True) else: p = prompter.Prompter(rc) p.daemon() def ping(rc: tagtimerc.TagTimeRc, args: argparse.Namespace): rc.log_file = args.log_file if args.log_file else rc.log_file p = prompter.Prompter(rc) args.time = args.time if args.time else p.timer.time_now() p.ping(args.time, args.previous_tags) def merge(rc: tagtimerc.TagTimeRc, args: argparse.Namespace): raise Exception() def validate(rc: tagtimerc.TagTimeRc, args: argparse.Namespace): if args.log_file: rc.log_file = args.log_file log = taglog.TagLog(rc.log_file) log.validate() def grep(rc: tagtimerc.TagTimeRc, args: argparse.Namespace): if args.log_file: rc.log_file = args.log_file log = taglog.TagLog(rc.log_file) start = timer.date_str_to_time(args.start) end = timer.date_str_to_time(args.end) for p in log.grep(start, end): print(p.line.strip()) def main(): logging.basicConfig(format='%(message)s', level=logging.DEBUG) args = get_args() rc = tagtimerc.parse_tagtimerc(args.rc) if args.func: args.func(rc, args) else: logging.error("Usage: TagTime Option (or --help)") sys.exit(1) if __name__ == "__main__": main()