Files
wehub-resource-sync 1443d3fdf9
Ruff Format Check / Ruff Format & Lint (push) Failing after 7m39s
Deploy VitePress site to Pages / build (push) Failing after 9m11s
Deploy VitePress site to Pages / Deploy (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:32:26 +08:00

54 lines
2.1 KiB
Python

from __future__ import annotations
from collections.abc import Collection
SHARE_ACCESS_LEVELS = {"global", "department", "user"}
EMPTY_SHARE_CONFIG = {"access_level": "global", "department_ids": [], "user_uids": []}
def _normalize_department_ids(department_ids: list | None) -> list[int]:
return [int(department_id) for department_id in department_ids or []]
def _normalize_user_uids(user_uids: list | None) -> list[str]:
return [uid for uid in (str(uid).strip() for uid in user_uids or []) if uid]
def normalize_share_config(
share_config: dict | None,
*,
default_config: dict | None,
default_access_level: str,
invalid_access_level_message: str,
user_uid: str | None = None,
department_id: int | str | None = None,
allowed_access_levels: Collection[str] | None = None,
unauthorized_access_level_message: str | None = None,
) -> dict:
config = share_config or default_config or {}
access_level = config.get("access_level") or default_access_level
if access_level not in SHARE_ACCESS_LEVELS:
raise ValueError(invalid_access_level_message)
if allowed_access_levels is not None and access_level not in allowed_access_levels:
raise ValueError(unauthorized_access_level_message or invalid_access_level_message)
if access_level == "global":
return EMPTY_SHARE_CONFIG.copy()
if access_level == "department":
department_ids = _normalize_department_ids(config.get("department_ids"))
if department_id is not None:
department_ids.append(int(department_id))
department_ids = sorted(set(department_ids))
if not department_ids:
raise ValueError("部门共享至少需要选择一个部门")
return {"access_level": "department", "department_ids": department_ids, "user_uids": []}
user_uids = _normalize_user_uids(config.get("user_uids"))
if user_uid:
user_uids.append(str(user_uid))
user_uids = sorted(set(user_uids))
if not user_uids:
raise ValueError("指定人至少需要选择一个用户")
return {"access_level": "user", "department_ids": [], "user_uids": user_uids}