Repository navigation
Expand file tree
/
Copy pathmanager.py
More file actions
90 lines (79 loc) · 3.03 KB
/
Copy pathmanager.py
File metadata and controls
90 lines (79 loc) · 3.03 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
from task import Task
from category import Category
from validation import ask_text
##########################################################################################################################################
class Manager:
def __init__(self):
self.categories = {}
def add_category(self, name):
"""Adds a new category to the manager."""
if name in self.categories:
print(f"Category '{name}' already exists.")
return
self.categories[name] = Category(name)
def add_task(self, category_name, task):
"""Adds a task to a specific category"""
if category_name not in self.categories:
print(f"Category '{category_name}' doesn't exist.")
return
self.categories[category_name].add_task(task)
def all_pending_tasks(self):
"""Returns a list of all pending tasks in all categories."""
pending = []
for category in self.categories.values():
pending.extend(category.pending_tasks())
return pending
def __str__(self):
if not self.categories:
return "No categories yet."
return "\n\n".join(str(cat) for cat in self.categories.values())
@staticmethod
def show_all(manager):
print(manager)
@staticmethod
def show_pending(manager):
pending = manager.all_pending_tasks()
if not pending:
print("No pending tasks.")
return
for task in pending:
print(task)
print()
@staticmethod
def add_category(manager):
name = ask_text("Category name: ")
manager.add_category(name)
@staticmethod
def add_task(manager):
if not manager.categories:
print("No categories yet. Create one first.")
return
print("Available categories:", ", ".join(manager.categories.keys()))
category_name = ask_text("Which category? ")
title = ask_text("Task title: ")
due_date = ask_text("Due date: ")
description = ask_text("Description (optional): ")
task = Task(title, due_date, description)
manager.add_task(category_name, task)
@staticmethod
def mark_completed(manager):
if not manager.categories:
print("No categories yet.")
return
print("Available categories:", ", ".join(manager.categories.keys()))
category_name = ask_text("Which category? ")
if category_name not in manager.categories:
print("That category doesn't exist.")
return
category = manager.categories[category_name]
if not category.tasks:
print("This category has no tasks.")
return
for i, task in enumerate(category.tasks):
print(f"{i}. {task.title}")
try:
index = int(ask_text("Which task number? "))
category.tasks[index].mark_completed()
print("Marked as completed.")
except (ValueError, IndexError):
print("Invalid task number.")