started type hinting on class variables for nodes/base

This commit is contained in:
Blake Harnden 2020-05-25 00:16:58 -07:00
parent ba8b16ec34
commit 2e78025249

View file

@ -6,6 +6,7 @@ import logging
import os import os
import shutil import shutil
import threading import threading
from threading import RLock
from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type from typing import TYPE_CHECKING, Dict, List, Optional, Tuple, Type
import netaddr import netaddr
@ -16,7 +17,7 @@ from core.constants import MOUNT_BIN, VNODED_BIN
from core.emulator.data import LinkData, NodeData from core.emulator.data import LinkData, NodeData
from core.emulator.enumerations import LinkTypes, MessageFlags, NodeTypes from core.emulator.enumerations import LinkTypes, MessageFlags, NodeTypes
from core.errors import CoreCommandError, CoreError from core.errors import CoreCommandError, CoreError
from core.nodes import client from core.nodes.client import VnodeClient
from core.nodes.interface import CoreInterface, TunTap, Veth from core.nodes.interface import CoreInterface, TunTap, Veth
from core.nodes.netclient import LinuxNetClient, get_net_client from core.nodes.netclient import LinuxNetClient, get_net_client
@ -24,7 +25,9 @@ if TYPE_CHECKING:
from core.emulator.distributed import DistributedServer from core.emulator.distributed import DistributedServer
from core.emulator.session import Session from core.emulator.session import Session
from core.configservice.base import ConfigService from core.configservice.base import ConfigService
from core.services.coreservices import CoreService
CoreServices = List[CoreService]
ConfigServiceType = Type[ConfigService] ConfigServiceType = Type[ConfigService]
_DEFAULT_MTU = 1500 _DEFAULT_MTU = 1500
@ -35,7 +38,7 @@ class NodeBase:
Base class for CORE nodes (nodes and networks) Base class for CORE nodes (nodes and networks)
""" """
apitype = None apitype: Optional[NodeTypes] = None
# TODO: appears start has no usage, verify and remove # TODO: appears start has no usage, verify and remove
def __init__( def __init__(
@ -57,25 +60,25 @@ class NodeBase:
will run on, default is None for localhost will run on, default is None for localhost
""" """
self.session = session self.session: "Session" = session
if _id is None: if _id is None:
_id = session.get_node_id() _id = session.get_node_id()
self.id = _id self.id: int = _id
if name is None: if name is None:
name = f"o{self.id}" name = f"o{self.id}"
self.name = name self.name: str = name
self.server = server self.server: "DistributedServer" = server
self.type = None self.type: Optional[str] = None
self.services = None self.services: CoreServices = []
self._netif = {} self._netif: Dict[int, CoreInterface] = {}
self.ifindex = 0 self.ifindex: int = 0
self.canvas = None self.canvas: Optional[int] = None
self.icon = None self.icon: Optional[str] = None
self.opaque = None self.opaque: Optional[str] = None
self.position = Position() self.position: Position = Position()
self.up = False self.up: bool = False
use_ovs = session.options.get_config("ovs") == "True" use_ovs = session.options.get_config("ovs") == "True"
self.net_client = get_net_client(use_ovs, self.host_cmd) self.net_client: LinuxNetClient = get_net_client(use_ovs, self.host_cmd)
def startup(self) -> None: def startup(self) -> None:
""" """
@ -207,9 +210,7 @@ class NodeBase:
server = None server = None
if self.server is not None: if self.server is not None:
server = self.server.name server = self.server.name
services = None services = [service.name for service in self.services]
if self.services is not None:
services = [service.name for service in self.services]
return NodeData( return NodeData(
message_type=message_type, message_type=message_type,
id=self.id, id=self.id,
@ -266,10 +267,9 @@ class CoreNodeBase(NodeBase):
will run on, default is None for localhost will run on, default is None for localhost
""" """
super().__init__(session, _id, name, start, server) super().__init__(session, _id, name, start, server)
self.services = [] self.config_services: Dict[str, "ConfigService"] = {}
self.config_services = {} self.nodedir: Optional[str] = None
self.nodedir = None self.tmpnodedir: bool = False
self.tmpnodedir = False
def add_config_service(self, service_class: "ConfigServiceType") -> None: def add_config_service(self, service_class: "ConfigServiceType") -> None:
""" """
@ -298,7 +298,7 @@ class CoreNodeBase(NodeBase):
def start_config_services(self) -> None: def start_config_services(self) -> None:
""" """
Determins startup paths and starts configuration services, based on their Determines startup paths and starts configuration services, based on their
dependency chains. dependency chains.
:return: nothing :return: nothing
@ -330,7 +330,6 @@ class CoreNodeBase(NodeBase):
preserve = self.session.options.get_config("preservedir") == "1" preserve = self.session.options.get_config("preservedir") == "1"
if preserve: if preserve:
return return
if self.tmpnodedir: if self.tmpnodedir:
self.host_cmd(f"rm -rf {self.nodedir}") self.host_cmd(f"rm -rf {self.nodedir}")
@ -503,16 +502,16 @@ class CoreNode(CoreNodeBase):
will run on, default is None for localhost will run on, default is None for localhost
""" """
super().__init__(session, _id, name, start, server) super().__init__(session, _id, name, start, server)
self.nodedir = nodedir self.nodedir: Optional[str] = nodedir
self.ctrlchnlname = os.path.abspath( self.ctrlchnlname: str = os.path.abspath(
os.path.join(self.session.session_dir, self.name) os.path.join(self.session.session_dir, self.name)
) )
self.client = None self.client: Optional[VnodeClient] = None
self.pid = None self.pid: Optional[int] = None
self.lock = threading.RLock() self.lock: RLock = RLock()
self._mounts = [] self._mounts: List[Tuple[str, str]] = []
use_ovs = session.options.get_config("ovs") == "True" use_ovs = session.options.get_config("ovs") == "True"
self.node_net_client = self.create_node_net_client(use_ovs) self.node_net_client: LinuxNetClient = self.create_node_net_client(use_ovs)
if start: if start:
self.startup() self.startup()
@ -567,7 +566,7 @@ class CoreNode(CoreNodeBase):
logging.debug("node(%s) pid: %s", self.name, self.pid) logging.debug("node(%s) pid: %s", self.name, self.pid)
# create vnode client # create vnode client
self.client = client.VnodeClient(self.name, self.ctrlchnlname) self.client = VnodeClient(self.name, self.ctrlchnlname)
# bring up the loopback interface # bring up the loopback interface
logging.debug("bringing up loopback interface") logging.debug("bringing up loopback interface")
@ -1201,12 +1200,12 @@ class Position:
:param y: y position :param y: y position
:param z: z position :param z: z position
""" """
self.x = x self.x: float = x
self.y = y self.y: float = y
self.z = z self.z: float = z
self.lon = None self.lon: Optional[float] = None
self.lat = None self.lat: Optional[float] = None
self.alt = None self.alt: Optional[float] = None
def set(self, x: float = None, y: float = None, z: float = None) -> bool: def set(self, x: float = None, y: float = None, z: float = None) -> bool:
""" """