-
Notifications
You must be signed in to change notification settings - Fork 1
/
todolist.py
120 lines (95 loc) · 3.71 KB
/
todolist.py
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
from sqlalchemy import create_engine, Column, String, Integer, Date
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from datetime import datetime, timedelta
Base = declarative_base()
class Table(Base):
__tablename__ = 'task'
id = Column(Integer, primary_key=True)
task = Column(String)
deadline = Column(Date, default=datetime.today())
def __repr__(self):
return self.task
class ToDoList:
def __init__(self):
self.engine = create_engine('sqlite:///todo.db?check_same_thread=False')
self.Session = sessionmaker(bind=self.engine)
self.session = self.Session()
self.today = datetime.today().date()
Base.metadata.create_all(self.engine)
def main(self):
while True:
print("1) Today's tasks")
print("2) Week's tasks")
print("3) All tasks")
print("4) Missed tasks")
print("5) Add task")
print("6) Delete task")
print("0) Exit")
menu = input()
if menu == '1':
print(f"\nToday {self.today.day} {self.today.strftime('%b')}:")
self.tasks_today(datetime.today().date())
elif menu == '2':
self.tasks_week()
elif menu == '3':
self.all_tasks()
elif menu == '4':
self.del_missed()
elif menu == '5':
self.add_task()
elif menu == '6':
self.del_task()
elif menu == '0':
print("Bye!")
quit()
def tasks_today(self, date):
tasks = self.session.query(Table).filter(Table.deadline == date).all()
if not tasks:
print('Nothing to do!')
else:
for n, task in enumerate(tasks):
print(f"{n + 1}. {task}")
print()
def tasks_week(self):
weekday = {0: "Monday", 1: "Tuesday", 2: "Wednesday", 3: "Thursday", 4: "Friday", 5: "Saturday", 6: 'Sunday'}
for i in range(7):
day = self.today + timedelta(days=i)
print(f"{weekday[day.weekday()]} {day.day} {day.strftime('%b')}:")
self.tasks_today(day)
def all_tasks(self):
print("\nAll tasks:")
tasks = self.session.query(Table).order_by(Table.deadline).all()
for n, task in enumerate(tasks):
date = task.deadline
print(f"{n+1}. {task}. {date.day} {date.strftime('%b')}")
print()
def add_task(self):
new_row = Table(task=input("\nEnter task\n"),
deadline=datetime.strptime(input("Enter deadline\n"), '%Y-%m-%d'))
self.session.add(new_row)
self.session.commit()
print("The task has been added!\n")
def del_missed(self):
print("\nMissed tasks:")
tasks = self.session.query(Table).filter(Table.deadline < datetime.today().date()).all()
if tasks:
for n, task in enumerate(tasks):
print(f"{n+1}. {task}")
else:
print("Nothing is missed!")
print()
def del_task(self):
tasks_to_del = self.session.query(Table).filter(Table.deadline <= datetime.today().date()).all()
print("\nChoose the number of the task you want to delete:")
if tasks_to_del:
for n, task in enumerate(tasks_to_del):
print(f"{n+1}. {task}")
choice = int(input())
task = tasks_to_del[choice-1]
self.session.delete(task)
self.session.commit()
print("The task has been deleted!\n")
else:
print("Nothing to delete\n")
ToDoList().main()