fix: derive /break timing table from the actual lesson schedule
The old SCHEDULE dict was hand-written for a previous timetable and
never got updated when LESSON_SCHEDULE changed, so Wednesday (day=2)
was left empty ("Сегодня кайфуем дома, перекур не нужен") even though
the new schedule has 4 lessons that day. SCHEDULE is now generated
from the pairs actually present in _LESSON_WEEK plus PAIR_TIMES, so it
can't drift out of sync again.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
47ef30800f
commit
5b025a7cc9
1 changed files with 38 additions and 39 deletions
77
config.py
77
config.py
|
|
@ -131,46 +131,45 @@ LESSON_SCHEDULE = {
|
||||||
"lower": _LESSON_WEEK,
|
"lower": _LESSON_WEEK,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# SCHEDULE — тайминг перекуров для /break, построен из фактических пар в
|
||||||
|
# _LESSON_WEEK, а не задаётся руками, чтобы не рассинхронизироваться при
|
||||||
|
# правках расписания (раньше здесь была отдельная захардкоженная таблица,
|
||||||
|
# которая не обновилась вместе с LESSON_SCHEDULE и врала на днях с занятиями).
|
||||||
|
# Каждая пара (95 мин) состоит из двух академ. часов по 45 мин с 5-минутным
|
||||||
|
# перекуром между ними; между парами перекур — фактический зазор по PAIR_TIMES.
|
||||||
|
def _time_to_minutes(t: time) -> int:
|
||||||
|
return t.hour * 60 + t.minute
|
||||||
|
|
||||||
|
|
||||||
|
def _minutes_to_time(m: int) -> time:
|
||||||
|
return make_time(m // 60, m % 60)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_day_schedule(pairs: list[int]) -> list[tuple[time, time, int | None]]:
|
||||||
|
entries = []
|
||||||
|
for idx, pair in enumerate(pairs):
|
||||||
|
start_t, end_t = PAIR_TIMES[pair]
|
||||||
|
start_m = _time_to_minutes(start_t)
|
||||||
|
end_m = _time_to_minutes(end_t)
|
||||||
|
mid_m = start_m + 45
|
||||||
|
second_start_m = mid_m + 5
|
||||||
|
entries.append((start_t, _minutes_to_time(mid_m), 5))
|
||||||
|
if idx == len(pairs) - 1:
|
||||||
|
entries.append((_minutes_to_time(second_start_m), end_t, None))
|
||||||
|
else:
|
||||||
|
next_start_t, _ = PAIR_TIMES[pairs[idx + 1]]
|
||||||
|
gap = _time_to_minutes(next_start_t) - end_m
|
||||||
|
entries.append((_minutes_to_time(second_start_m), end_t, gap))
|
||||||
|
return entries
|
||||||
|
|
||||||
|
|
||||||
|
def _pairs_for_day(day_lessons: list[dict]) -> list[int]:
|
||||||
|
return sorted({item["pair"] for item in day_lessons if item.get("pair") is not None})
|
||||||
|
|
||||||
|
|
||||||
SCHEDULE = {
|
SCHEDULE = {
|
||||||
0: [ # Понедельник
|
day: _build_day_schedule(_pairs_for_day(lessons))
|
||||||
(make_time(9, 50), make_time(10, 35), 5),
|
for day, lessons in _LESSON_WEEK.items()
|
||||||
(make_time(10, 40), make_time(11, 25), 30),
|
|
||||||
(make_time(11, 55), make_time(12, 40), 5),
|
|
||||||
(make_time(12, 45), make_time(13, 30), 15),
|
|
||||||
(make_time(13, 45), make_time(14, 30), 5),
|
|
||||||
(make_time(14, 35), make_time(15, 20), 30),
|
|
||||||
(make_time(15, 50), make_time(16, 35), 5),
|
|
||||||
(make_time(16, 40), make_time(17, 25), None),
|
|
||||||
],
|
|
||||||
1: [ # Вторник
|
|
||||||
(make_time(9, 50), make_time(10, 35), 5),
|
|
||||||
(make_time(10, 40), make_time(11, 25), 30),
|
|
||||||
(make_time(11, 55), make_time(12, 40), 5),
|
|
||||||
(make_time(12, 45), make_time(13, 30), 15),
|
|
||||||
(make_time(13, 45), make_time(14, 30), 5),
|
|
||||||
(make_time(14, 35), make_time(15, 20), None),
|
|
||||||
],
|
|
||||||
2: [], # Среда
|
|
||||||
3: [ # Четверг
|
|
||||||
(make_time(8, 0), make_time(8, 45), 5),
|
|
||||||
(make_time(8, 50), make_time(9, 35), 15),
|
|
||||||
(make_time(9, 50), make_time(10, 35), 5),
|
|
||||||
(make_time(10, 40), make_time(11, 25), 30),
|
|
||||||
(make_time(11, 55), make_time(12, 40), 5),
|
|
||||||
(make_time(12, 45), make_time(13, 30), 15),
|
|
||||||
(make_time(13, 45), make_time(14, 30), 5),
|
|
||||||
(make_time(14, 35), make_time(15, 20), 30),
|
|
||||||
(make_time(15, 50), make_time(16, 35), 5),
|
|
||||||
(make_time(16, 40), make_time(17, 25), None),
|
|
||||||
],
|
|
||||||
4: [ # Пятница
|
|
||||||
(make_time(9, 50), make_time(10, 35), 5),
|
|
||||||
(make_time(10, 40), make_time(11, 25), 30),
|
|
||||||
(make_time(11, 55), make_time(12, 40), 5),
|
|
||||||
(make_time(12, 45), make_time(13, 30), 15),
|
|
||||||
(make_time(13, 45), make_time(14, 30), 5),
|
|
||||||
(make_time(14, 35), make_time(15, 20), None),
|
|
||||||
],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- Остальное ---
|
# --- Остальное ---
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue