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

1from __future__ import annotations 

2 

3from typing import Sequence 

4 

5from harborapi.models.models import Storage 

6from harborapi.models.models import SystemInfo 

7from rich.table import Table 

8 

9from ...logs import logger 

10from ..formatting.bytes import bytesize_str 

11from ._utils import get_table 

12 

13 

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] 

22 

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 

27 

28 # Add empty row if no storage 

29 if not info.storage: 

30 info.storage = [Storage(total=0, free=0)] 

31 

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