Framework for building telegram bots
Project description
Django Telegram Bot Framework
Фреймворк для создания чат-ботов Telegram на базе Django. Предоставляет свою стейт-машину, вебхук и редактируемые текстовки в БД.
Как развернуть local-окружение
Для запуска ПО вам понадобятся консольный Git, Docker и Docker Compose. Инструкции по их установке ищите на официальных сайтах:
Склонируйте репозиторий.
В репозитории используются хуки pre-commit, чтобы автоматически запускать линтеры и автотесты. Перед началом разработки установите pre-commit package manager.
В корне репозитория запустите команду для настройки хуков:
$ pre-commit install
В последующем при коммите автоматически будут запускаться линтеры и автотесты. Есть линтеры будет недовольны, или автотесты сломаются, то коммит прервётся с ошибкой.
Сначала скачайте и соберите докер-образы с помощью Docker Сompose:
$ docker compose pull --ignore-buildable
$ docker compose build
Как вести разработку
Как обновить local-окружение
Чтобы обновить local-окружение до последней версии подтяните код из центрального окружения и пересоберите докер-образы:
$ git pull
$ docker compose build
Как установить python-пакет в образ
В качестве менеджера пакетов для образа используется Poetry.
Конфигурационные файлы Poetry pyproject.toml
и poetry.lock
проброшены в контейнер в виде volume, поэтому изменения зависимостей внутри контейнера попадают и наружу в git-репозиторий.
Вот пример как добавить в зависимости библиотеку asks. Запустите все контейнеры. Подключитесь к уже работающему контейнеру django_tg_bot_framework
и внутри запустите команду poetry add asks
:
$ docker compose up -d
$ docker compose exec django_tg_bot_framework bash
container:$ poetry add asks
Конфигурационные файлы pyproject.toml
и poetry.lock
обновятся не только внутри контейнера, но и в репозитории благодаря настроенным docker volumes. Осталось только закоммитить изменения.
Чтобы все новые контейнеры также получали свежий набор зависимостей не забудьте обновить докер-образ:
$ docker compose build django_tg_bot_framework
Аналогичным образом можно удалять python-пакеты.
Как запустить линтеры Python
Линтеры запускаются в отдельном docker-контейнере, а код подключается к нему с помощью volume. Например, чтобы проверить линтером код в каталогах django_tg_bot_framework
и tests
запустите команду:
$ docker compose run --rm py-linters flake8 /django_tg_bot_framework/ /tests/
[+] Building 0.0s (0/0)
[+] Building 0.0s (0/0)
/django_tg_bot_framework/models.py:118:1: W391 blank line at end of file
1
Цифра в конце 1
-- это количество найденных линтером ошибок форматирования кода.
Тот же образ с линтером можно использовать, чтобы подсветить ошибки форматирования прямо внутри IDE. Вот пример настройки Sublime Text с предустановленными плагинами SublimeLinter и SublimeLinter-flake8:
// project settings file
{
"settings": {
// specify folder where docker-compose.yaml file placed to be able to launch `docker compose`
"SublimeLinter.linters.flake8.working_dir": "/path/to/repo/",
"SublimeLinter.linters.flake8.executable": ["docker", "compose", "run", "--rm", "py-linters", "flake8"],
},
}
Как запустить тесты
В проекте используются автотесты pytest. Запустить их можно так:
$ docker compose run --rm django_tg_bot_framework pytest
=========================== test session starts ===========================
platform linux -- Python 3.11.4, pytest-7.3.2, pluggy-1.2.0
rootdir: /opt/app/src
plugins: django-4.5.2, httpx-0.22.0, anyio-3.7.0
collected 23 items
test_decorators.py ...... [ 26%]
test_route_validation.py ........ [ 60%]
test_router.py ... [ 73%]
test_state_machine.py ..... [ 95%]
test_states.py . [100%]
============================================================= 6 passed in 0.22s==============================================
Если вы чините поломанный тест, часто его запускаете и не хотите ждать когда отработают остальные, то можно запускать их по-отдельности. При этом полезно включать опцию -s
, чтобы pytest не перехватывал вывод в консоль и выводил все сообщения. Пример для теста test_redirect_tg_commands
из файла tests/test_decorators.py.py
:
$ docker compose run --rm django_tg_bot_framework pytest -s test_decorators.py::test_redirect_tg_commands
Подробнее про Pytest usage.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for django_tg_bot_framework-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0760fcc4f70af798aaa41fb02e8b7fbb2103434c92e0c4f87e711148dfde09bb |
|
MD5 | 2e6c590e585a98d7f7a18eb34b8552a5 |
|
BLAKE2b-256 | 01c6951f3868521756da069c2b50bab450dde209fe97ab3b232a64291b721679 |
Hashes for django_tg_bot_framework-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 05669508fead65f70d3c7677df0aa3152b206453ba9e70c1fdd5126a827c250a |
|
MD5 | bfca7062f422006014b55dc9359333f5 |
|
BLAKE2b-256 | 7235df8cc26d886c8f48b4df1a8d0a592097d78e846c0ea8657594aa303ac33d |