OAuth refreshes keys, added project view

This commit is contained in:
Aaron Gutierrez
2015-07-21 20:22:02 -07:00
parent 807ee5a617
commit ed94fb5917
2 changed files with 35 additions and 15 deletions

View File

@@ -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)

7
ui.py
View File

@@ -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):