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.
Release files for django-tg-bot-framework 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_tg_bot_framework-1.0.0.tar.gz | 9.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_tg_bot_framework-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.1 kB
Release files / django_tg_bot_framework-1.0.0.tar.gz
| Download URL | django_tg_bot_framework-1.0.0.tar.gz |
|---|---|
| Size | 9.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0760fcc4f70af798aaa41fb02e8b7fbb2103434c92e0c4f87e711148dfde09bb
|
|
BLAKE2b-256 checksum How to use checksums |
01c6951f3868521756da069c2b50bab450dde209fe97ab3b232a64291b721679
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.1 CPython/3.11.4 Windows/10
|
Release files / django_tg_bot_framework-1.0.0-py3-none-any.whl
| Download URL | django_tg_bot_framework-1.0.0-py3-none-any.whl |
|---|---|
| Size | 12.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
05669508fead65f70d3c7677df0aa3152b206453ba9e70c1fdd5126a827c250a
|
|
BLAKE2b-256 checksum How to use checksums |
7235df8cc26d886c8f48b4df1a8d0a592097d78e846c0ea8657594aa303ac33d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/1.5.1 CPython/3.11.4 Windows/10
|