from __future__ import annotations from enum import Enum from typing import NoReturn from .generated.v2_all import ( ApprovalsReviewer, AskForApproval, AskForApprovalValue, ) class ApprovalMode(str, Enum): """High-level approval behavior for escalated permission requests.""" deny_all = "deny_all" auto_review = "auto_review" def _approval_mode_settings( approval_mode: ApprovalMode, ) -> tuple[AskForApproval, ApprovalsReviewer | None]: """Map the public approval mode to generated app-server start params.""" if not isinstance(approval_mode, ApprovalMode): supported = ", ".join(mode.value for mode in ApprovalMode) raise ValueError(f"approval_mode must be one of: {supported}") match approval_mode: case ApprovalMode.auto_review: return ( AskForApproval(root=AskForApprovalValue.on_request), ApprovalsReviewer.auto_review, ) case ApprovalMode.deny_all: return AskForApproval(root=AskForApprovalValue.never), None case _: return _assert_never_approval_mode(approval_mode) def _assert_never_approval_mode(approval_mode: NoReturn) -> NoReturn: """Make approval mode mapping exhaustive for static type checkers.""" raise AssertionError(f"Unhandled approval mode: {approval_mode!r}") def _approval_mode_override_settings( approval_mode: ApprovalMode | None, ) -> tuple[AskForApproval | None, ApprovalsReviewer | None]: """Map an optional public approval mode to app-server override params.""" if approval_mode is None: return None, None return _approval_mode_settings(approval_mode)