初始化提交
This commit is contained in:
commit
887c1f449e
963 files changed
+166869
No files matched your search
@@ -0,0 +1,164 @@
|
||||
[project]
|
||||
name = "hunjing-backend"
|
||||
version = "0.1.0"
|
||||
description = "hunjing backend service"
|
||||
authors = [{ name = "chenxin", email = "2685475410@qq.com" }]
|
||||
requires-python = ">=3.12"
|
||||
dependencies = [
|
||||
# ===== Web 框架与接口序列化 =====
|
||||
"fastapi>=0.136.3", # 异步 Web 框架,负责接口路由、依赖注入、请求校验和响应模型声明
|
||||
"uvicorn[standard]>=0.49.0", # ASGI 服务运行器,标准扩展包含高性能协议解析和实时通信相关能力
|
||||
"httpx[http2]>=0.28.1", # 异步 HTTP 客户端,供模型网关、健康检查和外部服务适配层使用
|
||||
"python-multipart>=0.0.32", # 表单和文件上传解析库,后续工具接口、导入接口和附件接口会复用
|
||||
"sse-starlette>=3.4.4", # 服务端事件流支持,用于聊天流式输出和运行时事件流转发
|
||||
# ===== 数据库、迁移与向量检索 =====
|
||||
"sqlalchemy[asyncio]>=2.0.50", # SQLAlchemy 2.x 异步 ORM,统一承载会话、消息、记忆、模型配置等数据访问
|
||||
"alembic>=1.18.4", # 数据库迁移工具,所有表结构变更都通过迁移脚本管理
|
||||
"asyncpg>=0.31.0", # PostgreSQL 异步驱动,用于生产和本地 Docker 数据库连接
|
||||
"aiosqlite>=0.22.1", # SQLite 异步驱动,用于轻量开发、单元测试或临时本地验证场景
|
||||
"chromadb>=1.5.9", # ChromaDB 向量数据库客户端,供后续开发中向量记忆的存储和检索使用
|
||||
# ===== 数据校验与配置加载 =====
|
||||
"pydantic>=2.13.4", # 数据校验和序列化基础库,用于接口模型、配置模型和运行时事件模型
|
||||
"pydantic-settings>=2.14.1", # 配置加载库,用于从环境变量和 .env 文件生成强类型 Settings
|
||||
"email-validator>=2.3.0", # 邮箱地址校验库,供后续用户、登录和通知相关模型复用
|
||||
"pyyaml>=6.0.3", # YAML 解析库,用于加载模型配置、示例配置和后续可声明式配置文件
|
||||
# ===== 认证与安全 =====
|
||||
"python-jose[cryptography]>=3.5.0", # JWT 令牌生成与验证库,供后续 Web 控制台认证和接口鉴权使用
|
||||
"pwdlib[argon2]>=0.3.0", # 密码哈希库,替代 passlib,使用 argon2 算法
|
||||
# ===== 缓存、后台任务与调用韧性 =====
|
||||
"redis[hiredis]<8.0", # Redis 客户端,用于工作记忆、会话运行态、短期缓存和后台任务队列
|
||||
"dramatiq[redis]>=2.1.0", # 后台任务框架,用于后续记忆沉淀、向量生成、会话摘要和健康检查任务
|
||||
"tenacity>=9.1.4", # 重试与退避工具,用于模型健康检查、嵌入请求和非流式外部服务调用
|
||||
# ===== 日志与开发输出 =====
|
||||
"loguru>=0.7.3", # 统一应用日志库,替代标准 logging 配置分散的问题
|
||||
"rich>=15.0.0", # 终端美化输出库,用于本地开发日志、调试输出和后续命令行工具展示
|
||||
"html2text>=2025.4.15", # HTML 转 Markdown 工具,用于将模型输出的 HTML 格式内容转换为 Markdown
|
||||
"lunar-python>=1.4.8", # 农历计算库,用于日历、节气和黄历相关功能
|
||||
]
|
||||
|
||||
[dependency-groups]
|
||||
dev = [
|
||||
# ===== 测试框架 =====
|
||||
"pytest>=9.0.3", # 测试框架,负责单元测试、集成测试和测试夹具管理
|
||||
"pytest-asyncio>=1.4.0", # 异步测试支持,用于测试异步接口、异步数据库访问和流式调用逻辑
|
||||
"pytest-cov>=7.1.0", # 覆盖率统计工具,用于输出终端覆盖率和 HTML 覆盖率报告
|
||||
"respx>=0.23.1", # HTTPX 请求模拟工具,用于隔离外部模型服务和第三方接口
|
||||
"faker>=40.23.0", # 测试数据生成工具,用于构造用户、会话、消息等测试样本
|
||||
|
||||
# ===== 代码质量工具 =====
|
||||
"ruff>=0.15.17", # 代码检查和格式化工具,统一处理导入排序、语法风格和常见问题
|
||||
"mypy>=2.1.0", # 静态类型检查工具,用于在运行前发现类型不一致和接口契约问题
|
||||
"pre-commit>=4.6.0", # 提交前检查工具,后续用于统一执行格式化、静态检查和安全检查
|
||||
|
||||
# ===== 调试工具 =====
|
||||
"ipython>=9.14.1", # 增强交互式 Python 终端,提供补全、高亮和更好的调试体验
|
||||
"ipdb>=0.13.13", # 交互式断点调试器,适合排查异步服务和复杂运行时流程
|
||||
|
||||
# ===== 类型存根 =====
|
||||
"types-redis>=4.6.0.20241004", # Redis 客户端类型注解,提升编辑器补全和静态检查准确性
|
||||
]
|
||||
|
||||
# ============== UV 源配置 ==============
|
||||
# 使用清华大学 PyPI 镜像源作为默认软件源,提升国内环境下的依赖解析和下载速度。
|
||||
[[tool.uv.index]]
|
||||
name = "tuna"
|
||||
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||
default = true
|
||||
|
||||
# ============== Ruff 配置 ==============
|
||||
# Ruff 负责代码检查、格式化和导入排序;当前行长设置为 100,兼顾可读性和较少换行。
|
||||
[tool.ruff]
|
||||
target-version = "py312"
|
||||
line-length = 100
|
||||
indent-width = 4
|
||||
|
||||
[tool.ruff.lint]
|
||||
select = [
|
||||
"E", # 基础代码风格错误检查,例如缩进、空白和语法风格问题
|
||||
"W", # 基础代码风格警告检查,用于发现潜在可读性问题
|
||||
"F", # Pyflakes 规则,用于发现未定义变量、未使用导入等逻辑问题
|
||||
"I", # 导入排序规则,保证标准库、第三方库和项目内模块分组清晰
|
||||
"B", # 常见缺陷模式检查,用于发现容易隐藏运行时错误的写法
|
||||
"C4", # flake8-comprehensions: 推荐使用推导式,用于发现可以简化的列表、字典和集合推导式
|
||||
"UP", # pyupgrade: 使用新版Python语法
|
||||
"PTH", # flake8-use-pathlib: 推荐用 pathlib 处理路径
|
||||
"RET", # flake8-return: 优化函数返回逻辑
|
||||
"ARG", # 未使用参数检查,帮助清理函数签名中的无效参数
|
||||
"SIM", # flake8-simplify: 建议更简洁的代码写法,用于发现可以更直接表达的条件和控制流
|
||||
]
|
||||
ignore = [
|
||||
"E501", # 行长度由格式化器和人工判断共同处理,避免与实际可读性冲突
|
||||
"B008", # FastAPI 的 Depends、Query 等依赖声明会在默认参数中调用函数
|
||||
"W191", # 项目统一使用空格缩进,制表符相关检查与格式化器职责重复
|
||||
]
|
||||
|
||||
[tool.ruff.format]
|
||||
quote-style = "double"
|
||||
indent-style = "space"
|
||||
skip-magic-trailing-comma = false
|
||||
line-ending = "auto"
|
||||
|
||||
[tool.ruff.lint.isort]
|
||||
known-first-party = ["app"]
|
||||
|
||||
# ============== MyPy 配置 ==============
|
||||
# MyPy 用于静态类型检查;当前启用核心严格项,尽早发现接口返回值、可选值和类型契约问题。
|
||||
[tool.mypy]
|
||||
python_version = "3.12"
|
||||
warn_return_any = true
|
||||
disallow_untyped_defs = true
|
||||
disallow_incomplete_defs = true
|
||||
check_untyped_defs = true
|
||||
no_implicit_optional = true
|
||||
warn_redundant_casts = true
|
||||
warn_unused_ignores = true
|
||||
warn_no_return = true
|
||||
strict_equality = true
|
||||
|
||||
[[tool.mypy.overrides]]
|
||||
module = ["jose.*", "pwdlib.*"]
|
||||
ignore_missing_imports = true
|
||||
|
||||
# ============== Pytest 配置 ==============
|
||||
# Pytest 配置只保留项目需要覆盖的测试目录、异步模式、覆盖率输出和严格标记检查。
|
||||
[tool.pytest.ini_options]
|
||||
minversion = "8.0"
|
||||
testpaths = ["tests"]
|
||||
pythonpath = [
|
||||
".",
|
||||
] # 让测试以 backend/ 为根,``import app`` 可直接解析,无需 conftest 的 sys.path 注入
|
||||
asyncio_mode = "auto"
|
||||
addopts = [
|
||||
"--cov=app",
|
||||
"--cov-report=term-missing",
|
||||
"--cov-report=html",
|
||||
"--strict-markers",
|
||||
"-v",
|
||||
]
|
||||
|
||||
# ============== Coverage 配置 ==============
|
||||
# 覆盖率统计聚焦 app 源码,排除测试文件、缓存目录和 Alembic 迁移脚本。
|
||||
[tool.coverage.run]
|
||||
source = ["app"]
|
||||
omit = ["*/tests/*", "*/test_*.py", "*/__pycache__/*", "*/alembic/*"]
|
||||
|
||||
[tool.coverage.report]
|
||||
exclude_lines = [
|
||||
"pragma: no cover",
|
||||
"def __repr__",
|
||||
"raise AssertionError",
|
||||
"raise NotImplementedError",
|
||||
"if __name__ == .__main__.:",
|
||||
"if TYPE_CHECKING:",
|
||||
"class .*\\bProtocol\\):",
|
||||
"@(abc\\.)?abstractmethod",
|
||||
]
|
||||
|
||||
# ============== 构建系统 ==============
|
||||
# Hatchling 让 backend 能被 uv 以可编辑包的方式安装,确保测试、脚本和本地运行都能稳定导入 app 包。
|
||||
[build-system]
|
||||
requires = ["hatchling"]
|
||||
build-backend = "hatchling.build"
|
||||
|
||||
[tool.hatch.build.targets.wheel]
|
||||
packages = ["app"]
|
||||
Reference in new issue
Block a user