Skip to content

📊 🎉 A Python/ AioHttp REST API service will analyse the data provided and identify the demand for gifts among residents of different age groups in different cities by month.

License

Notifications You must be signed in to change notification settings

Speccy-Rom/celebrate

Repository files navigation

Celebrate - REST API service

A Python/ AioHttp REST API service will analyse the data provided and identify the demand for gifts among residents of different age groups in different cities by month.

In this application I have developed and tested a REST API service in Python, packaged in a lightweight Docker container and deployed using Ansible.

###The following handlers are implemented in the service:


  • POST /imports (Adds a new upload with data);

  • GET /imports/$import_id/citizens (Returns the inhabitants of the specified upload);

  • PATCH /imports/$import_id/citizens/$citizen_id ( Modifies information about the inhabitant (and their relatives) in the specified upload);

  • GET /imports/$import_id/citizens/birthdays (Calculates how many gifts each person in the upload will buy for their relatives (first order), grouped by month);

  • GET /imports/$import_id/towns/stat/percentile/age (Calculates the 50th, 75th and 99th percentiles of age (full years) of residents by town in the specified sample)

The project involves technologies such as:

  • Python 3
  • AioHttp
  • Asyncio
  • PostgreSQL
  • sqlalchemy core
  • Database
  • alembic
  • ansible
  • Docker
  • Docker-compose
  • flake8
  • Pytest
  • Swagger

Что внутри?

Приложение упаковано в Docker-контейнер и разворачивается с помощью Ansible.

Внутри Docker-контейнера доступны две команды: 🐚analyzer-db — утилита для управления состоянием базы данных и 🐚analyzer-api — утилита для запуска REST API сервиса.

Как использовать?

Как применить миграции:

.. code-block:: shell

docker run -it \ ....#soon

Как запустить REST API сервис локально на порту 8081:

.. code-block:: shell

docker run -it -p 8081:8081 \
    .....#soon

Все доступные опции запуска любой команды можно получить с помощью аргумента 🐚--help:

.. code-block:: shell

docker run ...#soon
docker run ...#soon

Опции для запуска можно указывать как аргументами командной строки, так и переменными окружения с префиксом 🐚ANALYZER (например: вместо аргумента :shell:--pg-url можно воспользоваться 🐚ANALYZER_PG_URL).

Как развернуть?

Чтобы развернуть и запустить сервис на серверах, добавьте список серверов в файл deploy/hosts.ini (с установленной Ubuntu) и выполните команды:

.. code-block:: shell

cd deploy
ansible-playbook -i hosts.ini --user=root deploy.yml

Разработка

Быстрые команды

  • 🐚make Отобразить список доступных команд
  • 🐚make devenv Создать и настроить виртуальное окружение для разработки
  • 🐚make postgres Поднять Docker-контейнер с PostgreSQL
  • 🐚make lint Проверить синтаксис и стиль кода с помощью pylama_
  • 🐚make clean Удалить файлы, созданные модулем distutils_
  • 🐚make test Запустить тесты
  • 🐚make sdist Создать source distribution_
  • 🐚make docker Собрать Docker-образ
  • 🐚make upload Загрузить Docker-образ на hub.docker.com

.. _pylama: https://github.com/klen/pylama .. _distutils: https://docs.python.org/3/library/distutils.html .. _source distribution: https://packaging.python.org/glossary/

Как подготовить окружение для разработки?

.. code-block:: shell

make devenv make postgres source env/bin/activate analyzer-db upgrade head analyzer-api

После запуска команд приложение начнет слушать запросы на 0.0.0.0:8081. Для отладки в PyCharm необходимо запустить 🐚env/bin/analyzer-api.

Как запустить тесты локально?

.. code-block:: shell

make devenv
make postgres
source env/bin/activate
pytest

Для отладки в PyCharm необходимо запустить 🐚env/bin/pytest.

Как запустить нагрузочное тестирование?

Для запуска locust_ необходимо выполнить следующие команды:

.. code-block:: shell

make devenv
source env/bin/activate
locust

После этого станет доступен веб-интерфейс по адресу http://localhost:8089

.. _locust: https://locust.io

About

📊 🎉 A Python/ AioHttp REST API service will analyse the data provided and identify the demand for gifts among residents of different age groups in different cities by month.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published