mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-23 05:10:57 +00:00
1. 移除dashboard数据大屏页面及全部依赖的图表、统计组件 2. 重构主滚动容器选择逻辑,统一使用getMainScrollEl获取滚动元素 3. 更新配置项,添加TRUSTED_PROXY_HOPS与IP2REGION相关配置 4. 替换IP归属地查询为离线本地解析,移除相关HTTP请求配置 5. 简化OAuth与微信小程序登录的background_tasks参数传递 6. 修复系统参数描述与前端提示文案,更新alembic版本清理逻辑 7. 简化页面滚动重置逻辑,过滤隐藏标签页
144 lines
4.6 KiB
TOML
144 lines
4.6 KiB
TOML
[project]
|
|
name = "backend"
|
|
version = "3.2.0"
|
|
description = "fastapiadmin后端工程"
|
|
readme = "README.md"
|
|
requires-python = ">=3.12"
|
|
dependencies = [
|
|
"agno==2.5.8",
|
|
"aiofiles==24.1.0", # 文件操作
|
|
"alembic==1.18.4", # 数据库迁移
|
|
"apscheduler==3.11.0", # 定时任务
|
|
"bleach==6.4.0", # 过滤 HTML 标签
|
|
"click==8.1.7", # 命令行参数解析
|
|
"croniter==6.2.4", # cron 表达式校验
|
|
"fastapi==0.138.2", # fastapi 框架
|
|
"greenlet==3.5.2", # 协程核心依赖(SQLAlchemy 异步)
|
|
"httpx==0.28.1", # HTTP 客户端
|
|
"jinja2==3.1.6", # 模板引擎(代码生成 + 遗留模板)
|
|
"loguru==0.7.3", # 日志
|
|
"openpyxl==3.1.5", # Excel 文件处理
|
|
"psutil==7.2.2", # 系统信息
|
|
"py-ip2region==3.0.4", # IP 归属地离线查询(内置 xdb,无外网请求)
|
|
"pydantic-settings>=2.6.1,<3", # 配置设置
|
|
"pyjwt==2.13.0", # OAuth2
|
|
"python-multipart==0.0.32", # request.form() 对表单进行「解析」时安装
|
|
"redis==7.1.0", # redis 异步操作数据库
|
|
"rich==15.0.0", # 终端打印美化
|
|
"sqlalchemy==2.0.51", # 数据库ORM
|
|
"sqlglot[rs]==27.8.0", # sql 解析
|
|
"tinycss2==1.5.1", # bleach CSS 清洗依赖
|
|
"typer==0.26.7", # 命令行工具
|
|
"ua-parser==1.0.2", # 解析 User-Agent 获取 OS/浏览器
|
|
"uvicorn==0.49.0", # uvicorn web 框架
|
|
"websockets>=16.0,<17.0", # websocket 通信
|
|
"aiosqlite==0.22.1",
|
|
"aiomysql>=0.2.0",
|
|
"asyncpg==0.31.0",
|
|
"psycopg[binary]==3.3.2",
|
|
"pymysql==1.2.0",
|
|
"openai==2.46.0",
|
|
"pydantic[email]>=2.12.5",
|
|
"cryptography==50.0.0", # Fernet 对称加密(存储源密码加密)
|
|
"paramiko==5.0.0", # SFTP 协议
|
|
"boto3==1.43.72", # S3 协议
|
|
"esdk-obs-python==3.26.6", # 华为云 OBS 协议
|
|
"alibabacloud-oss-v2==1.3.2", # 阿里云 OSS 协议
|
|
"cos-python-sdk-v5==1.9.44",
|
|
]
|
|
|
|
[project.optional-dependencies]
|
|
mysql = ["aiomysql>=0.2.0"]
|
|
postgres = ["asyncpg==0.31.0"]
|
|
sqlite = ["aiosqlite==0.22.1"]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"fakeredis>=2.21.0,<3", # 测试:内存 Redis,配合 TESTING
|
|
"pytest==9.0.2",
|
|
"pytest-asyncio>=0.24.0", # 异步测试支持
|
|
"ruff==0.14.13", # 代码检查/格式化
|
|
]
|
|
|
|
[tool.uv]
|
|
default-groups = ["dev"] # 本地 uv sync 含 dev;生产 pip -r requirements.txt 不含 pytest/ruff/fakeredis
|
|
|
|
[[tool.uv.index]]
|
|
name = "tuna"
|
|
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
|
|
|
[tool.ruff]
|
|
line-length = 200
|
|
indent-width = 4
|
|
preview = false
|
|
fix = true
|
|
show-fixes = true
|
|
exclude = [
|
|
".bzr",
|
|
".direnv",
|
|
".eggs",
|
|
".git",
|
|
".git-rewrite",
|
|
".hg",
|
|
".ipynb_checkpoints",
|
|
".mypy_cache",
|
|
".nox",
|
|
".pants.d",
|
|
".pyenv",
|
|
".pytest_cache",
|
|
".pytype",
|
|
".ruff_cache",
|
|
".svn",
|
|
".tox",
|
|
".venv",
|
|
".vscode",
|
|
"__pypackages__",
|
|
"_build",
|
|
"buck-out",
|
|
"build",
|
|
"dist",
|
|
"node_modules",
|
|
"site-packages",
|
|
"venv",
|
|
]
|
|
extend-include = ["*.pyw"]
|
|
|
|
[tool.ruff.lint]
|
|
select = [
|
|
"FAST",
|
|
"F",
|
|
"E",
|
|
"W",
|
|
"F",
|
|
"I",
|
|
"B",
|
|
"C4",
|
|
"UP",
|
|
]
|
|
ignore = [
|
|
"E501", # line too long, handled by black
|
|
"B008", # do not perform function calls in argument defaults
|
|
"C901", # too complex
|
|
"W191", # indentation contains tabs
|
|
"B904", # Within an `except` clause
|
|
"B010", # Do not call with a constant attribute value.
|
|
"B009", # Do not use getattr() with a constant attribute value.
|
|
"E712", # Avoid equality comparisons to `False`; use `not getattr(self.model, "is_deleted"):` for false checks
|
|
"W293", # blank line with whitespace
|
|
]
|
|
|
|
[tool.ruff.lint.per-file-ignores]
|
|
"tests/conftest.py" = ["E402"] # 先设置 TESTING/SQLite 环境再 import 应用
|
|
|
|
[tool.ruff.format]
|
|
docstring-code-format = true
|
|
preview = false
|
|
quote-style = "double"
|
|
indent-style = "space"
|
|
skip-magic-trailing-comma = false
|
|
line-ending = "auto"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
asyncio_default_fixture_loop_scope = "function"
|