No description
  • Python 68.3%
  • HTML 29.4%
  • Dockerfile 2.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
xfx1337 ae1c1c4323 feat: initial Flask backend for future exams schedule
Serves the schedule (previously hardcoded in the browser extension) and
the semester-start date as public JSON, editable through a password
protected /admin page without redeploying. Includes Docker/Compose setup
for one-command local runs and deploys.
2026-08-30 16:11:56 +03:00
data feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
templates feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
.dockerignore feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
.env.example feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
.gitignore feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
app.py feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
docker-compose.yml feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
Dockerfile feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
README.md feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00
requirements.txt feat: initial Flask backend for future exams schedule 2026-08-30 16:11:56 +03:00

lms-future-exams-backend

Отдаёт расписание будущих контрольных работ для плагина «future exams» lms-extension и позволяет редактировать его через простую защищённую паролем веб-страницу — без пересборки расширения и без перезапуска сервера.

Эндпоинты

  • GET /api/schedule — публичный, отдаёт текущий data/schedule.json как есть. Используется расширением.
  • GET /api/config — публичный, отдаёт data/config.json (сейчас там только дата первой недели семестра). Используется расширением для расчёта номера недели в формате отображения «неделя N».
  • GET /admin, POST /admin — форма редактирования обоих файлов сразу, защищена HTTP Basic Auth (ADMIN_USERNAME / ADMIN_PASSWORD). Не имеет отношения к расширению — обычная веб-страница, открывается по прямой ссылке.

Формат data/schedule.json

Тот же формат, что был захардкожен в расширении:

{
  "Название курса": [
    { "name": "Контрольная работа 1", "date": "30 03" }
  ]
}
  • Ключ верхнего уровня — название курса (или его часть — расширение матчит по includes, регистронезависимо).
  • date — "ДД ММ", без года (текущий год подставляется на стороне расширения).

Формат data/config.json

{ "semesterStart": "01 09" }
  • semesterStart — дата первой недели семестра, "ДД ММ" без года. От неё расширение считает номер недели для формата отображения «неделя N» (см. getUpcomingScheduleItems в future_exams_view.js). Менять при смене семестра — иначе номера недель поедут (ровно это и произошло в начале осеннего семестра, когда в коде расширения была захардкожена дата весеннего).

Сохранение через /admin проверяет структуру обоих файлов (см. validate_schedule / validate_config в app.py) и атомарно перезаписывает их на диске — данные сразу доступны на /api/schedule и /api/config, без рестарта процесса.

Запуск через Docker (рекомендуется)

Один контейнер, один порт (8084), data/ смонтирована с хоста — правки через /admin переживают пересборку/перезапуск.

cp .env.example .env  # и поменяй ADMIN_PASSWORD
docker compose up --build

Сервер на http://localhost:8084. Остановить — docker compose down.

Запуск локально без Docker

python -m venv .venv
source .venv/bin/activate  # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env  # и поменяй ADMIN_PASSWORD
set -a && source .env && set +a  # Windows: задать переменные вручную
python app.py

Сервер поднимется на http://localhost:8084 (порт — PORT в .env).

Деплой

Dockerfile — самый простой путь (любой хостинг с поддержкой Docker: Render, Railway, Fly.io, VPS + docker compose up -d и т.п.). Обязательно установить ADMIN_USERNAME и ADMIN_PASSWORD в переменных окружения — без них процесс не стартует (см. проверку в начале app.py).

После деплоя нужно обновить URL в расширении: src/plugins/course-view/future_exams_view.js (константа FUTURE_EXAMS_API_URL) и host_permissions в manifest.config.js — там пока стоит плейсхолдер https://lms-future-exams-backend.example.com.