Кэш: по интервалу таблица перечитывается всегда

Поле modified у публичной ссылки Яндекса может «застыть» (кэш на стороне
Диска), и проверка «modified не изменился → не скачиваем» держала старые
данные до неопределённого момента: стенд показывал прежнее расписание, хотя
в таблице правки уже были. Теперь на каждое обновление (и по интервалу, и по
кнопке) таблица скачивается заново; modified только показывается в админке.

Плюс к этому:
- при старте пишем в лог предупреждение, если ссылка в настройках отличается
  от SCHEDULE_LINK из окружения (именно так терялось время в прошлый раз:
  на стенде в настройках была сохранена другая ссылка);
- на странице админки у поля ссылки пояснение, что значение хранится в
  настройках стенда и имеет приоритет над .env.
This commit is contained in:
2026-09-29 13:50:17 +03:00
parent ab92fb44e1
commit d4b47c30bf
5 changed files with 27 additions and 19 deletions

View File

@@ -99,8 +99,8 @@ nginx (https://schedule.our-place.ru) → 127.0.0.1:8090
ошибка, число групп);
- **вставить новую ссылку**: она проверяется скачиванием и разбором таблицы
до сохранения — нерабочая не применится, данные на сайте не пострадают;
- **принудительно обновить расписание** — вне интервала и без проверки
«таблица не менялась» (то же, что делает фоновое обновление, но сейчас);
- **принудительно обновить расписание** — вне интервала, не дожидаясь
фонового обновления (интервал и так перечитывает таблицу целиком);
- **задать интервал обновления** в минутах (`1…1440`).
Как это устроено:
@@ -128,7 +128,7 @@ src/
source.py загрузка файла по публичной ссылке Я.Диска
lessons.py разбор ячеек занятий (общий конвейер ролей)
parsing.py листы → расписание, недели, индексы преподавателей/аудиторий
cache.py ScheduleCache: блокировка, интервал, modified, stale-while-error
cache.py ScheduleCache: блокировка, интервал, stale-while-error
settings.py хранилище настроек админки (ссылка, интервал) в JSON-файле
errors.py ScheduleError
frontend/
@@ -152,7 +152,7 @@ tests/
test_lessons.py все форматы ячеек
test_xlsx.py чтение книги
test_parsing.py разбор листов, недели, индексы
test_api.py API и поведение кэша (TTL/modified/stale, 404/400/502)
test_api.py API и поведение кэша (интервал/stale, 404/400/502)
```
## API