WIP html formatting

This commit is contained in:
2018-03-06 18:59:27 -08:00
parent 256d7a9aab
commit 4d789d674d
3 changed files with 81 additions and 15 deletions

View File

@@ -3,7 +3,7 @@ from models.models import *
class AsanaService(object): class AsanaService(object):
TASK_FIELDS = [ TASK_FIELDS = [
'name', 'name',
'notes', 'html_notes',
'assignee.name', 'assignee.name',
'assignee_status', 'assignee_status',
'completed', 'completed',
@@ -23,6 +23,12 @@ class AsanaService(object):
'subtasks.name', 'subtasks.name',
] ]
STORY_FIELDS = [
'created_by.name',
'html_text',
'type'
]
def __init__(self, client): def __init__(self, client):
self.client = client self.client = client
self.completed_tasks = False self.completed_tasks = False
@@ -32,17 +38,6 @@ class AsanaService(object):
def __wrap__(self, Klass, values): def __wrap__(self, Klass, values):
return map(Klass, values) return map(Klass, values)
def get_tasks(self, project_id):
params = {
'completed_since': '' if self.completed_tasks else 'now',
'opt_fields': self.TASK_FIELDS,
}
return self.__wrap__(
Task,
self.client.tasks.find_by_project(project_id, params=params)
)
def get_my_tasks(self): def get_my_tasks(self):
return self.__wrap__( return self.__wrap__(
Task, Task,
@@ -54,6 +49,11 @@ class AsanaService(object):
}) })
) )
def get_project(self, project_id):
return Project(
self.client.projects.find_by_id(project_id)
)
def get_task(self, task_id): def get_task(self, task_id):
return Task(self.client.tasks.find_by_id( return Task(self.client.tasks.find_by_id(
task_id, task_id,
@@ -62,7 +62,20 @@ class AsanaService(object):
} }
)) ))
def get_tasks(self, project_id):
params = {
'completed_since': '' if self.completed_tasks else 'now',
'opt_fields': self.TASK_FIELDS,
}
return self.__wrap__(
Task,
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) stories = self.client.stories.find_by_task(task_id, params = {
'opt_fields': self.STORY_FIELDS
})
filtered_stories = filter(lambda s: s['type'] == 'comment', stories) filtered_stories = filter(lambda s: s['type'] == 'comment', stories)
return self.__wrap__(Story, filtered_stories) return self.__wrap__(Story, filtered_stories)

View File

@@ -1,4 +1,5 @@
import dateutil import dateutil
from html.parser import HTMLParser
import sys import sys
class AsanaObject(object): class AsanaObject(object):
@@ -89,6 +90,55 @@ class CustomField(AsanaObject):
return '' return ''
class Strong(object):
def __init__(self, body):
self.body = body
def str(self):
return ('strong', str(body))
class Italic(object):
def __init__(self, body):
self.body = body
def str(self):
return ('italic', str(body))
class Tag(object):
def __init__(self, body):
self.body = body
def str(self):
return str(self.body)
class HTMLTextParser(HTMLParser):
def __init__(self):
self.text = []
self.tag_stack = []
super().__init__()
def handle_starttag(self, tag, attrs):
if tag == 'STRONG':
self.tag_stack.append(Strong)
elif tag == 'EM':
self.tag_stack.append(Italic)
else:
self.tag_stack.append(Tag)
def handle_data(self, data):
self.text.append(data)
def handle_endtag(self, tag):
data = self.text.pop()
tag = self.tag_stack.pop()
self.text.append(tag(data))
def get_formatted_text(self):
print(self.text)
return self.text
class Story(AsanaObject): class Story(AsanaObject):
def creator(self): def creator(self):
if 'created_by' in self.object_dict: if 'created_by' in self.object_dict:
@@ -97,4 +147,6 @@ class Story(AsanaObject):
return '' return ''
def text(self): def text(self):
return self.object_dict['text'] parser = HTMLTextParser()
parser.feed(self.object_dict['html_text'])
return parser.get_formatted_text()

View File

@@ -39,9 +39,10 @@ class Ui(object):
def task_list(self, id): def task_list(self, id):
self.nav_stack.append(('project', id)) self.nav_stack.append(('project', id))
def runInThread(): def runInThread():
project = self.asana_service.get_project(id)
tasks = self.asana_service.get_tasks(id) tasks = self.asana_service.get_tasks(id)
self.update(TaskList(tasks, self.update(TaskList(tasks,
'TODO: get project name', project.name(),
self.task_details self.task_details
).component()) ).component())
thread = Thread(target=runInThread()) thread = Thread(target=runInThread())