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,
|
||||
}
|
||||
|
||||
# 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 = {
|
||||
0: [ # Понедельник
|
||||
(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),
|
||||
],
|
||||
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),
|
||||
],
|
||||
day: _build_day_schedule(_pairs_for_day(lessons))
|
||||
for day, lessons in _LESSON_WEEK.items()
|
||||
}
|
||||
|
||||
# --- Остальное ---
|
||||
|
|
|
|||
Loading…
Reference in a new issue