Use HIS数据处理 as Gitea backup root

This commit is contained in:
2026-06-11 02:50:39 +08:00
parent 16d7c9a5ef
commit 8755647784
6 changed files with 57 additions and 210 deletions

View File

@@ -3,6 +3,7 @@ REVIEW_APP_PASSWORD=change-me
REVIEW_APP_SECRET_KEY=change-me-to-a-random-string
REVIEW_APP_PORT=8090
REVIEW_POSTGRES_SYNC=1
HIS_LIST_DATA_ROOT=/path/to/HIS数据/患者列表
KIMI_API_KEY=change-me
KIMI_API_ENABLED=1
KIMI_MODEL=kimi-k2.6

View File

@@ -47,6 +47,7 @@ DATETIME_PATTERN = re.compile(r"\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}")
FLEX_DATETIME_PATTERN = re.compile(r"^(\d{4})-(\d{1,2})-(\d{1,2})\s+(\d{1,2}):(\d{1,2}):(\d{1,2})$")
INPATIENT_NO_PATTERN = re.compile(r".*")
IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".bmp", ".webp"}
IMAGE_DATA_LINK_NAMES = ("已处理-患者目录图片集群", "待处理-患者目录图片集群")
IGNORED_REVIEW_TIPS = {"缺少出院时间"}
IGNORED_AI_ISSUE_PATTERNS = (
"最后书写时间与出院时间顺序异常",
@@ -1579,11 +1580,41 @@ def filtered_items() -> list[dict[str, Any]]:
return items
def path_is_relative_to(path: Path, root: Path) -> bool:
try:
path.relative_to(root)
return True
except ValueError:
return False
def allowed_file_roots() -> list[Path]:
roots = [WORKSPACE_ROOT.resolve()]
for name in IMAGE_DATA_LINK_NAMES:
link_path = WORKSPACE_ROOT / name
if link_path.exists() or link_path.is_symlink():
roots.append(link_path.resolve(strict=False))
extra_roots = os.getenv("REVIEW_ALLOWED_PATH_ROOTS", "")
for root_text in extra_roots.split(os.pathsep):
root_text = root_text.strip()
if root_text:
roots.append(Path(root_text).expanduser().resolve(strict=False))
unique_roots: list[Path] = []
seen: set[str] = set()
for root in roots:
key = str(root)
if key not in seen:
seen.add(key)
unique_roots.append(root)
return unique_roots
def safe_workspace_path(path_text: str) -> Path:
raw = Path(path_text)
path = raw if raw.is_absolute() else WORKSPACE_ROOT / raw
resolved = path.resolve()
if WORKSPACE_ROOT not in resolved.parents and resolved != WORKSPACE_ROOT:
resolved = path.resolve(strict=False)
if not any(path_is_relative_to(resolved, root) or resolved == root for root in allowed_file_roots()):
abort(403)
if not resolved.exists():
abort(404)

View File

@@ -12,8 +12,10 @@ services:
WORKSPACE_ROOT: /workspace
REVIEW_APP_HOST: 0.0.0.0
REVIEW_APP_PORT: 8000
REVIEW_ALLOWED_PATH_ROOTS: ${HIS_LIST_DATA_ROOT:-/data/his-list-images}
ports:
- "${REVIEW_APP_PORT:-8090}:8000"
volumes:
- ..:/workspace
- ${HIS_LIST_DATA_ROOT:-../待处理-患者目录图片集群}:${HIS_LIST_DATA_ROOT:-/data/his-list-images}:ro
restart: unless-stopped