From 5028a12dbc9d6d8e3f3d476f4f362603d5b26ab0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20Bu=C3=9Fmann?= Date: Sat, 24 Feb 2024 02:49:28 +0100 Subject: [PATCH] Added more fine grain controls for input --- things2reclaim.py | 66 +++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 61 insertions(+), 5 deletions(-) diff --git a/things2reclaim.py b/things2reclaim.py index e3919ef..811dd87 100755 --- a/things2reclaim.py +++ b/things2reclaim.py @@ -14,19 +14,75 @@ def get_tasks_for_project(project): return things.tasks(project=project["uuid"], type="to-do") +def set_default_reclaim_values(things_task, reclaim_task): + reclaim_task.min_work_duration = 0.5 + reclaim_task.max_work_duration = 2 + reclaim_task.duration = 2 + if things_task.get("start_date") is not None: + reclaim_task.start_date = datetime.strptime( + f"{things_task['start_date']} 08:00", "%Y-%m-%d %H:%M") + if things_task.get("deadline") is not None: + reclaim_task.due_date = datetime.strptime( + f"{things_task['deadline']} 22:00", "%Y-%m-%d %H:%M") + + +def calculate_time_on_unit(tag_value) -> float: + value, unit = tag_value.split(" ") + match unit: + case 'hours' | 'hrs' | 'hour' | 'hr' | "h": + return int(value) + case "mins" | "min" | "minutes" | "minute" | "m": + return int(value) / 60 + + +def map_tag_values(things_task, reclaim_task): + tags_dict = {k: v for (k, v) in [tag.split(": ") + for tag in things_task["tags"]]} + for tag in tags_dict: + match tag: + case "MinTime": + reclaim_task.min_work_duration = calculate_time_on_unit( + tags_dict[tag]) + case "MaxTime": + reclaim_task.max_work_duration = calculate_time_on_unit( + tags_dict[tag]) + case "EstimatedTime": + reclaim_task.duration = calculate_time_on_unit(tags_dict[tag]) + case "DeadlineTime": + if things_task.get('deadline') is not None: + reclaim_task.due_date = datetime.strptime( + f"{things_task['deadline']} {tags_dict[tag]}", "%Y-%m-%d %H:%M") + case "StartTime": + if things_task.get('start_date') is not None: + reclaim_task.start_date = datetime.strptime( + f"{things_task['start_date']} {tags_dict[tag]}", "%Y-%m-%d %H:%M") + case _: + print(f"Tag {tag} not recognized") + + def things_to_reclaim(things_task, project_title): with ReclaimTask() as reclaim_task: reclaim_task.name = "{} {}".format(project_title, things_task["title"]) - reclaim_task.start_date = datetime.strptime( - things_task["start_date"], "%Y-%m-%d") - reclaim_task.due_date = datetime.strptime( - things_task["deadline"], "%Y-%m-%d") + set_default_reclaim_values( + things_task=things_task, reclaim_task=reclaim_task) + map_tag_values(things_task=things_task, reclaim_task=reclaim_task) + reclaim_task_pretty_print(reclaim_task) def things_task_pretty_print(task, project_title): print(f"\tTitle: {project_title} {task['title']}") print(f"\tStart date: {task['start_date']}") print(f"\tDeadline: {task['deadline']}") + print(f"\tTags: {task['tags']}") + + +def reclaim_task_pretty_print(task): + print(f"\tTitle: {task.name}") + print(f"\tStart date: {task.start_date}") + print(f"\tDeadline: {task.due_date}") + print(f"\tMin work duration: {task.min_work_duration}") + print(f"\tMax work duration: {task.max_work_duration}") + print(f"\tDuration: {task.duration}") def main(): @@ -39,7 +95,7 @@ def main(): project["title"], things_task["title"]) if full_task_name not in reclaim_task_names: print(f"Creating task {full_task_name} in Reclaim") - things_task_pretty_print(things_task, project["title"]) + # things_task_pretty_print(things_task, project["title"]) things_to_reclaim(things_task, project["title"]) else: print(f"Task {things_task['title']} already exists in Reclaim")