style: auto-format with ruff [skip ci]

This commit is contained in:
GitHub Actions 2026-01-18 14:55:37 +00:00
parent 5b3703ac1c
commit 0f684851bc
5 changed files with 30 additions and 77 deletions

View File

@ -230,10 +230,7 @@ async def initialize_admin(admin_data: InitializeAdmin, db: AsyncSession = Depen
user_id = admin_data.user_id user_id = admin_data.user_id
# 创建默认部门 # 创建默认部门
default_department = Department( default_department = Department(name="默认部门", description="系统初始化时创建的默认部门")
name="默认部门",
description="系统初始化时创建的默认部门"
)
db.add(default_department) db.add(default_department)
await db.flush() # 获取部门ID await db.flush() # 获取部门ID
@ -467,10 +464,7 @@ async def read_users(
result = await db.execute( result = await db.execute(
select(User, Department.name.label("department_name")) select(User, Department.name.label("department_name"))
.outerjoin(Department, User.department_id == Department.id) .outerjoin(Department, User.department_id == Department.id)
.filter( .filter(User.is_deleted == 0, User.department_id == current_user.department_id)
User.is_deleted == 0,
User.department_id == current_user.department_id
)
.offset(skip) .offset(skip)
.limit(limit) .limit(limit)
) )

View File

@ -14,8 +14,7 @@ from src.storage.db.models import Department, User
from server.utils.auth_middleware import get_superadmin_user, get_db from server.utils.auth_middleware import get_superadmin_user, get_db
from server.utils.auth_utils import AuthUtils from server.utils.auth_utils import AuthUtils
from server.utils.common_utils import log_operation from server.utils.common_utils import log_operation
from server.utils.user_utils import validate_username, is_valid_phone_number, generate_unique_user_id from server.utils.user_utils import is_valid_phone_number
from src.utils.datetime_utils import utc_now
# 创建路由器 # 创建路由器
department = APIRouter(prefix="/departments", tags=["department"]) department = APIRouter(prefix="/departments", tags=["department"])
@ -28,6 +27,7 @@ department = APIRouter(prefix="/departments", tags=["department"])
class DepartmentCreate(BaseModel): class DepartmentCreate(BaseModel):
"""创建部门请求""" """创建部门请求"""
name: str name: str
description: str | None = None description: str | None = None
# 必需的管理员信息 # 必需的管理员信息
@ -38,18 +38,21 @@ class DepartmentCreate(BaseModel):
class DepartmentCreateWithoutAdmin(BaseModel): class DepartmentCreateWithoutAdmin(BaseModel):
"""创建部门请求(无管理员,用于兼容)""" """创建部门请求(无管理员,用于兼容)"""
name: str name: str
description: str | None = None description: str | None = None
class DepartmentUpdate(BaseModel): class DepartmentUpdate(BaseModel):
"""更新部门请求""" """更新部门请求"""
name: str | None = None name: str | None = None
description: str | None = None description: str | None = None
class DepartmentResponse(BaseModel): class DepartmentResponse(BaseModel):
"""部门响应""" """部门响应"""
id: int id: int
name: str name: str
description: str | None = None description: str | None = None
@ -59,6 +62,7 @@ class DepartmentResponse(BaseModel):
class DepartmentSimpleResponse(BaseModel): class DepartmentSimpleResponse(BaseModel):
"""部门简单响应(不含用户数量)""" """部门简单响应(不含用户数量)"""
id: int id: int
name: str name: str
description: str | None = None description: str | None = None
@ -71,10 +75,7 @@ class DepartmentSimpleResponse(BaseModel):
@department.get("", response_model=list[DepartmentResponse]) @department.get("", response_model=list[DepartmentResponse])
async def get_departments( async def get_departments(current_user: User = Depends(get_superadmin_user), db: AsyncSession = Depends(get_db)):
current_user: User = Depends(get_superadmin_user),
db: AsyncSession = Depends(get_db)
):
"""获取所有部门列表""" """获取所有部门列表"""
result = await db.execute(select(Department).order_by(Department.created_at.desc())) result = await db.execute(select(Department).order_by(Department.created_at.desc()))
departments = result.scalars().all() departments = result.scalars().all()
@ -83,10 +84,7 @@ async def get_departments(
department_list = [] department_list = []
for dep in departments: for dep in departments:
user_count_result = await db.execute( user_count_result = await db.execute(
select(func.count(User.id)).filter( select(func.count(User.id)).filter(User.department_id == dep.id, User.is_deleted == 0)
User.department_id == dep.id,
User.is_deleted == 0
)
) )
user_count = user_count_result.scalar() user_count = user_count_result.scalar()
department_list.append({**dep.to_dict(), "user_count": user_count}) department_list.append({**dep.to_dict(), "user_count": user_count})
@ -96,33 +94,22 @@ async def get_departments(
@department.get("/{department_id}", response_model=DepartmentResponse) @department.get("/{department_id}", response_model=DepartmentResponse)
async def get_department( async def get_department(
department_id: int, department_id: int, current_user: User = Depends(get_superadmin_user), db: AsyncSession = Depends(get_db)
current_user: User = Depends(get_superadmin_user),
db: AsyncSession = Depends(get_db)
): ):
"""获取指定部门详情""" """获取指定部门详情"""
result = await db.execute(select(Department).filter(Department.id == department_id)) result = await db.execute(select(Department).filter(Department.id == department_id))
department = result.scalar_one_or_none() department = result.scalar_one_or_none()
if not department: if not department:
raise HTTPException( raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="部门不存在")
status_code=status.HTTP_404_NOT_FOUND,
detail="部门不存在"
)
# 获取部门下用户数量 # 获取部门下用户数量
user_count_result = await db.execute( user_count_result = await db.execute(
select(func.count(User.id)).filter( select(func.count(User.id)).filter(User.department_id == department_id, User.is_deleted == 0)
User.department_id == department_id,
User.is_deleted == 0
)
) )
user_count = user_count_result.scalar() user_count = user_count_result.scalar()
return { return {**department.to_dict(), "user_count": user_count}
**department.to_dict(),
"user_count": user_count
}
@department.post("", response_model=DepartmentResponse, status_code=status.HTTP_201_CREATED) @department.post("", response_model=DepartmentResponse, status_code=status.HTTP_201_CREATED)
@ -130,17 +117,14 @@ async def create_department(
department_data: DepartmentCreate, department_data: DepartmentCreate,
request: Request, request: Request,
current_user: User = Depends(get_superadmin_user), current_user: User = Depends(get_superadmin_user),
db: AsyncSession = Depends(get_db) db: AsyncSession = Depends(get_db),
): ):
"""创建新部门,同时创建该部门的管理员""" """创建新部门,同时创建该部门的管理员"""
# 检查部门名称是否已存在 # 检查部门名称是否已存在
result = await db.execute(select(Department).filter(Department.name == department_data.name)) result = await db.execute(select(Department).filter(Department.name == department_data.name))
existing = result.scalar_one_or_none() existing = result.scalar_one_or_none()
if existing: if existing:
raise HTTPException( raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="部门名称已存在")
status_code=status.HTTP_400_BAD_REQUEST,
detail="部门名称已存在"
)
# 验证管理员 user_id 格式 # 验证管理员 user_id 格式
admin_user_id = department_data.admin_user_id admin_user_id = department_data.admin_user_id
@ -178,10 +162,7 @@ async def create_department(
detail="手机号已存在", detail="手机号已存在",
) )
new_department = Department( new_department = Department(name=department_data.name, description=department_data.description)
name=department_data.name,
description=department_data.description
)
db.add(new_department) db.add(new_department)
await db.flush() # 获取部门ID await db.flush() # 获取部门ID
@ -206,10 +187,7 @@ async def create_department(
db, current_user.id, "创建部门", f"创建部门: {department_data.name},并创建管理员: {admin_user_id}", request db, current_user.id, "创建部门", f"创建部门: {department_data.name},并创建管理员: {admin_user_id}", request
) )
return { return {**new_department.to_dict(), "user_count": 1}
**new_department.to_dict(),
"user_count": 1
}
@department.put("/{department_id}", response_model=DepartmentResponse) @department.put("/{department_id}", response_model=DepartmentResponse)
@ -218,27 +196,21 @@ async def update_department(
department_data: DepartmentUpdate, department_data: DepartmentUpdate,
request: Request, request: Request,
current_user: User = Depends(get_superadmin_user), current_user: User = Depends(get_superadmin_user),
db: AsyncSession = Depends(get_db) db: AsyncSession = Depends(get_db),
): ):
"""更新部门信息""" """更新部门信息"""
result = await db.execute(select(Department).filter(Department.id == department_id)) result = await db.execute(select(Department).filter(Department.id == department_id))
department = result.scalar_one_or_none() department = result.scalar_one_or_none()
if not department: if not department:
raise HTTPException( raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="部门不存在")
status_code=status.HTTP_404_NOT_FOUND,
detail="部门不存在"
)
# 如果要修改名称,检查新名称是否已存在 # 如果要修改名称,检查新名称是否已存在
if department_data.name and department_data.name != department.name: if department_data.name and department_data.name != department.name:
result = await db.execute(select(Department).filter(Department.name == department_data.name)) result = await db.execute(select(Department).filter(Department.name == department_data.name))
existing = result.scalar_one_or_none() existing = result.scalar_one_or_none()
if existing: if existing:
raise HTTPException( raise HTTPException(status_code=status.HTTP_400_BAD_REQUEST, detail="部门名称已存在")
status_code=status.HTTP_400_BAD_REQUEST,
detail="部门名称已存在"
)
department.name = department_data.name department.name = department_data.name
if department_data.description is not None: if department_data.description is not None:
@ -252,17 +224,11 @@ async def update_department(
# 获取部门下用户数量 # 获取部门下用户数量
user_count_result = await db.execute( user_count_result = await db.execute(
select(func.count(User.id)).filter( select(func.count(User.id)).filter(User.department_id == department_id, User.is_deleted == 0)
User.department_id == department_id,
User.is_deleted == 0
)
) )
user_count = user_count_result.scalar() user_count = user_count_result.scalar()
return { return {**department.to_dict(), "user_count": user_count}
**department.to_dict(),
"user_count": user_count
}
@department.delete("/{department_id}", status_code=status.HTTP_200_OK) @department.delete("/{department_id}", status_code=status.HTTP_200_OK)
@ -270,7 +236,7 @@ async def delete_department(
department_id: int, department_id: int,
request: Request, request: Request,
current_user: User = Depends(get_superadmin_user), current_user: User = Depends(get_superadmin_user),
db: AsyncSession = Depends(get_db) db: AsyncSession = Depends(get_db),
): ):
"""删除部门""" """删除部门"""
# 检查部门是否存在 # 检查部门是否存在
@ -278,24 +244,17 @@ async def delete_department(
department = result.scalar_one_or_none() department = result.scalar_one_or_none()
if not department: if not department:
raise HTTPException( raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="部门不存在")
status_code=status.HTTP_404_NOT_FOUND,
detail="部门不存在"
)
# 检查部门下是否有用户 # 检查部门下是否有用户
user_count_result = await db.execute( user_count_result = await db.execute(
select(func.count(User.id)).filter( select(func.count(User.id)).filter(User.department_id == department_id, User.is_deleted == 0)
User.department_id == department_id,
User.is_deleted == 0
)
) )
user_count = user_count_result.scalar() user_count = user_count_result.scalar()
if user_count > 0: if user_count > 0:
raise HTTPException( raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST, status_code=status.HTTP_400_BAD_REQUEST, detail=f"无法删除部门,该部门下还有 {user_count} 个用户"
detail=f"无法删除部门,该部门下还有 {user_count} 个用户"
) )
department_name = department.name department_name = department.name

View File

@ -14,6 +14,7 @@ evaluation = APIRouter(prefix="/evaluation", tags=["evaluation"])
# 评估基准 # 评估基准
# ============================================================================ # ============================================================================
@evaluation.get("/databases/{db_id}/benchmarks/{benchmark_id}") @evaluation.get("/databases/{db_id}/benchmarks/{benchmark_id}")
async def get_evaluation_benchmark_by_db( async def get_evaluation_benchmark_by_db(
db_id: str, benchmark_id: str, page: int = 1, page_size: int = 10, current_user: User = Depends(get_admin_user) db_id: str, benchmark_id: str, page: int = 1, page_size: int = 10, current_user: User = Depends(get_admin_user)

View File

@ -4,15 +4,13 @@ from typing import Annotated
from langchain.agents import create_agent from langchain.agents import create_agent
from src.agents.common import BaseAgent, BaseContext, load_chat_model from src.agents.common import BaseAgent, BaseContext, load_chat_model
from src.agents.common.tools import gen_tool_info, get_buildin_tools
from src.agents.common.toolkits.mysql import get_mysql_tools from src.agents.common.toolkits.mysql import get_mysql_tools
from src.agents.common.tools import get_tools_from_context from src.agents.common.tools import gen_tool_info, get_buildin_tools, get_tools_from_context
from src.utils import logger from src.utils import logger
@dataclass(kw_only=True) @dataclass(kw_only=True)
class ReporterContext(BaseContext): class ReporterContext(BaseContext):
# 覆盖默认的工具列表,添加 MySQL 工具包 # 覆盖默认的工具列表,添加 MySQL 工具包
tools: Annotated[list[dict], {"__template_metadata__": {"kind": "tools"}}] = field( tools: Annotated[list[dict], {"__template_metadata__": {"kind": "tools"}}] = field(
default_factory=lambda: [t.name for t in get_mysql_tools()], default_factory=lambda: [t.name for t in get_mysql_tools()],

View File

@ -114,6 +114,7 @@ class UploadGraphService:
actual_file_path = temp_file.name actual_file_path = temp_file.name
try: try:
def read_triples(file_path): def read_triples(file_path):
with open(file_path, encoding="utf-8") as file: with open(file_path, encoding="utf-8") as file:
for line in file: for line in file: