[+] partially wrap ip addr

This commit is contained in:
Siarhei Siniak 2025-04-17 12:11:18 +03:00
parent 7fa2a8a83c
commit 202bf85f55

@ -5,10 +5,11 @@ import ctypes
import os import os
import sys import sys
import logging import logging
import dataclasses
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from typing import (overload, Optional, Literal,) from typing import (overload, Optional, Literal, Any,)
from .cli_bootstrap import PyProject from .cli_bootstrap import PyProject
@ -90,3 +91,44 @@ def runtime_libdirs_init(
ctypes.cdll.LoadLibrary(preload_found) ctypes.cdll.LoadLibrary(preload_found)
else: else:
raise NotImplementedError raise NotImplementedError
class interfaces_index_t:
@dataclasses.dataclass(frozen=True)
class Interface:
@dataclasses.dataclass(frozen=True)
class AddrInfo:
family: str
local: str
name: str
addr_info: list[AddrInfo]
def interfaces_index() -> list[Interfaces]:
ip_addr_res: Any = json.loads(
subprocess.check_output([
'ip', '-j', 'addr',
]).decode('utf-8')
)
assert isinstance(ip_addr_res, list)
ip_addr_res2 = cast(list[Any], p_addr_res,)
assert all([
isinstance(o, dict)
for o in ip_addr_res2.items()
])
ip_addr_res3 = cast(list[dict[Any, Any]], ip_addr_res2)
assert all([
assert isinstance(k, str)
for k, v in o.items()
for o in ip_addr_res3
])
ip_addr_res4 = cast(list[dict[str, Any]], ip_addr_res3)
res : list[interfaces_index_t.Interface] = []
for o in ip_addr_res4: