From ed94fb59170edbe8413a052c31872d9a9d627676 Mon Sep 17 00:00:00 2001 From: Aaron Gutierrez Date: Tue, 21 Jul 2015 20:22:02 -0700 Subject: [PATCH] OAuth refreshes keys, added project view --- cmdasana.py | 43 ++++++++++++++++++++++++++++++------------- ui.py | 7 +++++-- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/cmdasana.py b/cmdasana.py index 186c079..51e5804 100755 --- a/cmdasana.py +++ b/cmdasana.py @@ -6,6 +6,7 @@ import json import urwid import asana +from asana.session import AsanaOAuth2Session from oauthlib.oauth2.rfc6749.errors import TokenExpiredError import ui @@ -19,25 +20,36 @@ class CmdAsana: f.close() self.client = asana.Client.oauth( client_id=CLIENT_ID, - token=token + client_secret=CLIENT_SECRET, + token=token, + token_updater=self.saveToken, + auto_refresh_url=AsanaOAuth2Session.token_url, + auto_refresh_kwargs={ + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET + }, ) except IOError: self.getToken() - try: - self.me = self.client.users.me() - except TokenExpiredError: - token = self.client.session.fetch_token(code=token['refresh_token']) - f = open('.oauth', 'w') - f.write(json.dumps(token)) - f.close() - self.me = self.client.users.me() + self.me = self.client.users.me() + + def saveToken(self, token): + f = open('.oauth', 'w') + f.write(json.dumps(token)) + f.close() def getToken(self): self.client = asana.Client.oauth( client_id=CLIENT_ID, client_secret=CLIENT_SECRET, - redirect_uri='urn:ietf:wg:oauth:2.0:oob' + redirect_uri='urn:ietf:wg:oauth:2.0:oob', + token_updater=self.saveToken, + auto_refresh_url=AsanaOAuth2Session.token_url, + auto_refresh_kwargs={ + 'client_id': CLIENT_ID, + 'client_secret': CLIENT_SECRET + }, ) (url, state) = self.client.session.authorization_url() try: @@ -49,9 +61,7 @@ class CmdAsana: code = sys.stdin.readline().strip() token = self.client.session.fetch_token(code=code) - f = open('.oauth', 'w') - f.write(json.dumps(token)) - f.close() + self.saveToken(token) def myWorkspaces(self): return self.me['workspaces'] @@ -62,6 +72,8 @@ class CmdAsana: 'workspace': workspace_id, 'completed_since': 'now' }) + def projectTasks(self, project_id): + return self.client.tasks.find_by_project(project_id) def completeTask(self, task_id): self.client.tasks.update(task_id, completed=True) @@ -92,6 +104,11 @@ class CmdAsana: self.replaceBody(task_list) self.workspace_id = workspace_id + def showProject(self, project_id): + task_list = ui.TaskList(self.projectTasks(project_id)) + self.connectTaskListSignals(task_list) + self.replaceBody(task_list) + def loadDetails(self, task_id): task = self.client.tasks.find_by_id(task_id) stories = self.client.stories.find_by_task(task_id) diff --git a/ui.py b/ui.py index 0ecca68..1d8227b 100644 --- a/ui.py +++ b/ui.py @@ -10,6 +10,7 @@ palette = [ ('selected workspace', 'standout,bold', ''), ('header', 'bold,light green', ''), ('task', 'light green', ''), + ('section', 'white', 'dark green'), ('workspace', 'white', 'dark blue') ] @@ -51,7 +52,8 @@ class TaskList(urwid.ListBox): body = urwid.SimpleFocusListWalker([]) for task_widget,_ in task_widgets.contents: self.connectSignals(task_widget) - body.append(urwid.AttrMap(task_widget, 'task', focus_map='selected')) + style = 'section' if task_widget.task['name'][-1] == ':' else 'task' + body.append(urwid.AttrMap(task_widget, style, focus_map='selected')) super(TaskList, self).__init__(body) @@ -59,8 +61,9 @@ class TaskList(urwid.ListBox): task_widget = TaskEdit(task, mode=EDIT) self.connectSignals(task_widget) index = self.focus_position + 1 + style = 'section' if task['name'][-1] == ':' else 'task' self.body.insert(index, - urwid.AttrMap(task_widget, None, focus_map='selected')) + urwid.AttrMap(task_widget, style, focus_map='selected')) self.focus_position += 1 def connectSignals(self, task_widget):