Files
news/pyproject.toml
T
simon 366e60e8a9 feat: 日报结构化入库(M10 前后端分离数据层)
- 新增 report_db 包: MySQL 连接/建表/幂等写入 (news_report/news_event, myquant 库)
- 新增 report_import 包: 历史 178 份日报 HTML 解析入库, 表头驱动列映射
- reporter.py 完全切换: generate_report 结构化入库, 不再生成/上传 HTML
- CLI: 新增 report-import 子命令
- 依赖: uv add pymysql; 配置: NEWS_DB_* / REPORT_HISTORY_DIR
- 文档: docs/report_db_design.md(实现逻辑), docs/db_schema.md(表结构供 API/前端)
- 测试: 24 个单测通过 (parser/builder/models/importer)
2026-08-03 21:32:07 +08:00

102 lines
2.1 KiB
TOML

[project]
name = "a-share-research"
version = "0.1.0"
description = "A 股 Deep Research 私有投研平台"
readme = "README.md"
requires-python = ">=3.11,<3.12"
authors = [
{ name = "summer" }
]
license = { text = "Proprietary" }
# 注意:依赖按 Milestone 分阶段加入,避免一次性引入。
# 当前已启用:M1 抓取层
dependencies = [
"pydantic>=2.7",
"pyyaml>=6.0",
"python-dotenv>=1.0",
"loguru>=0.7",
# ---- M1 抓取层 ----
"crawl4ai>=0.6,<0.8",
"tenacity>=9.0",
"beautifulsoup4>=4.12",
# ---- M2 正文提取 ----
"gne>=0.3",
"python-dateutil>=2.9",
"lxml>=5.0",
# ---- M4 LLM 投资事件抽取 ----
"openai>=1.40",
"httpx>=0.27",
# ---- M5 Embedding(远程后端必装,本地后端走 optional)----
"numpy>=1.26",
# ---- M6 Qdrant 向量库 ----
"qdrant-client>=1.10",
# ---- M7 定时任务 ----
"apscheduler>=3.10",
# ---- M8 MCP 服务 ----
"mcp>=1.0",
"pypdf>=6.13.3",
"markitdown[all]>=0.1.5",
"pymysql>=1.2.0",
]
[project.optional-dependencies]
# 本地 BGE-M3 后端:首次下载约 2.3 GB,按需安装
# uv sync --extra local-embedding
local-embedding = [
"sentence-transformers>=3.0",
"torch>=2.2",
]
# 占位,后续 Milestone 按需启用
# mcp = ["mcp>=1.0"]
[dependency-groups]
dev = [
"pytest>=8.0",
"pytest-asyncio>=0.23",
"pytest-cov>=5.0",
"ruff>=0.5",
"mypy>=1.10",
]
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = [
"crawler",
"extractor",
"dedup",
"llm",
"embedding",
"vectorstore",
"scheduler",
"mcp_server",
"api",
]
[project.scripts]
a-share = "a_share_cli.main:main"
[tool.ruff]
line-length = 100
target-version = "py311"
[tool.ruff.lint]
select = ["E", "F", "W", "I", "N", "UP", "B", "C4", "SIM"]
ignore = ["E501"]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
addopts = "-ra -q"
markers = [
"integration: 需要真实网络/浏览器的集成测试,默认跳过",
]
[tool.mypy]
python_version = "3.11"
strict = false
ignore_missing_imports = true