/vyatsu-schedule-backend

Backend-сервер проекта VyatSU schedule

Primary LanguageHTML

Backend-сервер для VyatSU schedule

Данный сервер предоставляет REST API для расписания занятий студентов Вятского государственного университета.

Для разработчиков

Необходимые переменные окружения

FLASK_ENV - среда запуска: development, testing и production. По умолчанию development.

Production-only

REDIS_URL - URL базы данных Redis в формате redis://<user>:<password>@<host>:<port>/<database>.

PDF2JSON_API_URL - URL pdf2json-конвертера.

Опционально

MONGODB_URI - URI базы данных MongoDB в формате mongodb://<user>:<password>@<host>:<port>/<database>. Поле <database> обязательно.

Используется для ведения логов. В журнал записываются только запросы к API. Коллекция: logs.

Формат записи
{
    "path": "<full URL path, string>",
    "useragent": "<user agent, string>",
    "date": "<timestamp of request, date>",
    "status": "<response status code, number>"
}

Тесты

Модульные тесты

python -m pytest --pyargs tests.unit

Интеграционные тесты

Конфигурация приложения для тестирования: config.py

Осторожно! Во время выполнения некоторых тестов данные в БД могут быть безвозвратно утеряны. Перед запуском тестов удостоверьтесь, что используете тестовую базу данных, а не основную.

python -m pytest --pyargs tests.integration

Запуск

gunicorn

export FLASK_ENV=<ENV>
gunicorn -b 0.0.0.0:<PORT> wsgi:app

development server (werkzeug)

export FLASK_ENV=<ENV>
flask run

Администрирование

На сайте ВятГУ новое расписание занятий выкладывается каждые две недели. Для того, чтобы сервер всегда возвращал актуальное расписание, необходимо не реже, чем один раз в две недели обновлять информацию с сайта ВятГУ. Для этого нужно запустить следующий скрипт:

export FLASK_ENV=<ENV>
export REDIS_URL=<REDIS_URL>
export PDF2JSON_API_URL=<PDF2JSON_API_URL>
flask prefetch --force

Чтобы загрузить информацию только в том случае, если ее нет в БД, то запустите скрипт без ключа --force.

Docker

  1. Собираем образ

    docker build -t imagename .
    
  2. Запускаем

    docker run --name somename -d -p 8080:80 \
      -e FLASK_ENV=<ENV> \
      -e MONGODB_URI=<URI> \
      -e REDIS_URL=<URL> \
      -e PDF2JSON_API_URL=<PDF2JSON_API_URL> \
      imagename