Source code for xnatctl.core.output

"""Output formatting for xnatctl.

Provides consistent output in JSON, table, and quiet modes using Rich.
"""

from __future__ import annotations

import json
from collections.abc import Sequence
from enum import Enum
from typing import Any

from rich.console import Console
from rich.progress import BarColumn, Progress, SpinnerColumn, TaskProgressColumn, TextColumn
from rich.table import Table

from xnatctl.core.redact import redact_url_query

# =============================================================================
# Console Instances
# =============================================================================

console = Console()
err_console = Console(stderr=True)


# =============================================================================
# Output Format
# =============================================================================


[docs] class OutputFormat(Enum): """Output format options.""" JSON = "json" TABLE = "table"
[docs] @classmethod def from_string(cls, value: str) -> OutputFormat: """Create from string value.""" return cls(value.lower())
# ============================================================================= # Table Output # ============================================================================= # ============================================================================= # JSON Output # ============================================================================= # ============================================================================= # Unified Output # ============================================================================= # ============================================================================= # Status Messages # ============================================================================= # ============================================================================= # Progress # =============================================================================
[docs] def create_progress() -> Progress: """Create a Rich progress bar. Returns: Progress instance. """ return Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), BarColumn(), TaskProgressColumn(), console=console, )
[docs] def create_spinner() -> Progress: """Create a spinner for indeterminate progress. Returns: Progress instance with spinner only. """ return Progress( SpinnerColumn(), TextColumn("[progress.description]{task.description}"), console=console, )