adds taskmanager
This commit is contained in:
parent
fb9b6f57f3
commit
5496377fb6
|
@ -1706,6 +1706,115 @@ for login in my_login_list:
|
||||||
print("\t{}: {}".format(key, login[key]))
|
print("\t{}: {}".format(key, login[key]))
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Coding challenge - Task manager
|
||||||
|
|
||||||
|
Can you create me a *task manager* please?
|
||||||
|
I made one that is run from the command line with different arguments to modify it's behaviour.
|
||||||
|
If this looks too challenging I can tell you that the *full code* is 64 lines long, including empty lines!
|
||||||
|
Those of you who already tried out [argparse](https://realpython.com/command-line-interfaces-python-argparse/) in the previous challenges will probably understand what's going on here.
|
||||||
|
Those who did not I urge you to have a look at the link above and don't hesitate to ask for help!
|
||||||
|
|
||||||
|
```bash
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py --help
|
||||||
|
usage: test.py [-h] [--file FILE] {add,delete,show} ...
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
{add,delete,show}
|
||||||
|
add adds a todo item to you todo list
|
||||||
|
delete deletes an item from your todo list
|
||||||
|
show show all your tasks
|
||||||
|
|
||||||
|
optional arguments:
|
||||||
|
-h, --help show this help message and exit
|
||||||
|
--file FILE, -f FILE path to your todo file
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py show
|
||||||
|
ID: 0 --- buy milk
|
||||||
|
ID: 1 --- clean house
|
||||||
|
ID: 2 --- test my code
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py add write some documentation
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py show
|
||||||
|
ID: 0 --- buy milk
|
||||||
|
ID: 1 --- clean house
|
||||||
|
ID: 2 --- test my code
|
||||||
|
ID: 3 --- write some documentation
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py delete 2
|
||||||
|
➜ python_course_doc git:(master) ✗ python3 test.py show
|
||||||
|
ID: 0 --- buy milk
|
||||||
|
ID: 1 --- clean house
|
||||||
|
ID: 2 --- write some documentation
|
||||||
|
➜ python_course_doc git:(master) ✗
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Spoiler warning</summary>
|
||||||
|
|
||||||
|
```python3
|
||||||
|
import argparse
|
||||||
|
import pathlib
|
||||||
|
|
||||||
|
|
||||||
|
def read_taskfile(taskfile_path):
|
||||||
|
tasks = []
|
||||||
|
if not pathlib.Path(taskfile_path).exists():
|
||||||
|
return tasks
|
||||||
|
with open(taskfile_path, "r") as fp:
|
||||||
|
lines = fp.readlines()
|
||||||
|
for line in lines:
|
||||||
|
task = line.strip()
|
||||||
|
tasks.append(task)
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
def write_taskfile(taskfile_path, tasks):
|
||||||
|
with open(taskfile_path, "w") as fp:
|
||||||
|
for task in tasks:
|
||||||
|
fp.write("{}\n".format(task))
|
||||||
|
|
||||||
|
|
||||||
|
def show_tasks(tasks):
|
||||||
|
counter = 0
|
||||||
|
for task in tasks:
|
||||||
|
print("ID: {} --- {}".format(counter, task))
|
||||||
|
counter += 1
|
||||||
|
|
||||||
|
|
||||||
|
def add_task(tasks, task):
|
||||||
|
tasks.append(task)
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
def delete_task(tasks, task_id):
|
||||||
|
tasks.pop(task_id)
|
||||||
|
return tasks
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("--file", "-f", default="./todo.tasks", help="path to your todo file")
|
||||||
|
subparser = parser.add_subparsers()
|
||||||
|
add = subparser.add_parser("add", help="adds a todo item to you todo list")
|
||||||
|
add.add_argument("task", nargs="*")
|
||||||
|
delete = subparser.add_parser("delete", help="deletes an item from your todo list")
|
||||||
|
delete.add_argument("idx", type=int, nargs="*")
|
||||||
|
show = subparser.add_parser("show", help="show all your tasks")
|
||||||
|
show.add_argument("show", action="store_true")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
taskfile = args.file
|
||||||
|
tasks = read_taskfile(taskfile)
|
||||||
|
|
||||||
|
if "task" in args:
|
||||||
|
tasks = add_task(tasks, " ".join(args.task))
|
||||||
|
write_taskfile(taskfile, tasks)
|
||||||
|
elif "idx" in args:
|
||||||
|
for idx in args.idx:
|
||||||
|
tasks = delete_task(tasks, idx)
|
||||||
|
write_taskfile(taskfile, tasks)
|
||||||
|
elif args.show:
|
||||||
|
show_tasks(tasks)
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
## csv, JSON and yaml
|
## csv, JSON and yaml
|
||||||
|
|
||||||
# Now for some useful scripting
|
# Now for some useful scripting
|
||||||
|
|
Loading…
Reference in New Issue