Телеграм-бот для организации эко-субботников.
- Установка poetry и запуск виртауального окружения
- Установка pre-commit hook
- Подключение системы мониторинга Sentry
- Запуск базы и применение миграций на локальной машине
- Запуск бота
Для Linux, macOS, Windows (WSL):
curl -sSL https://install.python-poetry.org | python3 -
Для Windows (Powershell):
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
В macOS и Windows сценарий установки предложит добавить папку с исполняемым файлом poetry в переменную PATH. Сделайте это, выполнив следующую команду:
macOS
export PATH="/Users/jetbrains/.local/bin:$PATH"
Windows
$Env:Path += ";C:\Users\jetbrains\AppData\Roaming\Python\Scripts"; setx PATH "$Env:Path"
Не забудьте поменять jetbrains на имя вашего пользователя. Настройка окружения poetry для pycharm тут
Для проверки установки выполните следующую команду:
poetry --version
Установка автодополнений bash(опцонально)
poetry completions bash >> ~/.bash_completion
Создание виртуально окружения
poetry env use python3.10
Установка зависимостей (для разработки)
poetry install --with dev
Запуск оболочки и активация виртуального окружения
your@device:~/your_project_pwd/bot_delo_zhivet$ poetry shell
Проверка активации виртуального окружения
poetry env list
Сначала поднимаем контейнер с базой Postgres
docker-compose -f postgres-local.yaml up -d --build
Если есть чьи-то миграции в проекте, то применяем их
alembic upgrade head
Если производятся изменения в моделях:
Каждую новую autogenerate-миграцию необходимо проверить перед применением по доке: https://geoalchemy-2.readthedocs.io/en/latest/alembic.html#interactions-between-alembic-and-geoalchemy-2 в том числе проверить выполнение следующих правил:remove the create_index statement in the upgrade() function.
- remove the
drop_index
statement in thedowngrade()
function. - remove the
create_index
statement in theupgrade()
function.
alembic stamp head
alembic revision --autogenerate -m "you_migration_name"
Дальше применяем:
alembic upgrade head
Для того чтобы при каждом коммите выполнялись pre-commit проверки, необходимо:
- Установить pre-commit
- Установить pre-commit hooks
Модуль pre-commit уже добавлен в requirements, таким образом после настройки виртуального окружения, должен установится автоматически Если этого не произошло, то установка осуществляется согласно требованиям инструкций:
- установка через менеджер пакетов brew
brew install pre-commit
- установка через poetry
poetry add pre-commit
- установка через pip
pip install pre-commit
Проверить установку pre-commit можно командой (при активированном виртуальном окружении):
pre-commit --version
>>pre-commit 2.20.0
Установка осуществляется hook командой
pre-commit install --all
В дальнейшем при выполнении команды git commit
будут выполняться проверки перечисленные в файле .pre-commit-config.yaml
.
Если не видно какая ошибка мешает выполнить commit, то можно запустить хуки в ручную можно командой
pre-commit run --all-files
- Зарегистрируйтесь на платформе: https://sentry.io/signup/
- Подключите Sentry к админке, для этого:
- Создайте новый проект, выбрав при этом платформу FLASK. https://-ac.sentry.io/projects/new/
- В настройках проекта перейдите в раздел "Client Keys", скопируйте ключ DSN (Data Source Name). https://-ac.sentry.io/settings/projects//keys/
- Присвойте переменной SENTRY_DSN_ADMIN в файле .env полученное значение.
- Подключите Sentry к боту, выполнив для этого аналогичные шаги:
- Создайте еще один проект, выбрав при этом платформу PYTHON.
- В настройках проекта перейдите в раздел "Client Keys", скопируйте ключ DSN.
- Присвойте переменной SENTRY_DSN_BOT в файле .env полученное значение.
Переименуйте файл .env.example в .env и заполните его. Запуск может быть в режимах polling и webhook. Для режима webhook в файле .env должны быть указаны параметры WEBHOOK_DOMAIN и WEBHOOK_PORT. Подробнее об этом написано в официальном гайде telegram
Для Linux, macOS, Windows (WSL):
your@device:~/your_project_pwd/bot_delo_zhivet/$ poetry run runbot
flask run
После запуска:
Перейти по ссылке в терминала, ввести логин(admin) и пароль(admin123)