Coverage for harbor_cli/output/table/system.py: 100%
24 statements
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-09 12:09 +0100
« prev ^ index » next coverage.py v6.5.0, created at 2023-02-09 12:09 +0100
1from __future__ import annotations
3from typing import Sequence
5from harborapi.models.models import Storage
6from harborapi.models.models import SystemInfo
7from rich.table import Table
9from ...logs import logger
10from ..formatting.bytes import bytesize_str
11from ._utils import get_table
14# The ironic thing is that this is not actually system info, but storage info.
15# GeneralInfo is the model used for general system info.
16def systeminfo_table(systeminfo: Sequence[SystemInfo]) -> Table:
17 """Display system info in a table."""
18 if len(systeminfo) > 1:
19 # should never happen
20 logger.warning("Can only display one system info at a time.")
21 info = systeminfo[0]
23 table = get_table("System Info", pluralize=False)
24 table.add_column("Total Capacity")
25 table.add_column("Free Space")
26 table.add_column("Used Space") # calculated
28 # Add empty row if no storage
29 if not info.storage:
30 info.storage = [Storage(total=0, free=0)]
32 # One volume per row
33 for storage in info.storage:
34 # Values are Optional[int]!
35 # We could end up with negative used value if total is missing
36 # but free is present. Not our problem.
37 total = storage.total or 0
38 free = storage.free or 0
39 used = total - free
40 table.add_row(
41 bytesize_str(total),
42 bytesize_str(free),
43 bytesize_str(used),
44 )
45 return table