NL 线(含其并入的袁聪场外/推广域)。唯一冲突是 .gitignore —— 双方都往同一区域加了 .workdir/,取对方版本(他的更完整,含 .tmp/ 与说明),顺带修掉我之前用 Add-Content -Encoding utf8 造成的编码混合(read 工具当时报 invalid UTF-8)。 合并后修的问题 —— 都不是"改别人业务逻辑",是让门禁能绿: 1. 缺运行依赖 python-docx。document_parser.py 解析 .docx 用它,但 requirements.txt 与 pyproject.toml 都没声明 —— 别人环境跑知识入库会直接 ModuleNotFoundError: No module named 'docx'。已补声明。 2. ruff 7 项:其中 tests/conftest.py 的 F821 Undefined name 'Path'(他的 tmp_path 修复 写了字符串注解 "Path" 却漏 import,运行时不求值所以没炸,但 mypy/ruff 会抓)、 tools/publish_customer_service_config.py 的 F841 inherited_keys 死变量(他改同 key 覆盖、换成 inherited_only 后忘删旧的)、3 处 E501,另 2 项 ruff --fix 自动修复。 3. 合规基线种子未跑:integration 的 test_compliance_seed_mysql 4 个用例要求 agent_negative_word 有 7 条 active 且已复核、agent_reply_template 覆盖 6 场景。 跑 tools/seed_compliance_baseline.py(11 条 active 规则 / 6 个场景模板)后 80 passed。 验证:ruff 干净 / mypy 180 文件 0 错 / unit+contract 1140 passed / integration 80 passed / 表数 68(alembic 已在 20260911_merge_risk_heads)。 唯一失败 tests/unit/repository/test_fund_readonly_contract.py 是双方一致的既有缺陷: 它断言 Base.metadata 里的 fin_* 表集合,而实测为空集 —— 即该测试依赖别的测试先导入模型的 副作用,单独跑必失败。NL 方也明确"不修不报",此处照办,仅记录。
79 lines
2.2 KiB
TOML
79 lines
2.2 KiB
TOML
[build-system]
|
||
requires = ["setuptools>=75"]
|
||
build-backend = "setuptools.build_meta"
|
||
|
||
[project]
|
||
name = "jr-agent-platform"
|
||
version = "0.1.0"
|
||
description = "金融系统 Agent 通用底座"
|
||
requires-python = ">=3.13,<3.14"
|
||
dependencies = [
|
||
"fastapi>=0.115,<1",
|
||
"uvicorn[standard]>=0.34,<1",
|
||
"pydantic>=2.10,<3",
|
||
"pydantic-settings>=2.7,<3",
|
||
"python-dotenv>=1.0,<2",
|
||
"greenlet>=3.1,<4",
|
||
"sqlalchemy>=2.0,<3",
|
||
"alembic>=1.14,<2",
|
||
"asyncmy>=0.2,<1",
|
||
"pymysql>=1.1,<2",
|
||
"redis>=5.2,<6",
|
||
"neo4j>=5.28,<6",
|
||
"pymilvus>=2.5,<3",
|
||
"PyJWT>=2.10,<3",
|
||
"cryptography>=44,<51",
|
||
"httpx>=0.28,<1",
|
||
"tzdata>=2025.1,<2027",
|
||
"alibabacloud_docmind_api20220711==1.4.14",
|
||
"alibabacloud_tea_openapi>=0.4.3,<1",
|
||
"alibabacloud_tea_util>=0.3.13,<1",
|
||
"alibabacloud_credentials>=1.0.2,<2",
|
||
"python-pptx>=1.0,<2",
|
||
"python-docx>=1.1,<2",
|
||
"openpyxl>=3.1,<4",
|
||
"Pillow>=10,<12",
|
||
"matplotlib>=3.9,<4",
|
||
"python-multipart>=0.0.20,<1",
|
||
]
|
||
|
||
[project.optional-dependencies]
|
||
dev = [
|
||
"pytest>=8.3,<9",
|
||
"pytest-asyncio>=0.25,<1",
|
||
"ruff>=0.9,<1",
|
||
"mypy>=1.14,<2",
|
||
# 测试用:场外邮件 Worker 等用例走 SQLAlchemy 的 SQLite 内存库。
|
||
# 原先没声明 —— 别人的环境装完依赖跑测试,这 6 个用例会直接
|
||
# ModuleNotFoundError: No module named 'aiosqlite'。
|
||
"aiosqlite>=0.20,<1",
|
||
]
|
||
|
||
[tool.setuptools.packages.find]
|
||
include = ["app*"]
|
||
|
||
[tool.pytest.ini_options]
|
||
testpaths = ["tests"]
|
||
asyncio_mode = "auto"
|
||
asyncio_default_fixture_loop_scope = "function"
|
||
markers = ["integration: requires local database services"]
|
||
# 临时目录的落点由 `tests/conftest.py` 覆盖 `tmp_path` 决定(落在仓库内 `.workdir/pytest-tmp`)。
|
||
# 这里**不**写 `basetemp`:pytest 只在命令行认它,写在 ini 里会被静默忽略(实测无效),
|
||
# 留着会让人误以为已经配好了。系统临时目录权限坏掉的原因与修法见 conftest 的说明。
|
||
|
||
[tool.ruff]
|
||
line-length = 100
|
||
target-version = "py313"
|
||
|
||
[tool.ruff.lint]
|
||
select = ["E", "F", "I", "B", "UP"]
|
||
|
||
[tool.ruff.lint.per-file-ignores]
|
||
"alembic/versions/*.py" = ["E501"]
|
||
"tools/*.py" = ["E501", "I001", "B007"]
|
||
|
||
[tool.mypy]
|
||
python_version = "3.13"
|
||
strict = true
|
||
packages = ["app"]
|