Files
remnashop/pyproject.toml
Ilay 9664d7e199 fix: broadcast close button, webhook response, FreeKassa nonce and misc fixes
- added get_close_notification_button helper and CLOSE_BUTTON_ID constant
- added close button as a selectable option in broadcast button picker
- renamed get_goto_buttons to get_broadcast_buttons
- fixed webhook endpoint: moved gateway.build_webhook_response out of finally block
- re-enabled YooKassa webhook verification
- fixed FreeKassa nonce: switched to time.time_ns() for strict monotonicity
- fixed FreeKassa currency: use .upper() instead of .value
- fixed system stats getter: use stats.memory.used instead of active, cpu.cores instead of physical_cores
- fixed node traffic_limit: pass None instead of 0 to i18n_format_bytes_to_unit
- added as_payload to UserDevicesUpdatedEvent and SubscriptionRevokedEvent with user keyboard
- added session.close() in UnitOfWork __aexit__
- added python-multipart dependency
- added DOCS constant, updated update keyboard links to docs instead of GitHub README
- bumped version 0.7.5
2026-04-09 08:50:45 +05:00

105 lines
2.2 KiB
TOML

[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"]