mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-10-29 03:36:15 +08:00
123 lines
3.2 KiB
TOML
123 lines
3.2 KiB
TOML
[project]
|
||
name = "auto-bangumi"
|
||
version = "4.0.0-beta.1"
|
||
description = "AutoBangumi - Automated anime download manager"
|
||
requires-python = ">=3.13"
|
||
dependencies = [
|
||
"fastapi>=0.109.0",
|
||
"uvicorn>=0.27.0",
|
||
"httpx[socks]>=0.25.0",
|
||
"httpx-socks>=0.9.0",
|
||
"beautifulsoup4>=4.12.0",
|
||
"sqlmodel>=0.0.14",
|
||
"sqlalchemy[asyncio]>=2.0.0",
|
||
"aiosqlite>=0.19.0",
|
||
"pydantic>=2.0.0",
|
||
"bcrypt>=4.1",
|
||
"cryptography>=42.0.0",
|
||
"python-multipart>=0.0.6",
|
||
"python-dotenv>=1.0.0",
|
||
"Jinja2>=3.1.2",
|
||
"openai>=1.54.3",
|
||
"semver>=3.0.1",
|
||
"sse-starlette>=1.6.5",
|
||
"webauthn>=2.0.0",
|
||
"urllib3>=2.0.3",
|
||
"mcp>=1.8.0",
|
||
"anthropic>=0.116.0",
|
||
"google-genai>=2.10.0",
|
||
"packaging>=26.0",
|
||
]
|
||
|
||
[dependency-groups]
|
||
dev = [
|
||
"pytest>=8.0.0",
|
||
"pytest-asyncio>=0.23.0",
|
||
"pytest-mock>=3.12.0",
|
||
"ruff>=0.1.0",
|
||
"black>=24.0.0",
|
||
"pre-commit>=3.0.0",
|
||
"mypy>=2.1.0",
|
||
"vulture>=2.16",
|
||
# ab-plugin 命令行与 ab_sdk 轮子的打包配置(sdk/),可编辑安装,源码仍在 src/ab_sdk
|
||
"autobangumi-sdk",
|
||
]
|
||
|
||
[tool.pytest.ini_options]
|
||
testpaths = ["src/test"]
|
||
pythonpath = ["src"]
|
||
asyncio_mode = "auto"
|
||
markers = [
|
||
"e2e: End-to-end integration tests (require Docker)",
|
||
]
|
||
|
||
[tool.ruff]
|
||
line-length = 88
|
||
target-version = "py313"
|
||
exclude = [".venv", "venv", "build", "dist"]
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "I"]
|
||
ignore = ["E501", "F401"]
|
||
fixable = ["ALL"]
|
||
unfixable = []
|
||
|
||
[tool.ruff.lint.mccabe]
|
||
max-complexity = 10
|
||
|
||
[tool.uv]
|
||
package = false
|
||
|
||
[tool.uv.sources]
|
||
autobangumi-sdk = { path = "sdk", editable = true }
|
||
|
||
[tool.black]
|
||
line-length = 88
|
||
target-version = ['py313']
|
||
|
||
[tool.mypy]
|
||
python_version = "3.13"
|
||
# 非严格基线:先打开对未标注函数体的检查(能捕获协程未 await 等真实 bug),
|
||
# 暂不强制所有函数都标注类型。
|
||
check_untyped_defs = true
|
||
disallow_untyped_defs = false
|
||
|
||
# module.__version__ 是构建期生成的文件,仓库中不存在(见 module/conf/config.py 的 try/except)
|
||
[[tool.mypy.overrides]]
|
||
module = "module.__version__"
|
||
ignore_missing_imports = true
|
||
|
||
# httpx_socks 已安装但未发布类型存根
|
||
[[tool.mypy.overrides]]
|
||
module = "httpx_socks.*"
|
||
ignore_missing_imports = true
|
||
|
||
# aiohttp 仅用于 e2e mock server(在独立 Docker 容器中安装,不在本项目依赖中)
|
||
[[tool.mypy.overrides]]
|
||
module = "aiohttp"
|
||
ignore_missing_imports = true
|
||
|
||
# 测试代码惯用 `obj.method = AsyncMock()` 直接打桩实例方法,这是标准、安全的
|
||
# unittest.mock 用法,但 mypy 默认禁止给方法赋值。只关闭这一条错误码,
|
||
# attr-defined 等其余检查(含真实 bug)在测试代码中保持开启。
|
||
[[tool.mypy.overrides]]
|
||
module = "test.*"
|
||
disable_error_code = ["method-assign"]
|
||
|
||
[tool.vulture]
|
||
# 死代码检查:新的未使用函数/类/方法会让 CI 失败。框架通过装饰器注册的入口
|
||
# (路由、校验器等)由 ignore_decorators 排除;仅测试使用的辅助方法和 pydantic
|
||
# 字段等误报登记在 vulture_whitelist.py。
|
||
paths = ["src/module", "src/main.py", "vulture_whitelist.py"]
|
||
min_confidence = 60
|
||
ignore_decorators = [
|
||
"@router.*",
|
||
"@*_router.*",
|
||
"@model_validator",
|
||
"@field_validator",
|
||
"@property",
|
||
"@app.*",
|
||
"@server.*",
|
||
"@mcp.*",
|
||
]
|