-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtimetable.py
117 lines (95 loc) · 4.48 KB
/
timetable.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
import openpyxl
import datetime
import os
def get_time_now():
delta = datetime.timedelta(hours=3, minutes=0)
return (datetime.datetime.now(datetime.timezone.utc) + delta).time()
def check_time_in_range(start: datetime, end: datetime, current: datetime) -> bool:
return start <= current <= end
def get_course(group: str) -> str:
book = openpyxl.open(os.path.abspath(__file__)[:-20] + 'data/itis_groups.xlsx', read_only=True)
sheet = book.active
for index in range(2, 58):
if sheet[index][0].value == group:
return sheet[index][2].value
book.close()
def get_index(group: str, sheet) -> int:
for index in range(3, 20):
if sheet[1][index].value == group:
return index
def get_path(group: str) -> str:
courses = {1: '1course.xlsx', 2: '2course.xlsx', 3: '3course.xlsx', 4: '4course.xlsx', 'Магистры': 'masters.xlsx'}
path = os.path.abspath(__file__)[:-20] + 'data/timetable/'
return f'{path}{courses[get_course(group)]}'
def get_day_index() -> int:
delta = datetime.timedelta(hours=3, minutes=0)
return (datetime.datetime.now(datetime.timezone.utc) + delta).weekday()
def get_lessons_by_day(group: str, sheet, day: int) -> str or bool:
weekdays = {0: "ПОНЕДЕЛЬНИК", 1: "ВТОРНИК", 2: "СРЕДА", 3: "ЧЕТВЕРГ", 4: "ПЯТНИЦА", 5: "СУББОТА"}
if day == 7:
day = 0
if day == 6:
return 'Воскресенье - выходной день!'
text = f'<i>{weekdays[day]}</i>\n'
index = get_index(group, sheet)
if (day == 2 or day == 5) and get_course(group) == 1:
return f'{text}Занятия по блоку дисциплин\n"Естественная-научная картина мира"'
for i in range(2 + day * 7, day * 7 + 9):
if sheet[i][index].value:
text += f'<u><b>{str(sheet[i][2].value)}</b></u>\n{str(sheet[i][index].value.strip())}\n\n'
if len(text) < 20:
return False
return text
def get_week_timetable(group: str) -> tuple:
book = openpyxl.open(get_path(group), read_only=True)
sheet = book.active
index_of_group = get_index(group, sheet)
days = []
for index_of_day in range(2, 44, 7):
text = f'<i>{sheet[index_of_day][1].value.upper()}</i>\n'
if (index_of_day == 16 or index_of_day == 37) and get_course(group) == 1:
text += 'Занятия по блоку дисциплин\n"Естественная-научная картина мира"'
else:
for index in range(index_of_day, index_of_day+7):
if sheet[index][index_of_group].value:
text += f'<u><b>{sheet[index][2].value}</b></u>\n{sheet[index][index_of_group].value.strip()}\n\n'
if len(text) < 20:
text += 'Пар нет'
days.append(text)
book.close()
return days[0], days[1], days[2], days[3], days[4], days[5]
def get_now_lesson(group: str) -> str:
time = get_time_now()
book = openpyxl.open(get_path(group), read_only=True)
sheet = book.active
index = get_index(group, sheet)
day = get_day_index()
if day == 6:
return 'Воскресенье - выходной день!'
for i in range(2 + day * 7, day * 7 + 9):
if sheet[i][index].value:
if (i - 2) % 7 > 0:
start_time = sheet[i-1][2].value[-5:]
else:
start_time = '08:00'
start = datetime.time(int(start_time[:2]), int(start_time[-2:]))
end_time = sheet[i][2].value[-5:]
end = datetime.time(int(end_time[:2]), int(end_time[-2:]))
if check_time_in_range(start, end, time):
if (day == 2 or day == 5) and get_course(group) == 1:
return f'<u><b>{sheet[i][2].value}</b></u>\nЗанятия по блоку дисциплин\n"Естественная-научная картина мира"'
return f'<u><b>{sheet[i][2].value}</b></u>\n{sheet[i][index].value}'
book.close()
return 'У тебя сейчас нет пары'
def get_today_lessons(group: str) -> str:
book = openpyxl.open(get_path(group), read_only=True)
sheet = book.active
text = get_lessons_by_day(group, sheet, day=get_day_index())
book.close()
return text
def get_tomorrow_lessons(group: str) -> str:
book = openpyxl.open(get_path(group), read_only=True)
sheet = book.active
text = get_lessons_by_day(group, sheet, day=get_day_index()+1)
book.close()
return text