Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_tg_bot_framework-1.0.0.tar.gz (9.5 kB view details)

Uploaded Source

Built Distribution

django_tg_bot_framework-1.0.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file django_tg_bot_framework-1.0.0.tar.gz.

File metadata

  • Download URL: django_tg_bot_framework-1.0.0.tar.gz
  • Upload date:
  • Size: 9.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.5.1 CPython/3.11.4 Windows/10

File hashes

Hashes for django_tg_bot_framework-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0760fcc4f70af798aaa41fb02e8b7fbb2103434c92e0c4f87e711148dfde09bb
MD5 2e6c590e585a98d7f7a18eb34b8552a5
BLAKE2b-256 01c6951f3868521756da069c2b50bab450dde209fe97ab3b232a64291b721679

See more details on using hashes here.

File details

Details for the file django_tg_bot_framework-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_tg_bot_framework-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 05669508fead65f70d3c7677df0aa3152b206453ba9e70c1fdd5126a827c250a
MD5 bfca7062f422006014b55dc9359333f5
BLAKE2b-256 7235df8cc26d886c8f48b4df1a8d0a592097d78e846c0ea8657594aa303ac33d

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page