[tool.poetry] name = "my-uploader-bot" version = "2.0.0" description = "Enhanced async uploader bot with comprehensive security and monitoring" authors = ["Your Name "] 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" [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"]