[project] name = "remnashop" version = "0.0.0" description = "This is a Telegram bot for selling VPN subscriptions. It works with Remnawave" authors = [{ name = "snoups" }] readme = "README.md" license = "MIT" requires-python = ">=3.12,<3.13" dependencies = [ "greenlet>=3.2.4", "uvicorn>=0.38.0", "fastapi>=0.120.2", "python-multipart>=0.0.22", "remnapy==2.7.0", # "dishka~=1.7.2", "adaptix==3.0.0b11", "aiogram~=3.25.0", "aiohttp-socks>=0.10.0", "aiogram-dialog~=2.5.0", "fluentogram~=1.2.1", # "asyncpg~=0.30.0", "alembic~=1.16.5", "sqlalchemy[mypy]>=2.0.0", "redis~=7.0.0", "taskiq[orjson]~=0.12.1", "taskiq-redis~=1.2.1", # "pydantic-settings~=2.11.0", "loguru~=0.7.3", "msgspec~=0.19.0", "cryptography>=46.0.3", "qrcode[pil]>=8.2", ] [tool.uv.sources] remnapy = { git = "https://github.com/snoups/remnapy", rev = "b712d1d" } [project.urls] homepage = "https://t.me/@remna_shop" repository = "https://github.com/snoups/remnashop" [dependency-groups] dev = [ "aiogram-dialog[tools]~=2.5.0", "mypy>=1.18.2", "ruff>=0.14.2", "pytest>=8.4.2", "watchfiles>=1.1.1", "ftl-extract>=0.9.0", "types-cachetools", "pytest-asyncio", ] [tool.ruff] target-version = "py312" line-length = 100 lint.select = [ "C", "DTZ", "E", "F", "I", "ICN", "N", "PLC", "PLE", "Q", "T", "W", "YTT", ] lint.ignore = ["N805"] exclude = ["venv", ".venv", ".idea"] [tool.mypy] packages = ["src"] plugins = ["sqlalchemy.ext.mypy.plugin", "pydantic.mypy"] exclude = ["venv", ".venv", ".idea", "tests"] warn_unused_configs = true disallow_subclassing_any = true disallow_untyped_calls = true disallow_untyped_defs = true disallow_incomplete_defs = true check_untyped_defs = true disallow_untyped_decorators = true warn_unused_ignores = true warn_return_any = true no_implicit_reexport = true strict_equality = true extra_checks = true explicit_package_bases = true [[tool.mypy.overrides]] module = ["fluentogram.*", "remnawave.*", "qrcode.*", "remnapy.*"] follow_untyped_imports = true [[tool.mypy.overrides]] module = ["app.telegram.handlers.*"] strict_optional = false warn_return_any = false disable_error_code = ["union-attr"]