Source code for netgear_switch.cli.context
"""Shared CLI context and exit-code policy (leaf module, no cli/ imports)."""
from __future__ import annotations
from dataclasses import dataclass
from typing import TYPE_CHECKING
from netgear_switch.errors import ProtectedPortError, WriteVerificationError
if TYPE_CHECKING:
from typing import TextIO
from netgear_switch.errors import NetgearSwitchError
EXIT_OK = 0
EXIT_ERROR = 1
EXIT_USAGE = 2
EXIT_VERIFY = 3
EXIT_PROTECTED = 4
[docs]
@dataclass
class CliContext:
"""Streams and global flags threaded through every command handler."""
out: TextIO
err: TextIO
inp: TextIO
as_json: bool
verbose: bool
[docs]
def exit_code_for(exc: NetgearSwitchError) -> int:
"""Map a library error to a distinct process exit code."""
if isinstance(exc, WriteVerificationError):
return EXIT_VERIFY
if isinstance(exc, ProtectedPortError):
return EXIT_PROTECTED
return EXIT_ERROR