From da9dd3578f02eb09f0296e3e02549d8f15d6a0e4 Mon Sep 17 00:00:00 2001 From: Aaron Gutierrez Date: Sun, 1 Jul 2018 14:47:08 -0700 Subject: [PATCH] Format assignee and due date --- asana_service.py | 2 +- models/models.py | 18 +++++++++------- ui/task_details.py | 52 +++++++++++++++++++++++++++++++++++++++++----- ui/ui.py | 2 +- 4 files changed, 60 insertions(+), 14 deletions(-) diff --git a/asana_service.py b/asana_service.py index 0911f67..863fd72 100644 --- a/asana_service.py +++ b/asana_service.py @@ -74,7 +74,7 @@ class AsanaService(object): Task, self.client.tasks.find_by_project(project_id, params=params) ) - + def get_stories(self, task_id): stories = self.client.stories.find_by_task(task_id, params = { 'opt_fields': self.STORY_FIELDS diff --git a/models/models.py b/models/models.py index fe0efba..40d8bd8 100644 --- a/models/models.py +++ b/models/models.py @@ -1,4 +1,5 @@ -import dateutil +from datetime import timezone +import dateutil.parser from html.parser import HTMLParser import sys @@ -26,7 +27,7 @@ class Task(AsanaObject): return super(Task, self).name() def assignee(self): - if 'assignee' in self.object_dict: + if 'assignee' in self.object_dict and self.object_dict['assignee']: return User(self.object_dict['assignee']) else: return None @@ -50,12 +51,15 @@ class Task(AsanaObject): return "" def due_date(self): - if 'due_at' in self.object_dict: - return dateutil.parser.parse(self.object_dict['due_at']) - elif 'due_one' in self.object_dict: - return dateutil.parser.parse(self.object_dict['due_on']) + if 'due_at' in self.object_dict and self.object_dict['due_at']: + datetime = dateutil.parser.parse(self.object_dict['due_at']) + datetime = datetime.replace(tzinfo=timezone.utc).astimezone(tz=None) + return datetime.strftime('%b %d, %Y %H:%M') + elif 'due_on' in self.object_dict and self.object_dict['due_on']: + date = dateutil.parser.parse(self.object_dict['due_on']) + return date.strftime('%b %d, %Y') else: - return None + return 'no due date' def parent(self): if 'parent' in self.object_dict and self.object_dict['parent']: diff --git a/ui/task_details.py b/ui/task_details.py index a7ad9e7..31330fb 100644 --- a/ui/task_details.py +++ b/ui/task_details.py @@ -1,10 +1,11 @@ import urwid +from datetime import date, datetime from ui.task_list import TaskRow class TaskDetails(object): def __init__(self, task, stories, on_subtask_click, on_project_click, - on_comment): + on_comment, on_assignee_click, on_due_date_click): self.task = task self.on_subtask_click = on_subtask_click, self.on_project_click = on_project_click, @@ -12,13 +13,15 @@ class TaskDetails(object): body = [ urwid.Text(('task', task.name())), - urwid.Divider('-'), + urwid.Divider('⎼'), Memberships(task, on_subtask_click, on_project_click).component(), - urwid.Divider('-'), + urwid.Divider('⎼'), + Assignee(task, on_assignee_click).component(), + DueDate(task, on_due_date_click).component(), CustomFields(task).component(), - urwid.Divider('='), + urwid.Divider('⎼'), urwid.Text(task.description()), - urwid.Divider('-'), + urwid.Divider('⎼'), ] if task.subtasks(): @@ -38,6 +41,45 @@ class TaskDetails(object): def component(self): return self.details +class Assignee(object): + def __init__(self, task, on_click): + if task.assignee(): + assignee = task.assignee().name() + else: + assignee = "unassigned" + + + self.assignee = urwid.SelectableIcon([('strong', 'Assignee: '), ('', assignee)]) + + self.on_click = on_click + #urwid.connect_signal(self.assignee, 'keypress', self.on_keypress) + + def component(self): + return self.assignee + + def on_keypress(self, size, key): + if key == "enter": + self.on_click() + else: + return key + +class DueDate(object): + def __init__(self, task, on_click): + due_date = task.due_date() + self.due_date = urwid.SelectableIcon([('strong', 'Due: '), ('', str(task.due_date()))]) + + self.on_click = on_click + #urwid.connect_signal(self.due_date, 'keypress', self.on_keypress) + + def component(self): + return self.due_date + + def on_keypress(self, size, key): + if key == "enter": + self.on_click() + else: + return key + class Memberships(object): def __init__(self, task, on_subtask_click, on_project_click): self.on_project_click = on_project_click diff --git a/ui/ui.py b/ui/ui.py index 062689d..6fdf06c 100644 --- a/ui/ui.py +++ b/ui/ui.py @@ -32,7 +32,7 @@ class Ui(object): stories, self.task_details, self.task_list, - None).component()) + None, None, None).component()) thread = Thread(target=runInThread()) thread.start()