diff --git a/home/dot_config/private_timewarrior/private_extensions/executable_rm.py b/home/dot_config/private_timewarrior/private_extensions/executable_rm.py index 55c8c5d..da30f23 100644 --- a/home/dot_config/private_timewarrior/private_extensions/executable_rm.py +++ b/home/dot_config/private_timewarrior/private_extensions/executable_rm.py @@ -1,7 +1,9 @@ #!/usr/bin/env python3 from collections import defaultdict from collections.abc import Iterable -from datetime import datetime, timedelta, timezone, time +from datetime import datetime, timedelta +from zoneinfo import ZoneInfo + import json @@ -48,40 +50,52 @@ def print_projects(projects) -> None: ) -for line in sys.stdin: - if line.strip() == "": - break - -input = json.load(sys.stdin) -projects = defaultdict(dict) - -for record in input: - record["start"] = datetime.strptime(record["start"], DATE_FORMAT) - - if "end" in record: - record["end"] = datetime.strptime(record["end"], DATE_FORMAT) - else: - record["end"] = datetime.now() - - record["duration"] = record["end"] - record["start"] - record["project"] = "" - - for i, tag in enumerate(record["tags"]): - if len(tag) > 0 and tag[0].isupper(): - record["project"] = tag - del record["tags"][i] +def main(): + for line in sys.stdin: + if line.strip() == "": break - if record["project"] not in projects: - projects[record["project"]] = { - "duration": record["duration"], - "tags": record["tags"], - } - else: - projects[record["project"]]["duration"] += record["duration"] - projects[record["project"]]["tags"] += record["tags"] + input = json.load(sys.stdin) + projects = defaultdict(dict) + + for record in input: + record["start"] = ( + datetime.strptime(record["start"], DATE_FORMAT) + .replace(tzinfo=ZoneInfo("UTC")) + .astimezone() + ) + + if "end" in record: + record["end"] = ( + datetime.strptime(record["end"], DATE_FORMAT) + .replace(tzinfo=ZoneInfo("UTC")) + .astimezone() + ) + else: + record["end"] = datetime.now(tz=ZoneInfo("UTC")).astimezone() + + record["duration"] = record["end"] - record["start"] + record["project"] = "" + + for i, tag in enumerate(record["tags"]): + if len(tag) > 0 and tag[0].isupper(): + record["project"] = tag + del record["tags"][i] + break + + if record["project"] not in projects: + projects[record["project"]] = { + "duration": record["duration"], + "tags": record["tags"], + } + else: + projects[record["project"]]["duration"] += record["duration"] + projects[record["project"]]["tags"] += record["tags"] + + print_projects(projects) + print() + print_details(input) -print_projects(projects) -print() -print_details(input) +if __name__ == "__main__": + main()