Format assignee and due date
This commit is contained in:
@@ -74,7 +74,7 @@ class AsanaService(object):
|
|||||||
Task,
|
Task,
|
||||||
self.client.tasks.find_by_project(project_id, params=params)
|
self.client.tasks.find_by_project(project_id, params=params)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_stories(self, task_id):
|
def get_stories(self, task_id):
|
||||||
stories = self.client.stories.find_by_task(task_id, params = {
|
stories = self.client.stories.find_by_task(task_id, params = {
|
||||||
'opt_fields': self.STORY_FIELDS
|
'opt_fields': self.STORY_FIELDS
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import dateutil
|
from datetime import timezone
|
||||||
|
import dateutil.parser
|
||||||
from html.parser import HTMLParser
|
from html.parser import HTMLParser
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ class Task(AsanaObject):
|
|||||||
return super(Task, self).name()
|
return super(Task, self).name()
|
||||||
|
|
||||||
def assignee(self):
|
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'])
|
return User(self.object_dict['assignee'])
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
@@ -50,12 +51,15 @@ class Task(AsanaObject):
|
|||||||
return ""
|
return ""
|
||||||
|
|
||||||
def due_date(self):
|
def due_date(self):
|
||||||
if 'due_at' in self.object_dict:
|
if 'due_at' in self.object_dict and self.object_dict['due_at']:
|
||||||
return dateutil.parser.parse(self.object_dict['due_at'])
|
datetime = dateutil.parser.parse(self.object_dict['due_at'])
|
||||||
elif 'due_one' in self.object_dict:
|
datetime = datetime.replace(tzinfo=timezone.utc).astimezone(tz=None)
|
||||||
return dateutil.parser.parse(self.object_dict['due_on'])
|
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:
|
else:
|
||||||
return None
|
return 'no due date'
|
||||||
|
|
||||||
def parent(self):
|
def parent(self):
|
||||||
if 'parent' in self.object_dict and self.object_dict['parent']:
|
if 'parent' in self.object_dict and self.object_dict['parent']:
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import urwid
|
import urwid
|
||||||
|
from datetime import date, datetime
|
||||||
|
|
||||||
from ui.task_list import TaskRow
|
from ui.task_list import TaskRow
|
||||||
|
|
||||||
class TaskDetails(object):
|
class TaskDetails(object):
|
||||||
def __init__(self, task, stories, on_subtask_click, on_project_click,
|
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.task = task
|
||||||
self.on_subtask_click = on_subtask_click,
|
self.on_subtask_click = on_subtask_click,
|
||||||
self.on_project_click = on_project_click,
|
self.on_project_click = on_project_click,
|
||||||
@@ -12,13 +13,15 @@ class TaskDetails(object):
|
|||||||
|
|
||||||
body = [
|
body = [
|
||||||
urwid.Text(('task', task.name())),
|
urwid.Text(('task', task.name())),
|
||||||
urwid.Divider('-'),
|
urwid.Divider('⎼'),
|
||||||
Memberships(task, on_subtask_click, on_project_click).component(),
|
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(),
|
CustomFields(task).component(),
|
||||||
urwid.Divider('='),
|
urwid.Divider('⎼'),
|
||||||
urwid.Text(task.description()),
|
urwid.Text(task.description()),
|
||||||
urwid.Divider('-'),
|
urwid.Divider('⎼'),
|
||||||
]
|
]
|
||||||
|
|
||||||
if task.subtasks():
|
if task.subtasks():
|
||||||
@@ -38,6 +41,45 @@ class TaskDetails(object):
|
|||||||
def component(self):
|
def component(self):
|
||||||
return self.details
|
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):
|
class Memberships(object):
|
||||||
def __init__(self, task, on_subtask_click, on_project_click):
|
def __init__(self, task, on_subtask_click, on_project_click):
|
||||||
self.on_project_click = on_project_click
|
self.on_project_click = on_project_click
|
||||||
|
|||||||
2
ui/ui.py
2
ui/ui.py
@@ -32,7 +32,7 @@ class Ui(object):
|
|||||||
stories,
|
stories,
|
||||||
self.task_details,
|
self.task_details,
|
||||||
self.task_list,
|
self.task_list,
|
||||||
None).component())
|
None, None, None).component())
|
||||||
thread = Thread(target=runInThread())
|
thread = Thread(target=runInThread())
|
||||||
thread.start()
|
thread.start()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user