Current File : /home/inlingua/miniconda3/lib/python3.12/site-packages/conda_anaconda_tos/console/mappers.py
# Copyright (C) 2024 Anaconda, Inc
# SPDX-License-Identifier: BSD-3-Clause
"""Mappers to aid in rendering of console output."""

from __future__ import annotations

from typing import TYPE_CHECKING

from ..models import RemoteToSMetadata

if TYPE_CHECKING:
    from datetime import datetime
    from pathlib import Path
    from typing import Final

    from ..models import LocalToSMetadata


NULL_CHAR: Final = "[dim]-"


def timestamp_mapping(timestamp: datetime) -> str:
    """Map the UTC metadata timestamp to a localized human-readable string."""
    return timestamp.astimezone().strftime("%Y-%m-%d %H:%M:%S %Z")


def accepted_mapping(metadata: RemoteToSMetadata | LocalToSMetadata) -> str:
    """Map the metadata acceptance status to a human-readable string."""
    if isinstance(metadata, RemoteToSMetadata):
        return NULL_CHAR

    tos_accepted = metadata.tos_accepted
    acceptance_timestamp = metadata.acceptance_timestamp
    if tos_accepted:
        if acceptance_timestamp:
            # convert timestamp to localized time
            return f"[bold green]{timestamp_mapping(acceptance_timestamp)}"
        else:
            # accepted but no timestamp
            return "[dim]unknown"
    else:
        return "[bold red]rejected"


def location_mapping(path: Path | None) -> str:
    """Map the metadata path to a human-readable string."""
    if not path:
        return NULL_CHAR
    return str(path.parent.parent)


def version_mapping(version: datetime, remote: RemoteToSMetadata | None) -> str:
    """Map the metadata version to a human-readable string."""
    version_str = timestamp_mapping(version)
    return f"[bold yellow]{version_str} *" if remote else version_str