pygui: added type hinting to everything under base core.gui
This commit is contained in:
parent
adfce52632
commit
0356f3b19c
17 changed files with 473 additions and 430 deletions
|
@ -1,18 +1,18 @@
|
|||
import logging
|
||||
from typing import TYPE_CHECKING, Any, List, Optional, Set, Tuple
|
||||
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Set, Tuple
|
||||
|
||||
import netaddr
|
||||
from netaddr import EUI, IPNetwork
|
||||
|
||||
from core.api.grpc.core_pb2 import Interface, Link, Node
|
||||
from core.gui.graph.node import CanvasNode
|
||||
from core.gui.nodeutils import NodeUtils
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from core.gui.app import Application
|
||||
from core.api.grpc import core_pb2
|
||||
from core.gui.graph.node import CanvasNode
|
||||
|
||||
|
||||
def get_index(iface: "core_pb2.Interface") -> Optional[int]:
|
||||
def get_index(iface: Interface) -> Optional[int]:
|
||||
if not iface.ip4:
|
||||
return None
|
||||
net = netaddr.IPNetwork(f"{iface.ip4}/{iface.ip4_mask}")
|
||||
|
@ -44,18 +44,18 @@ class Subnets:
|
|||
|
||||
class InterfaceManager:
|
||||
def __init__(self, app: "Application") -> None:
|
||||
self.app = app
|
||||
self.app: "Application" = app
|
||||
ip4 = self.app.guiconfig.ips.ip4
|
||||
ip6 = self.app.guiconfig.ips.ip6
|
||||
self.ip4_mask = 24
|
||||
self.ip6_mask = 64
|
||||
self.ip4_subnets = IPNetwork(f"{ip4}/{self.ip4_mask}")
|
||||
self.ip6_subnets = IPNetwork(f"{ip6}/{self.ip6_mask}")
|
||||
self.ip4_mask: int = 24
|
||||
self.ip6_mask: int = 64
|
||||
self.ip4_subnets: IPNetwork = IPNetwork(f"{ip4}/{self.ip4_mask}")
|
||||
self.ip6_subnets: IPNetwork = IPNetwork(f"{ip6}/{self.ip6_mask}")
|
||||
mac = self.app.guiconfig.mac
|
||||
self.mac = EUI(mac, dialect=netaddr.mac_unix_expanded)
|
||||
self.current_mac = None
|
||||
self.current_subnets = None
|
||||
self.used_subnets = {}
|
||||
self.mac: EUI = EUI(mac, dialect=netaddr.mac_unix_expanded)
|
||||
self.current_mac: Optional[EUI] = None
|
||||
self.current_subnets: Optional[Subnets] = None
|
||||
self.used_subnets: Dict[Tuple[IPNetwork, IPNetwork], Subnets] = {}
|
||||
|
||||
def update_ips(self, ip4: str, ip6: str) -> None:
|
||||
self.reset()
|
||||
|
@ -84,7 +84,7 @@ class InterfaceManager:
|
|||
self.current_subnets = None
|
||||
self.used_subnets.clear()
|
||||
|
||||
def removed(self, links: List["core_pb2.Link"]) -> None:
|
||||
def removed(self, links: List[Link]) -> None:
|
||||
# get remaining subnets
|
||||
remaining_subnets = set()
|
||||
for edge in self.app.core.links.values():
|
||||
|
@ -114,7 +114,7 @@ class InterfaceManager:
|
|||
subnets.used_indexes.discard(index)
|
||||
self.current_subnets = None
|
||||
|
||||
def joined(self, links: List["core_pb2.Link"]) -> None:
|
||||
def joined(self, links: List[Link]) -> None:
|
||||
ifaces = []
|
||||
for link in links:
|
||||
if link.HasField("iface1"):
|
||||
|
@ -132,7 +132,7 @@ class InterfaceManager:
|
|||
if subnets.key() not in self.used_subnets:
|
||||
self.used_subnets[subnets.key()] = subnets
|
||||
|
||||
def next_index(self, node: "core_pb2.Node") -> int:
|
||||
def next_index(self, node: Node) -> int:
|
||||
if NodeUtils.is_router_node(node):
|
||||
index = 1
|
||||
else:
|
||||
|
@ -144,13 +144,13 @@ class InterfaceManager:
|
|||
index += 1
|
||||
return index
|
||||
|
||||
def get_ips(self, node: "core_pb2.Node") -> [str, str]:
|
||||
def get_ips(self, node: Node) -> [str, str]:
|
||||
index = self.next_index(node)
|
||||
ip4 = self.current_subnets.ip4[index]
|
||||
ip6 = self.current_subnets.ip6[index]
|
||||
return str(ip4), str(ip6)
|
||||
|
||||
def get_subnets(self, iface: "core_pb2.Interface") -> Subnets:
|
||||
def get_subnets(self, iface: Interface) -> Subnets:
|
||||
ip4_subnet = self.ip4_subnets
|
||||
if iface.ip4:
|
||||
ip4_subnet = IPNetwork(f"{iface.ip4}/{iface.ip4_mask}").cidr
|
||||
|
@ -161,7 +161,7 @@ class InterfaceManager:
|
|||
return self.used_subnets.get(subnets.key(), subnets)
|
||||
|
||||
def determine_subnets(
|
||||
self, canvas_src_node: "CanvasNode", canvas_dst_node: "CanvasNode"
|
||||
self, canvas_src_node: CanvasNode, canvas_dst_node: CanvasNode
|
||||
) -> None:
|
||||
src_node = canvas_src_node.core_node
|
||||
dst_node = canvas_dst_node.core_node
|
||||
|
@ -185,7 +185,7 @@ class InterfaceManager:
|
|||
logging.info("ignoring subnet change for link between network nodes")
|
||||
|
||||
def find_subnets(
|
||||
self, canvas_node: "CanvasNode", visited: Set[int] = None
|
||||
self, canvas_node: CanvasNode, visited: Set[int] = None
|
||||
) -> Optional[IPNetwork]:
|
||||
logging.info("finding subnet for node: %s", canvas_node.core_node.name)
|
||||
canvas = self.app.canvas
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue