public
Description: command line based task management
Homepage: http://brianreily.com/projects/zen
Clone URL: git://github.com/breily/zen.git
zen / zen.py
100755 121 lines (115 sloc) 4.369 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/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()