Commit e384a348 authored by Bram Schoenmakers's avatar Bram Schoenmakers

Make main script more robust against invalid parameters.

parent 3338fe76
...@@ -17,12 +17,15 @@ def print_iterable(p_iter): ...@@ -17,12 +17,15 @@ def print_iterable(p_iter):
def usage(): def usage():
""" Prints the usage of the todo.txt CLI """ """ Prints the usage of the todo.txt CLI """
pass exit(1)
def error(p_message): def error(p_message, p_exit=True):
""" Prints a message on the standard error. """ """ Prints a message on the standard error. """
sys.stderr.write(p_message + '\n') sys.stderr.write(p_message + '\n')
if p_exit:
exit(1)
class Application(object): class Application(object):
def __init__(self): def __init__(self):
self.todolist = TodoList.TodoList([]) self.todolist = TodoList.TodoList([])
...@@ -30,9 +33,11 @@ class Application(object): ...@@ -30,9 +33,11 @@ class Application(object):
def add(self): def add(self):
""" Adds a todo item to the list. """ """ Adds a todo item to the list. """
if sys.argv[2]: try:
self.todolist.add(sys.argv[2]) self.todolist.add(sys.argv[2])
self.dirty = True self.dirty = True
except IndexError:
error("No todo text was given.")
def append(self): def append(self):
""" Appends a text to a todo item. """ """ Appends a text to a todo item. """
...@@ -49,37 +54,44 @@ class Application(object): ...@@ -49,37 +54,44 @@ class Application(object):
error("Invalid todo number given.") error("Invalid todo number given.")
def do(self): def do(self):
number = sys.argv[2] try:
number = sys.argv[2]
except IndexError:
usage()
try: try:
number = int(number) number = int(number)
self.todolist.set_completed(number) self.todolist.todo(number).set_completed(number)
self.dirty = True self.dirty = True
except IndexError:
usage()
except ValueError: except ValueError:
error("Invalid todo number given.") error("Invalid todo number given.")
def pri(self): def pri(self):
number = sys.argv[2] try:
priority = sys.argv[3] number = sys.argv[2]
priority = sys.argv[3]
if number and priority: except IndexError:
if re.match('^[A-Z]$', priority): usage()
try:
number = int(number) if re.match('^[A-Z]$', priority):
self.todolist.todo(number).set_priority(priority) try:
self.dirty = True number = int(number)
except AttributeError: self.todolist.todo(number).set_priority(priority)
error("Invalid todo number given.") self.dirty = True
except ValueError: except AttributeError:
error("Invalid todo number given.") error("Invalid todo number given.")
else: except ValueError:
error("Invalid priority given.") error("Invalid todo number given.")
else:
error("Invalid priority given.")
def list(self): def list(self):
sorter = Sorter.Sorter(Config.SORT_STRING) sorter = Sorter.Sorter(Config.SORT_STRING)
filters = [Filter.RelevanceFilter()] filters = [Filter.RelevanceFilter()]
if len(sys.argv) > 1: if len(sys.argv) > 2:
filters.append(Filter.GrepFilter(sys.argv[2])) filters.append(Filter.GrepFilter(sys.argv[2]))
print self.todolist.view(sorter, filters) print self.todolist.view(sorter, filters)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment