#!/usr/bin/env python
"""
See README for complete documentation.
Zen is developed by Brian Reily.
Contact information is available on brianreily.com
"""
import zen_io, zen_logic, zen_usage
import sys
from getopt import getopt
def main(argv=None):
""" Parses command line arguments. """
if argv == None: argv = sys.argv[1:]
if '-h' in argv or '--help' in argv: zen_usage.usage()
# No mode given will default to 'projects'
try:
mode = argv[0]
argv = argv[1:]
except: mode = 'projects'
# 'p' and 'project' specify a project.
# 't' and 'task' specify a task.
# 'tag' specify a tag.
# 'term' and 'query' specify a search term.
# 'q' and 'quiet' suppress output
try: opts, args = getopt(argv, 'p:t:q',
['project=', 'task=', 'tag=', 'quiet', 'query=', 'term='])
except:
print 'Error: Unknown option\n'
usage()
# Print project names
if mode in ('projects', 'p', 'projectlist'):
zen_logic.print_projects()
# Print tasks for one project
elif mode in ('tasks', 'tasklist', 't'):
project_name = None
for o, a in opts:
if o in ('-p', '--project'): project_name = a
if project_name is not None: zen_logic.print_tasks(project_name)
# If a project is not specified, print all tasks.
else: zen_logic.print_tasks('', all_tasks=True)
# Print details of one task
elif mode in ('task', 'taskinfo', 'details', 'd'):
project_name = None
task_name = None
for o, a in opts:
if o in ('-p', '--project'): project_name = a
if o in ('-t', '--task'): task_name = a
if project_name is None: project_name = 'todo list'
if task_name is None: zen_logic.print_tasks(project_name)
else: zen_logic.print_task(project_name, task_name)
# Add a task
elif mode in ('addtask', 'at', 'add'):
project_name = None
quiet = False
for o, a in opts:
if o in ('-p', '--project'): project_name = a
if o in ('-q', '--quiet'): quiet = True
# Defaults to 'todo list' - this project is required.
if project_name is None: project_name = 'todo list'
zen_logic.add_task(project_name, args, quiet)
# Search for a tag
elif mode in ('tagsearch', 'ts', 'tags', 'tag'):
tag = None
proj_name = None
for o, a in opts:
if o in ('--tag'): tag = a
if o in ('-p', '--project'): proj_name = a
zen_logic.tag_search(tag, proj_name)
# Delete a task
elif mode in ('deletetask', 'removetask', 'del', 'dt'):
proj_name = None
task_name = None
quiet = False
for o, a in opts:
if o in ('-t', '--task'): task_name = a
if o in ('-p', '--project'): proj_name = a
if o in ('-q', '--quiet'): quiet = True
if task_name is None: task_name = ' '.join(args)
if len(task_name): zen_logic.delete_task(task_name, proj_name, quiet)
else: print 'Error: No task supplied'
# Full text search
elif mode in ('search', 's'):
proj_name = None
query = None
for o, a in opts:
if o in ('-p', '--project'): proj_name = a
if o in ('--term', '--query'): query = a
if query is not None: zen_logic.search(query, proj_name)
else: zen_logic.search(' '.join(args), proj_name)
# Add a project
elif mode in ('addproject', 'ap', 'newproject'):
quiet = False
for o, a in opts:
if o in ('-q', '--quiet'): quiet = True
zen_logic.add_project(' '.join(args), quiet)
# Other Options
elif mode in ('revert', 'undo'):
quiet = False
for o, a in opts:
if o in ('-q', '--quiet'): quiet = True
zen_logic.revert(quiet)
elif mode in ('shuffle'):
quiet = False
for o, a in opts:
if o in ('-q', '--quiet'): quiet = True
zen_logic.shuffle(quiet)
elif mode in ('reverse'):
quiet = False
for o, a in opts:
if o in ('-q', '--quiet'): quiet = True
zen_logic.reverse(quiet)
elif mode in ('help', 'h'): zen_usage.usage()
else:
print 'Error: Could not find mode \'%s\'\n' %mode
zen_usage.usage()
if __name__ == '__main__': main()