WIP html formatting
This commit is contained in:
@@ -3,7 +3,7 @@ from models.models import *
|
||||
class AsanaService(object):
|
||||
TASK_FIELDS = [
|
||||
'name',
|
||||
'notes',
|
||||
'html_notes',
|
||||
'assignee.name',
|
||||
'assignee_status',
|
||||
'completed',
|
||||
@@ -23,6 +23,12 @@ class AsanaService(object):
|
||||
'subtasks.name',
|
||||
]
|
||||
|
||||
STORY_FIELDS = [
|
||||
'created_by.name',
|
||||
'html_text',
|
||||
'type'
|
||||
]
|
||||
|
||||
def __init__(self, client):
|
||||
self.client = client
|
||||
self.completed_tasks = False
|
||||
@@ -32,17 +38,6 @@ class AsanaService(object):
|
||||
def __wrap__(self, 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):
|
||||
return self.__wrap__(
|
||||
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):
|
||||
return Task(self.client.tasks.find_by_id(
|
||||
task_id,
|
||||
@@ -61,8 +61,21 @@ class AsanaService(object):
|
||||
'opt_fields': self.TASK_FIELDS
|
||||
}
|
||||
))
|
||||
|
||||
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):
|
||||
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)
|
||||
return self.__wrap__(Story, filtered_stories)
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import dateutil
|
||||
from html.parser import HTMLParser
|
||||
import sys
|
||||
|
||||
class AsanaObject(object):
|
||||
@@ -89,6 +90,55 @@ class CustomField(AsanaObject):
|
||||
|
||||
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):
|
||||
def creator(self):
|
||||
if 'created_by' in self.object_dict:
|
||||
@@ -97,4 +147,6 @@ class Story(AsanaObject):
|
||||
return ''
|
||||
|
||||
def text(self):
|
||||
return self.object_dict['text']
|
||||
parser = HTMLTextParser()
|
||||
parser.feed(self.object_dict['html_text'])
|
||||
return parser.get_formatted_text()
|
||||
|
||||
3
ui/ui.py
3
ui/ui.py
@@ -39,9 +39,10 @@ class Ui(object):
|
||||
def task_list(self, id):
|
||||
self.nav_stack.append(('project', id))
|
||||
def runInThread():
|
||||
project = self.asana_service.get_project(id)
|
||||
tasks = self.asana_service.get_tasks(id)
|
||||
self.update(TaskList(tasks,
|
||||
'TODO: get project name',
|
||||
project.name(),
|
||||
self.task_details
|
||||
).component())
|
||||
thread = Thread(target=runInThread())
|
||||
|
||||
Reference in New Issue
Block a user