Source code for ralph.runtime._version_info
"""PythonVersionInfo dataclass for structured Python runtime version metadata."""
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from ralph.runtime.environment import SysModuleProtocol
[docs]
@dataclass(frozen=True)
class PythonVersionInfo:
"""Structured Python runtime version metadata."""
major: int
minor: int
micro: int
releaselevel: str
serial: int
implementation: str
executable: Path
version: str
[docs]
@classmethod
def from_sys(cls, sys_module: SysModuleProtocol) -> PythonVersionInfo:
"""Build version metadata from a sys-like module."""
return cls(
major=sys_module.version_info.major,
minor=sys_module.version_info.minor,
micro=sys_module.version_info.micro,
releaselevel=sys_module.version_info.releaselevel,
serial=sys_module.version_info.serial,
implementation=sys_module.implementation.name,
executable=Path(sys_module.executable),
version=sys_module.version,
)
__all__ = ["PythonVersionInfo"]