Commit 51e53587 authored by Jacek Sowiński's avatar Jacek Sowiński

'postpone' can now handle multiple todos

topydo will report which todo IDs ('numbers') were invalid if user
supplied more than one on command-line. Error for operation on single
todo ID are reported as usual (for consistency with other commands sake
and because I'm lazy and don't want to fix 2 tests :P).
parent a9f29074
...@@ -58,10 +58,28 @@ class PostponeCommand(Command): ...@@ -58,10 +58,28 @@ class PostponeCommand(Command):
self._process_flags() self._process_flags()
todos = []
invalid_numbers = []
for number in self.args[:-1]:
try: try:
todo = self.todolist.todo(self.argument(0)) todos.append(self.todolist.todo(number))
pattern = self.argument(1) except InvalidTodoException:
invalid_numbers.append(number)
if len(invalid_numbers) > 0 and len(todos) > 0:
for number in invalid_numbers:
self.error("Invalid todo number given: {}.".format(number))
elif len(invalid_numbers) == 1 and len(todos) == 0:
self.error("Invalid todo number given.")
else:
try:
pattern = self.args[-1]
self.printer.add_filter(PrettyPrinterNumbers(self.todolist))
if len(todos) > 0:
for todo in todos:
offset = _get_offset(todo) offset = _get_offset(todo)
new_due = relative_date_to_date(pattern, offset) new_due = relative_date_to_date(pattern, offset)
...@@ -74,15 +92,15 @@ class PostponeCommand(Command): ...@@ -74,15 +92,15 @@ class PostponeCommand(Command):
todo.set_tag(config().tag_due(), new_due.isoformat()) todo.set_tag(config().tag_due(), new_due.isoformat())
self.todolist.set_dirty() self.todolist.set_dirty()
self.printer.add_filter(PrettyPrinterNumbers(self.todolist))
self.out(self.printer.print_todo(todo)) self.out(self.printer.print_todo(todo))
else: else:
self.error("Invalid date pattern given.") self.error("Invalid date pattern given.")
break
else:
self.error(self.usage())
except InvalidCommandArgument: except (InvalidCommandArgument, IndexError):
self.error(self.usage()) self.error(self.usage())
except (InvalidTodoException):
self.error("Invalid todo number given.")
def usage(self): def usage(self):
return "Synopsis: postpone [-s] <NUMBER> <PATTERN>" return "Synopsis: postpone [-s] <NUMBER> <PATTERN>"
......
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