tagtimepy/tagtime.py

106 lines
3.3 KiB
Python

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()