修复:解决后端循环导入问题
问题:Docker 启动时后端服务崩溃,提示循环导入错误 原因:permission_cache.py 在模块级别导入 project_permissions.py,而后者也导入前者 解决:使用延迟导入,在方法内部导入所需的函数 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,11 +12,6 @@ from typing import Any
|
|||||||
|
|
||||||
from sqlalchemy.ext.asyncio import AsyncSession
|
from sqlalchemy.ext.asyncio import AsyncSession
|
||||||
|
|
||||||
from app.core.project_permissions import (
|
|
||||||
get_project_role_permissions,
|
|
||||||
get_member_role,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class PermissionCache:
|
class PermissionCache:
|
||||||
"""权限缓存管理器
|
"""权限缓存管理器
|
||||||
@@ -63,6 +58,8 @@ class PermissionCache:
|
|||||||
Returns:
|
Returns:
|
||||||
权限矩阵:{role: {module: {action: bool}}}
|
权限矩阵:{role: {module: {action: bool}}}
|
||||||
"""
|
"""
|
||||||
|
from app.core.project_permissions import get_project_role_permissions as _get_project_role_permissions
|
||||||
|
|
||||||
if ttl is None:
|
if ttl is None:
|
||||||
ttl = self.default_ttl
|
ttl = self.default_ttl
|
||||||
|
|
||||||
@@ -75,7 +72,7 @@ class PermissionCache:
|
|||||||
return cached_data
|
return cached_data
|
||||||
|
|
||||||
# 缓存未命中,从数据库查询
|
# 缓存未命中,从数据库查询
|
||||||
permissions = await get_project_role_permissions(db, study_id)
|
permissions = await _get_project_role_permissions(db, study_id)
|
||||||
|
|
||||||
# 存储到缓存
|
# 存储到缓存
|
||||||
self._project_permissions_cache[cache_key] = (permissions, time.time())
|
self._project_permissions_cache[cache_key] = (permissions, time.time())
|
||||||
@@ -100,6 +97,8 @@ class PermissionCache:
|
|||||||
Returns:
|
Returns:
|
||||||
成员在项目中的角色,如果不是成员则返回 None
|
成员在项目中的角色,如果不是成员则返回 None
|
||||||
"""
|
"""
|
||||||
|
from app.core.project_permissions import get_member_role as _get_member_role
|
||||||
|
|
||||||
if ttl is None:
|
if ttl is None:
|
||||||
ttl = self.default_ttl
|
ttl = self.default_ttl
|
||||||
|
|
||||||
@@ -112,7 +111,7 @@ class PermissionCache:
|
|||||||
return cached_role
|
return cached_role
|
||||||
|
|
||||||
# 缓存未命中,从数据库查询
|
# 缓存未命中,从数据库查询
|
||||||
role = await get_member_role(db, study_id, user_id)
|
role = await _get_member_role(db, study_id, user_id)
|
||||||
|
|
||||||
# 存储到缓存
|
# 存储到缓存
|
||||||
self._member_role_cache[cache_key] = (role, time.time())
|
self._member_role_cache[cache_key] = (role, time.time())
|
||||||
|
|||||||
Reference in New Issue
Block a user