139 lines
3.3 KiB
TOML
139 lines
3.3 KiB
TOML
[project]
|
|
name = "meijiaka-ai-api"
|
|
version = "1.6.3"
|
|
description = "美家卡智影 - AI 视频创作后端 API"
|
|
authors = [{ name = "Meijiaka Team" }]
|
|
readme = "README.md"
|
|
requires-python = ">=3.13"
|
|
license = { text = "MIT" }
|
|
classifiers = [
|
|
"Development Status :: 3 - Alpha",
|
|
"Intended Audience :: Developers",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.13",
|
|
]
|
|
|
|
dependencies = [
|
|
# Web 框架 (FastAPI 0.116+ 修复 Starlette 安全漏洞)
|
|
"fastapi>=0.136.1",
|
|
"uvicorn[standard]~=0.32.0",
|
|
"python-multipart~=0.0.20",
|
|
|
|
# 认证 & 安全
|
|
"passlib[bcrypt]~=1.7.4",
|
|
"bcrypt~=4.2.0",
|
|
|
|
# 数据库
|
|
"sqlalchemy[asyncio]~=2.0.36",
|
|
"asyncpg~=0.30.0",
|
|
"psycopg2-binary~=2.9.10",
|
|
"alembic~=1.14.0",
|
|
|
|
# 缓存 & 任务队列
|
|
"redis~=5.2.0",
|
|
|
|
|
|
# 配置 & 验证
|
|
"pydantic~=2.9.0",
|
|
"pydantic-settings~=2.6.0",
|
|
|
|
# AI / LLM
|
|
"openai~=1.58.0",
|
|
|
|
# 重试 & 容错
|
|
"tenacity~=9.0.0",
|
|
|
|
# 火山方舟官方 SDK(可选,如不需要可注释掉)
|
|
"volcengine-python-sdk[ark]~=5.0.0",
|
|
|
|
# HTTP 客户端
|
|
"httpx~=0.28.0",
|
|
"aiohttp>=3.13.4", # 安全修复:修复 CVE-2025-XXXX 系列漏洞
|
|
|
|
# 对象存储
|
|
"qiniu~=7.13.0",
|
|
|
|
# 工具
|
|
"pyjwt~=2.10.0",
|
|
|
|
"pyyaml~=6.0.2",
|
|
"orjson>=3.11.0", # 安全修复:修复 CVE-2025-XXXX
|
|
|
|
# 音频时长探测(TTS 扣费用)
|
|
"mutagen~=1.47.0",
|
|
|
|
# 图像处理(智能抠图合成封面)
|
|
"Pillow>=11.0.0",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
dev = [
|
|
"pytest~=8.3.0",
|
|
"pytest-asyncio~=0.24.0",
|
|
"pytest-cov~=6.0.0",
|
|
"ruff~=0.8.0",
|
|
"black~=24.10.0",
|
|
"mypy~=1.14.0",
|
|
"bandit[toml]~=1.8.0", # 安全扫描
|
|
"pip-audit~=2.7.0", # 漏洞检测
|
|
"pre-commit~=4.0.0", # Git 钩子
|
|
]
|
|
|
|
[project.scripts]
|
|
meijiaka-api = "app.main:main"
|
|
|
|
[tool.setuptools]
|
|
packages = ["app"]
|
|
|
|
[tool.black]
|
|
line-length = 100
|
|
target-version = ["py313"]
|
|
|
|
[tool.ruff]
|
|
line-length = 100
|
|
target-version = "py313"
|
|
|
|
[tool.ruff.lint]
|
|
select = ["E", "F", "I", "N", "W", "UP", "B", "C4", "SIM"]
|
|
ignore = ["E501", "E402", "N802", "N803", "N806", "N815", "B008", "B904"]
|
|
|
|
[tool.mypy]
|
|
python_version = "3.13"
|
|
strict = false
|
|
warn_return_any = false
|
|
warn_unused_configs = true
|
|
ignore_missing_imports = true
|
|
# 逐步修复历史遗留问题
|
|
warn_no_return = false
|
|
check_untyped_defs = false
|
|
disallow_untyped_defs = false
|
|
disallow_incomplete_defs = false
|
|
|
|
# ========== 重构防护网:新代码严格模式 ==========
|
|
[[tool.mypy.overrides]]
|
|
module = ["app.schemas.*", "app.crud.*", "app.scheduler.handlers.*"]
|
|
strict = true
|
|
warn_return_any = true
|
|
check_untyped_defs = true
|
|
disallow_untyped_defs = true
|
|
disallow_incomplete_defs = true
|
|
|
|
# Redis 客户端 typing 问题(Awaitable[T] | T),暂不严格检查
|
|
[[tool.mypy.overrides]]
|
|
module = ["app.scheduler.registry", "app.scheduler.slot_manager"]
|
|
strict = false
|
|
check_untyped_defs = false
|
|
disallow_untyped_defs = false
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
|
|
[tool.bandit]
|
|
exclude_dirs = ["tests", "scripts"]
|
|
# B101: assert 使用 — 非安全问题,纯代码规范,跳过
|
|
skips = ["B101"]
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py"]
|
|
python_classes = ["Test*"]
|
|
python_functions = ["test_*"]
|