uploader-bot/pyproject.toml

152 lines
3.1 KiB
TOML

[tool.poetry]
name = "my-uploader-bot"
version = "2.0.0"
description = "Enhanced async uploader bot with comprehensive security and monitoring"
authors = ["Your Name <your.email@example.com>"]
readme = "README.md"
packages = [{include = "app"}]
[tool.poetry.dependencies]
python = "^3.11"
sanic = "^23.12.1"
sanic-cors = "^2.2.0"
asyncpg = "^0.29.0"
sqlalchemy = {extras = ["asyncio"], version = "^2.0.23"}
alembic = "^1.13.1"
aioredis = "^2.0.1"
structlog = "^23.2.0"
pydantic = "^2.5.2"
pydantic-settings = "^2.1.0"
python-multipart = "^0.0.6"
aiofiles = "^23.2.1"
python-magic = "^0.4.27"
pillow = "^10.1.0"
prometheus-client = "^0.19.0"
psutil = "^5.9.6"
bcrypt = "^4.1.2"
pyjwt = "^2.8.0"
cryptography = "^41.0.7"
httpx = "^0.25.2"
ujson = "^5.8.0"
orjson = "^3.9.10"
toncli = "^0.0.54"
ton = "^0.24"
validators = "^0.22.0"
python-dateutil = "^2.8.2"
typing-extensions = "^4.8.0"
tonsdk = "^1.0.15"
pytonconnect = "^0.3.0"
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.3"
pytest-asyncio = "^0.21.1"
pytest-cov = "^4.1.0"
black = "^23.11.0"
isort = "^5.12.0"
flake8 = "^6.1.0"
mypy = "^1.7.1"
pre-commit = "^3.5.0"
bandit = "^1.7.5"
safety = "^2.3.5"
[tool.poetry.group.test.dependencies]
pytest-xdist = "^3.4.0"
pytest-mock = "^3.12.0"
pytest-benchmark = "^4.0.0"
hypothesis = "^6.92.1"
factory-boy = "^3.3.0"
faker = "^20.1.0"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
[tool.black]
line-length = 88
target-version = ['py311']
include = '\.pyi?$'
extend-exclude = '''
/(
# directories
\.eggs
| \.git
| \.hg
| \.mypy_cache
| \.tox
| \.venv
| build
| dist
)/
'''
[tool.isort]
profile = "black"
multi_line_output = 3
line_length = 88
known_first_party = ["app"]
[tool.mypy]
python_version = "3.11"
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
warn_unreachable = true
strict_equality = true
[[tool.mypy.overrides]]
module = [
"magic.*",
"toncli.*",
"ton.*",
]
ignore_missing_imports = true
[tool.pytest.ini_options]
minversion = "7.0"
addopts = "-ra -q --strict-markers --strict-config"
testpaths = ["tests"]
asyncio_mode = "auto"
markers = [
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
"integration: marks tests as integration tests",
"unit: marks tests as unit tests",
"api: marks tests as API tests",
"database: marks tests as database tests",
"redis: marks tests as redis tests",
]
[tool.coverage.run]
source = ["app"]
omit = [
"*/tests/*",
"*/venv/*",
"*/.venv/*",
]
[tool.coverage.report]
exclude_lines = [
"pragma: no cover",
"def __repr__",
"if self.debug:",
"if settings.DEBUG",
"raise AssertionError",
"raise NotImplementedError",
"if 0:",
"if __name__ == .__main__.:",
"class .*\bProtocol\):",
"@(abc\.)?abstractmethod",
]
[tool.bandit]
exclude_dirs = ["tests", "venv", ".venv"]
skips = ["B101", "B601"]
[tool.bandit.assert_used]
skips = ["*_test.py", "*/test_*.py"]