File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ import json
2+ from datetime import datetime
3+ from pathlib import Path
4+
5+ TASKS_FILE = Path (__file__ ).parent / "tasks.json"
6+
7+ def load_tasks ():
8+ if not TASKS_FILE .exists ():
9+ return []
10+ with open (TASKS_FILE , "r" ) as f :
11+ return json .load (f )
12+
13+ def save_tasks (tasks ):
14+ with open (TASKS_FILE , "w" ) as f :
15+ json .dump (tasks , f , indent = 2 )
16+
17+ def add_task (title , priority = 3 , due_date = None ):
18+ tasks = load_tasks ()
19+ task = {
20+ "title" : title ,
21+ "priority" : priority ,
22+ "due_date" : due_date ,
23+ "completed" : False
24+ }
25+ tasks .append (task )
26+ save_tasks (tasks )
27+ print (f"Task added: { title } " )
28+
29+ def list_tasks ():
30+ tasks = sorted (load_tasks (), key = lambda t : (t ["priority" ], t .get ("due_date" ) or "9999-12-31" ))
31+ for i , task in enumerate (tasks , 1 ):
32+ status = "✅" if task ["completed" ] else "❌"
33+ due = task ["due_date" ] if task ["due_date" ] else "No due date"
34+ print (f"{ i } . [{ status } ] { task ['title' ]} (Priority { task ['priority' ]} , Due: { due } )" )
35+
36+ def complete_task (index ):
37+ tasks = load_tasks ()
38+ try :
39+ tasks [index - 1 ]["completed" ] = True
40+ save_tasks (tasks )
41+ print (f"Task completed: { tasks [index - 1 ]['title' ]} " )
42+ except IndexError :
43+ print ("Invalid task number" )
44+
45+ def remove_task (index ):
46+ tasks = load_tasks ()
47+ try :
48+ removed = tasks .pop (index - 1 )
49+ save_tasks (tasks )
50+ print (f"Removed: { removed ['title' ]} " )
51+ except IndexError :
52+ print ("Invalid task number" )
You can’t perform that action at this time.
0 commit comments