- Python 68.3%
- HTML 29.4%
- Dockerfile 2.3%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
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. |
||
| data | ||
| templates | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| app.py | ||
| docker-compose.yml | ||
| Dockerfile | ||
| README.md | ||
| requirements.txt | ||
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.