Migrate to Poetry

This commit is contained in:
2025-02-27 15:31:58 +00:00
parent 41971aabdf
commit 85c72462c4
11 changed files with 1394 additions and 65 deletions

View File

@@ -1,6 +1,6 @@
name: Lint name: Lint
'on': "on":
push: push:
branches: branches:
- main - main
@@ -9,13 +9,17 @@ name: Lint
- main - main
jobs: jobs:
run-linters: lint:
name: Run linters
runs-on: ubuntu-latest runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.12"]
steps: steps:
- name: Check out Git repository - uses: actions/checkout@v4
uses: actions/checkout@v4 - name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
- name: wemake-python-styleguide with:
uses: wemake-services/wemake-python-styleguide@0.17.0 python-version: ${{ matrix.python-version }}
- name: Lint with ruff
run: |
make lint

View File

@@ -1,5 +1,34 @@
FROM python:3.12-alpine FROM python:3.12.3-alpine3.18 AS base
WORKDIR /app
FROM base AS builder
ENV PYTHONFAULTHANDLER=1 \
PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=random \
PIP_NO_CACHE_DIR=off \
PIP_DISABLE_PIP_VERSION_CHECK=on \
PIP_DEFAULT_TIMEOUT=100 \
POETRY_NO_INTERACTION=1 \
POETRY_VIRTUALENVS_CREATE=false \
PATH="$PATH:/runtime/bin" \
PYTHONPATH="$PYTHONPATH:/runtime/lib/python3.12/site-packages" \
# Versions:
POETRY_VERSION=2.1.1
# System deps:
RUN apk add build-base unzip wget python3-dev libffi-dev rust cargo openssl-dev
RUN pip install "poetry==$POETRY_VERSION" "poetry-plugin-export"
WORKDIR /src
# Generate requirements and install *all* dependencies.
COPY pyproject.toml poetry.lock /src/
RUN poetry export --without-hashes --no-interaction --no-ansi -f requirements.txt -o requirements.txt
RUN pip install --prefix=/runtime --force-reinstall -r requirements.txt
FROM base AS runtime
COPY --from=builder /runtime /usr/local
COPY . /app COPY . /app
RUN pip install . WORKDIR /app
ENTRYPOINT smsbot EXPOSE 8000/tcp
CMD ["/usr/local/bin/smsbot"]

17
Makefile Normal file
View File

@@ -0,0 +1,17 @@
.venv:
python3 -m pip install poetry
python3 -m poetry install --with github
.PHONY: tests
tests: .venv
python3 -m poetry run pytest
lint: .venv
python3 -m poetry run ruff check --output-format=github --select=E9,F63,F7,F82 --target-version=py37 .
python3 -m poetry run ruff check --output-format=github --target-version=py37 .
serve-uwsgi:
SIMPLE_WEBFINGER_CONFIG_FILE="examples/example-config.yaml" python3 -m poetry run gunicorn "simple_webfinger.app:create_app()"
serve:
DEBUG_METRICS=1 SIMPLE_WEBFINGER_CONFIG_FILE="examples/example-config.yaml" FLASK_DEBUG=1 FLASK_APP="simple_webfinger.app:create_app()" python3 -m poetry run flask run

1291
poetry.lock generated Normal file

File diff suppressed because it is too large Load Diff

36
pyproject.toml Normal file
View File

@@ -0,0 +1,36 @@
[project]
name = "smsbot"
version = "0.0.5"
description = "A simple Telegram bot to receive SMS messages."
authors = [
{name = "Andrew Williams",email = "andy@tensixtyone.com"}
]
license = {text = "MIT"}
readme = "README.md"
requires-python = "<=3.11"
dependencies = [
"flask (>=3.1.0,<4.0.0)",
"waitress (>=3.0.2,<4.0.0)",
"twilio (>=9.4.6,<10.0.0)",
"python-telegram-bot (<20)",
"prometheus-client (>=0.21.1,<0.22.0)"
]
[tool.poetry.scripts]
smsbot = "smsbot.cli:main"
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
[tool.poetry.group.dev.dependencies]
pytest = "^8.0.0"
ruff = "^0.9.0"
pytest-mock = "^3.12.0"
pytest-flask = "^1.3.0"
[tool.poetry.group.github]
optional = true
[tool.poetry.group.github.dependencies]
pytest-github-actions-annotate-failures = "^0.3.0"

View File

@@ -1 +0,0 @@
wheel

View File

@@ -1,5 +0,0 @@
flask
waitress
twilio
python-telegram-bot
prometheus_client

View File

@@ -1,36 +0,0 @@
[metadata]
name = smsbot
version = 0.0.4
description = A simple Telegram bot to receive SMS messages.
long_description = file: README.md, LICENSE
license = MIT
license_file = LICENSE
classifiers =
Framework :: Flask
License :: OSI Approved :: MIT License
Programming Language :: Python :: 3
Programming Language :: Python :: 3.11
[options]
zip_safe = False
include_package_data = True
packages = smsbot
install_requires =
flask
waitress
twilio
python-telegram-bot<=14
prometheus_client
[options.entry_points]
console_scripts =
smsbot = smsbot.cli:main
[flake8]
format = wemake
ignore = D,E501,WPS432,WPS323,WPS2,S104,WPS412,WPS100
max-line-length = 120
exclude = setup.py,env,build
[darglint]
docstring_style=sphinx

View File

@@ -1,3 +0,0 @@
from setuptools import setup
setup()

View File

@@ -2,12 +2,9 @@ import argparse
import logging import logging
import os import os
import pkg_resources
from smsbot.telegram import TelegramSmsBot from smsbot.telegram import TelegramSmsBot
from smsbot.webhook_handler import TwilioWebhookHandler from smsbot.webhook_handler import TwilioWebhookHandler
from smsbot.utils import get_smsbot_version
pkg_version = pkg_resources.require('smsbot')[0].version
def main(): def main():
@@ -21,7 +18,7 @@ def main():
args = parser.parse_args() args = parser.parse_args()
logging.basicConfig(level=logging.getLevelName(args.log_level)) logging.basicConfig(level=logging.getLevelName(args.log_level))
logging.info('smsbot v%s', pkg_version) logging.info('smsbot v%s', get_smsbot_version())
logging.debug('Arguments: %s', args) logging.debug('Arguments: %s', args)
# Start bot # Start bot

View File

@@ -1,5 +1,5 @@
import pkg_resources from importlib.metadata import version
def get_smsbot_version(): def get_smsbot_version():
return pkg_resources.require('smsbot')[0].version return version("smsbot")