Style changes, switch to oauth
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,5 +1,6 @@
|
|||||||
*.swp
|
*.swp
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
.config
|
.oauth
|
||||||
|
secrets.py
|
||||||
urwid-src
|
urwid-src
|
||||||
|
|||||||
38
cmdasana.py
38
cmdasana.py
@@ -1,18 +1,45 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
# -*- coding: latin-1 -*-
|
# -*- coding: latin-1 -*-
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import json
|
import json
|
||||||
|
|
||||||
import urwid
|
import urwid
|
||||||
import asana
|
import asana
|
||||||
|
|
||||||
import ui
|
import ui
|
||||||
|
from secrets import CLIENT_ID, CLIENT_SECRET
|
||||||
|
|
||||||
class CmdAsana:
|
class CmdAsana:
|
||||||
ASANA_API_KEY = os.environ['ASANA_API_KEY']
|
|
||||||
|
|
||||||
def __init__(self):
|
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()
|
self.me = self.client.users.me()
|
||||||
|
|
||||||
def myWorkspaces(self):
|
def myWorkspaces(self):
|
||||||
@@ -105,7 +132,10 @@ class CmdAsana:
|
|||||||
workspace_menu = ui.WorkspaceMenu(self.myWorkspaces())
|
workspace_menu = ui.WorkspaceMenu(self.myWorkspaces())
|
||||||
urwid.connect_signal(workspace_menu, 'click', self.showWorkspace)
|
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'])
|
self.showWorkspace(self.myWorkspaces()[0]['id'])
|
||||||
|
|
||||||
loop = urwid.MainLoop(self.frame,
|
loop = urwid.MainLoop(self.frame,
|
||||||
|
|||||||
9
ui.py
9
ui.py
@@ -8,7 +8,10 @@ LIST = 'list'
|
|||||||
palette = [
|
palette = [
|
||||||
('selected', 'standout', ''),
|
('selected', 'standout', ''),
|
||||||
('selected workspace', 'standout,bold', ''),
|
('selected workspace', 'standout,bold', ''),
|
||||||
('header', 'bold', ''),
|
('header divider', '', 'dark blue'),
|
||||||
|
('header', 'bold,dark cyan', ''),
|
||||||
|
('task', 'dark cyan', 'black'),
|
||||||
|
('workspace', 'yellow', '')
|
||||||
]
|
]
|
||||||
|
|
||||||
class WorkspaceMenu(urwid.Columns):
|
class WorkspaceMenu(urwid.Columns):
|
||||||
@@ -18,7 +21,7 @@ class WorkspaceMenu(urwid.Columns):
|
|||||||
for workspace in workspaces:
|
for workspace in workspaces:
|
||||||
button = WorkspaceButton(workspace, self.loadWorkspace)
|
button = WorkspaceButton(workspace, self.loadWorkspace)
|
||||||
self.contents.append((urwid.AttrMap(button,
|
self.contents.append((urwid.AttrMap(button,
|
||||||
None,
|
'workspace',
|
||||||
focus_map='selected workspace'),
|
focus_map='selected workspace'),
|
||||||
self.options('given', 24)))
|
self.options('given', 24)))
|
||||||
def keypress(self, size, key):
|
def keypress(self, size, key):
|
||||||
@@ -49,7 +52,7 @@ class TaskList(urwid.ListBox):
|
|||||||
body = urwid.SimpleFocusListWalker([])
|
body = urwid.SimpleFocusListWalker([])
|
||||||
for task_widget,_ in task_widgets.contents:
|
for task_widget,_ in task_widgets.contents:
|
||||||
self.connectSignals(task_widget)
|
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)
|
super(TaskList, self).__init__(body)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user