todo task delete command
We should be able to delete a given task from a given project.
Let's implement this command as well. You need to create the delete.py
file:
$ tree
.
└── TODO
├── init.py
├── remove.py
├── rename.py
├── task
│ ├── add.py
│ ├── delete.py
│ ├── __init__.py
│ └── list.py
├── todo
└── _todos
├── database.py
├── __init__.py
└── todo.py
3 directories, 11 files
Next, we need to add delete functionality to our Todoer controller.
The following code portion is from Implement the remove CLI Command
_todos/todo.py
...
class Todoer:
...
def delete(self, task_id: int) -> CurrentTodo:
"""Delete a to-do from the database using its id or index."""
read = self._db_handler.read_todos()
if read.error:
return CurrentTodo({}, read.error)
try:
read.todo_list[self.project_name].pop(task_id - 1)
except IndexError:
return CurrentTodo({}, ID_ERROR)
write = self._db_handler.write_todos(read.todo_list)
return CurrentTodo(write.todo_list, write.error)
...
Add the actual delete command:
delete.py
from _todos import todo
def delete(project_name: str, task_id: int) -> None:
"""
Delete given task from the project
Args:
project_name (str): the project name
task_id (str): the task id to be removed
Return: None
"""
todo_ = todo.get_todoer(project_name)
todo_.delete(task_id)
print("Success")
Let's test our delete command:
$ ./todo task list daily
ID. Is Done | Description
1 X morning walk
2 X night walk
3 X gym
4 X eat vegetables
5 X eat fruits
Removing night walk from our daily routine(not in real life):
List tasks again:
$ ./todo task list daily
ID. Is Done | Description
1 X morning walk
2 X night walk
3 X gym
4 X eat vegetables
Again, as you have already noticed everything is dead simple and CLI depends on what you wrote in pure Python, translating arguments to CLI arguments. As a result, you don't have to write extra CLI command code - every function is already a command.