diff --git a/.gitignore b/.gitignore index 87b62ae..d30d505 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.swp *.pyc -.config +.oauth +secrets.py urwid-src diff --git a/cmdasana.py b/cmdasana.py index 0c3ece2..e391088 100755 --- a/cmdasana.py +++ b/cmdasana.py @@ -1,18 +1,45 @@ #!/usr/bin/env python # -*- coding: latin-1 -*- import os +import sys import json import urwid import asana import ui +from secrets import CLIENT_ID, CLIENT_SECRET class CmdAsana: - ASANA_API_KEY = os.environ['ASANA_API_KEY'] - def __init__(self): - self.client = asana.Client.basic_auth(self.ASANA_API_KEY) + try: + f = open(".oauth", "r") + token = json.loads(f.readline()) + f.close() + self.client = asana.Client.oauth( + client_id=CLIENT_ID, + token=token + ) + except IOError: + self.client = asana.Client.oauth( + client_id=CLIENT_ID, + client_secret=CLIENT_SECRET, + redirect_uri='urn:ietf:wg:oauth:2.0:oob' + ) + (url, state) = self.client.session.authorization_url() + try: + import webbrowser + webbrowser.open(url) + except Exception: + print "Go to the following link and enter the code:" + print url + + 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.me = self.client.users.me() def myWorkspaces(self): @@ -105,7 +132,10 @@ class CmdAsana: workspace_menu = ui.WorkspaceMenu(self.myWorkspaces()) urwid.connect_signal(workspace_menu, 'click', self.showWorkspace) - self.frame = urwid.Pile([('pack', workspace_menu), None]) + self.frame = urwid.Pile([ + ('pack', workspace_menu), + ('pack', urwid.AttrMap(urwid.Divider(), 'header divider')), + None]) self.showWorkspace(self.myWorkspaces()[0]['id']) loop = urwid.MainLoop(self.frame, diff --git a/ui.py b/ui.py index b101263..2bccadd 100644 --- a/ui.py +++ b/ui.py @@ -8,7 +8,10 @@ LIST = 'list' palette = [ ('selected', 'standout', ''), ('selected workspace', 'standout,bold', ''), - ('header', 'bold', ''), + ('header divider', '', 'dark blue'), + ('header', 'bold,dark cyan', ''), + ('task', 'dark cyan', 'black'), + ('workspace', 'yellow', '') ] class WorkspaceMenu(urwid.Columns): @@ -18,7 +21,7 @@ class WorkspaceMenu(urwid.Columns): for workspace in workspaces: button = WorkspaceButton(workspace, self.loadWorkspace) self.contents.append((urwid.AttrMap(button, - None, + 'workspace', focus_map='selected workspace'), self.options('given', 24))) def keypress(self, size, key): @@ -49,7 +52,7 @@ class TaskList(urwid.ListBox): body = urwid.SimpleFocusListWalker([]) for task_widget,_ in task_widgets.contents: self.connectSignals(task_widget) - body.append(urwid.AttrMap(task_widget, None, focus_map='selected')) + body.append(urwid.AttrMap(task_widget, 'task', focus_map='selected')) super(TaskList, self).__init__(body)