def show(): fmt_str = "{:<20}{:>50}\n" conf = config.get() t_id = conf['state']['task'] uri = '/tasks/{}'.format(t_id) task = client.get(uri) projects = map(lambda x: x['name'], task['projects']) sys.stdout.write(fmt_str.format('Name:', task['name'])) sys.stdout.write( fmt_str.format('Parent:', task['parent'] if task['parent'] else '')) sys.stdout.write(fmt_str.format('Created:', task['created_at'])) sys.stdout.write(fmt_str.format('Modified:', task['modified_at'])) sys.stdout.write( fmt_str.format('Due:', task['due_on'] if task['due_on'] else '')) sys.stdout.write(fmt_str.format('Workspace:', task['workspace']['name'])) sys.stdout.write(fmt_str.format('Projects:', ', '.join(projects))) sys.stdout.write(fmt_str.format('Notes:', task['notes'])) sys.stdout.write('Comments:\n\n') uri = '/tasks/{}/stories'.format(t_id) stories = client.get(uri) for story in stories: if story['type'] == 'comment': sys.stdout.write('{:<80}'.format(story['text'])) sys.stdout.write('\n' + '-' * 40 + '\n')
def set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, workspaces = list() ws_id = 0 while ws_id > len(workspaces) or ws_id <= 0: ws_id = input('Active workspace: ') if ws_id > len(workspaces) or ws_id <= 0: sys.stderr.write('Unknown workspace, valid options are 1 - {}\n'.format(len(workspaces))) conf['state']['workspace'] = workspaces[int(ws_id) - 1]['id'] config.write(conf)
def task_set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, ts = tasks() t_id = 0 while t_id > len(ts) or t_id <= 0: t_id = input('Active task: ') if t_id > len(ts) or t_id <= 0: sys.stderr.write('Unknown task, valid options are 1 - {}\n'.format(len(ts))) conf['state']['task'] = ts[int(t_id) - 1]['id'] config.write(conf)
def list(): fmt_str = "{:<5}{:<20}{:<20}\n" sys.stdout.write(fmt_str.format('', 'ID','Name')) conf = config.get() ws_id = conf['state']['workspace'] uri = '/workspaces/{}/projects'.format(ws_id) projs = client.get(uri) for i, p in enumerate(projs): sys.stdout.write(fmt_str.format('[%s]' % (i+1), p['id'], p['name'])) return 0, projs
def list(): fmt_str = "{:<5}{:<20}{:<20}\n" sys.stdout.write(fmt_str.format('', 'ID', 'Name')) conf = config.get() ws_id = conf['state']['workspace'] uri = '/workspaces/{}/projects'.format(ws_id) projs = client.get(uri) for i, p in enumerate(projs): sys.stdout.write(fmt_str.format('[%s]' % (i + 1), p['id'], p['name'])) return 0, projs
def tasks(): fmt_str = "{:<5}{:<20}{:<20}\n" sys.stdout.write(fmt_str.format('', 'ID', 'Name')) conf = config.get() p_id = conf['state']['project'] uri = '/projects/{}/tasks'.format(p_id) params = {'assignee': conf['state']['user_id'], 'completed_since': 'now'} tasks = client.get(uri, params=params) for i, t in enumerate(tasks): sys.stdout.write(fmt_str.format('[%s]' % (i + 1), t['id'], t['name'])) return 0, tasks
def task_set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, ts = tasks() t_id = 0 while t_id > len(ts) or t_id <= 0: t_id = input('Active task: ') if t_id > len(ts) or t_id <= 0: sys.stderr.write('Unknown task, valid options are 1 - {}\n'.format( len(ts))) conf['state']['task'] = ts[int(t_id) - 1]['id'] config.write(conf)
def set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, projs = list() p_id = 0 while p_id > len(projs) or p_id <= 0: p_id = input('Active project: ') if p_id > len(projs) or p_id <= 0: sys.stderr.write('Unknown project, valid options are 1 - {}\n'.format(len(projs))) conf['state']['project'] = projs[int(p_id) - 1]['id'] config.write(conf) return 0
def set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, workspaces = list() ws_id = 0 while ws_id > len(workspaces) or ws_id <= 0: ws_id = input('Active workspace: ') if ws_id > len(workspaces) or ws_id <= 0: sys.stderr.write( 'Unknown workspace, valid options are 1 - {}\n'.format( len(workspaces))) conf['state']['workspace'] = workspaces[int(ws_id) - 1]['id'] config.write(conf)
def set(): conf = config.get() if 'state' not in conf: conf['state'] = {} ec, projs = list() p_id = 0 while p_id > len(projs) or p_id <= 0: p_id = input('Active project: ') if p_id > len(projs) or p_id <= 0: sys.stderr.write( 'Unknown project, valid options are 1 - {}\n'.format( len(projs))) conf['state']['project'] = projs[int(p_id) - 1]['id'] config.write(conf) return 0
def _do_requst(method, uri, params=None, data=None): func = getattr(requests, method) if params is not None: func = partial(func, params=params) if data is not None: func = partial(func, data=data) conf = config.get() url = make_url(uri) resp = func(url, headers={'Authorization': 'Bearer {}'.format(conf['api_token'])}) data = resp.json() data = data['data'] if 'data' in data else data return data
def list(): fmt_str = "{:<5}{:<20}{:<20}\n" sys.stdout.write(fmt_str.format('', 'ID','Name')) conf = config.get() ws_id = conf['state']['workspace'] uri = '/workspaces/{}/tasks'.format(ws_id) params = { 'assignee': conf['state']['user_id'], 'completed_since': 'now' } tasks = client.get(uri, params=params) for i, t in enumerate(tasks): sys.stdout.write(fmt_str.format('[%s]' % (i+1), t['id'], t['name'])) return 0, tasks
def _do_requst(method, uri, params=None, data=None): func = getattr(requests, method) if params is not None: func = partial(func, params=params) if data is not None: func = partial(func, data=data) conf = config.get() url = make_url(uri) resp = func( url, headers={'Authorization': 'Bearer {}'.format(conf['api_token'])}) data = resp.json() data = data['data'] if 'data' in data else data return data
def main(): from . import __version__ args = docopt(__doc__, version='asa {}'.format(__version__)) if args['conf']: if args['me']: ec = config._set_me() else: ec = config.init() sys.exit(ec) conf = config.get() if not conf: sys.stderr.write("Please run 'asa configure' before running for the first time.\n") sys.exit(1) if args['state']: ec = config.show() elif args['ws']: if args['t']: if args['set']: ec = workspace.task_set() else: ec, _ = workspace.tasks() elif args['set']: ec = workspace.set() elif args['<workspace_id>'] is not None: ec = workspace.show(args['<workspace_id>']) else: ec, _ = workspace.list() elif args['p']: if args['t']: if args['set']: ec = project.task_set() else: ec, _ = project.tasks() elif args['set']: ec = project.set() else: ec, _ = project.list() elif args['t']: ec = task.show() sys.exit(ec)
def show(): fmt_str = "{:<20}{:>50}\n" conf = config.get() t_id = conf['state']['task'] uri = '/tasks/{}'.format(t_id) task = client.get(uri) projects = map(lambda x: x['name'], task['projects']) sys.stdout.write(fmt_str.format('Name:', task['name'])) sys.stdout.write(fmt_str.format('Parent:', task['parent'] if task['parent'] else '')) sys.stdout.write(fmt_str.format('Created:', task['created_at'])) sys.stdout.write(fmt_str.format('Modified:', task['modified_at'])) sys.stdout.write(fmt_str.format('Due:', task['due_on'] if task['due_on'] else '')) sys.stdout.write(fmt_str.format('Workspace:', task['workspace']['name'])) sys.stdout.write(fmt_str.format('Projects:', ', '.join(projects))) sys.stdout.write(fmt_str.format('Notes:', task['notes'])) sys.stdout.write('Comments:\n\n') uri = '/tasks/{}/stories'.format(t_id) stories = client.get(uri) for story in stories: if story['type'] == 'comment': sys.stdout.write('{:<80}'.format(story['text'])) sys.stdout.write('\n' + '-' * 40 + '\n')
def make_url(uri): conf = config.get() return 'https://{}/api/1.0/{}'.format(conf['api_host'], uri.lstrip('/'))