fixed session.add_hook to not require a source, since it was not typically used an None was being passed, cleaned up some bad type hinting in related to session.py
This commit is contained in:
parent
4b6ba90331
commit
bcd9e4ceb1
8 changed files with 26 additions and 22 deletions
|
@ -232,7 +232,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
# add all hooks
|
# add all hooks
|
||||||
for hook in request.hooks:
|
for hook in request.hooks:
|
||||||
state = EventTypes(hook.state)
|
state = EventTypes(hook.state)
|
||||||
session.add_hook(state, hook.file, None, hook.data)
|
session.add_hook(state, hook.file, hook.data)
|
||||||
|
|
||||||
# create nodes
|
# create nodes
|
||||||
_, exceptions = grpcutils.create_nodes(session, request.nodes)
|
_, exceptions = grpcutils.create_nodes(session, request.nodes)
|
||||||
|
@ -918,7 +918,7 @@ class CoreGrpcServer(core_pb2_grpc.CoreApiServicer):
|
||||||
session = self.get_session(request.session_id, context)
|
session = self.get_session(request.session_id, context)
|
||||||
hook = request.hook
|
hook = request.hook
|
||||||
state = EventTypes(hook.state)
|
state = EventTypes(hook.state)
|
||||||
session.add_hook(state, hook.file, None, hook.data)
|
session.add_hook(state, hook.file, hook.data)
|
||||||
return core_pb2.AddHookResponse(result=True)
|
return core_pb2.AddHookResponse(result=True)
|
||||||
|
|
||||||
def GetMobilityConfigs(
|
def GetMobilityConfigs(
|
||||||
|
|
|
@ -1501,7 +1501,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
||||||
return ()
|
return ()
|
||||||
state = int(state)
|
state = int(state)
|
||||||
state = EventTypes(state)
|
state = EventTypes(state)
|
||||||
self.session.add_hook(state, file_name, source_name, data)
|
self.session.add_hook(state, file_name, data, source_name)
|
||||||
return ()
|
return ()
|
||||||
|
|
||||||
# writing a file to the host
|
# writing a file to the host
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
from typing import List, Optional
|
from typing import List, Optional, Union
|
||||||
|
|
||||||
import netaddr
|
import netaddr
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ class IdGen:
|
||||||
|
|
||||||
|
|
||||||
def link_config(
|
def link_config(
|
||||||
network: CoreNetworkBase,
|
node: Union[CoreNetworkBase, PhysicalNode],
|
||||||
interface: CoreInterface,
|
interface: CoreInterface,
|
||||||
link_options: LinkOptions,
|
link_options: LinkOptions,
|
||||||
devname: str = None,
|
devname: str = None,
|
||||||
|
@ -30,7 +30,7 @@ def link_config(
|
||||||
"""
|
"""
|
||||||
Convenience method for configuring a link,
|
Convenience method for configuring a link,
|
||||||
|
|
||||||
:param network: network to configure link for
|
:param node: network to configure link for
|
||||||
:param interface: interface to configure
|
:param interface: interface to configure
|
||||||
:param link_options: data to configure link with
|
:param link_options: data to configure link with
|
||||||
:param devname: device name, default is None
|
:param devname: device name, default is None
|
||||||
|
@ -49,10 +49,10 @@ def link_config(
|
||||||
|
|
||||||
# hacky check here, because physical and emane nodes do not conform to the same
|
# hacky check here, because physical and emane nodes do not conform to the same
|
||||||
# linkconfig interface
|
# linkconfig interface
|
||||||
if not isinstance(network, (EmaneNet, PhysicalNode)):
|
if not isinstance(node, (EmaneNet, PhysicalNode)):
|
||||||
config["devname"] = devname
|
config["devname"] = devname
|
||||||
|
|
||||||
network.linkconfig(**config)
|
node.linkconfig(**config)
|
||||||
|
|
||||||
|
|
||||||
class NodeOptions:
|
class NodeOptions:
|
||||||
|
|
|
@ -196,7 +196,11 @@ class Session:
|
||||||
def _link_nodes(
|
def _link_nodes(
|
||||||
self, node_one_id: int, node_two_id: int
|
self, node_one_id: int, node_two_id: int
|
||||||
) -> Tuple[
|
) -> Tuple[
|
||||||
Optional[NodeBase], Optional[NodeBase], CoreNetworkBase, CoreNetworkBase, GreTap
|
Optional[CoreNode],
|
||||||
|
Optional[CoreNode],
|
||||||
|
Optional[CoreNetworkBase],
|
||||||
|
Optional[CoreNetworkBase],
|
||||||
|
GreTap,
|
||||||
]:
|
]:
|
||||||
"""
|
"""
|
||||||
Convenience method for retrieving nodes within link data.
|
Convenience method for retrieving nodes within link data.
|
||||||
|
@ -856,19 +860,19 @@ class Session:
|
||||||
CoreXmlWriter(self).write(file_name)
|
CoreXmlWriter(self).write(file_name)
|
||||||
|
|
||||||
def add_hook(
|
def add_hook(
|
||||||
self, state: EventTypes, file_name: str, source_name: str, data: str
|
self, state: EventTypes, file_name: str, data: str, source_name: str = None
|
||||||
) -> None:
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Store a hook from a received file message.
|
Store a hook from a received file message.
|
||||||
|
|
||||||
:param state: when to run hook
|
:param state: when to run hook
|
||||||
:param file_name: file name for hook
|
:param file_name: file name for hook
|
||||||
:param source_name: source name
|
|
||||||
:param data: hook data
|
:param data: hook data
|
||||||
|
:param source_name: source name
|
||||||
:return: nothing
|
:return: nothing
|
||||||
"""
|
"""
|
||||||
logging.info(
|
logging.info(
|
||||||
"setting state hook: %s - %s from %s", state, file_name, source_name
|
"setting state hook: %s - %s source(%s)", state, file_name, source_name
|
||||||
)
|
)
|
||||||
hook = file_name, data
|
hook = file_name, data
|
||||||
state_hooks = self._hooks.setdefault(state, [])
|
state_hooks = self._hooks.setdefault(state, [])
|
||||||
|
|
|
@ -413,14 +413,14 @@ class CoreNodeBase(NodeBase):
|
||||||
netif.setposition()
|
netif.setposition()
|
||||||
|
|
||||||
def commonnets(
|
def commonnets(
|
||||||
self, obj: "CoreNodeBase", want_ctrl: bool = False
|
self, node: "CoreNodeBase", want_ctrl: bool = False
|
||||||
) -> List[Tuple[NodeBase, CoreInterface, CoreInterface]]:
|
) -> List[Tuple["CoreNetworkBase", CoreInterface, CoreInterface]]:
|
||||||
"""
|
"""
|
||||||
Given another node or net object, return common networks between
|
Given another node or net object, return common networks between
|
||||||
this node and that object. A list of tuples is returned, with each tuple
|
this node and that object. A list of tuples is returned, with each tuple
|
||||||
consisting of (network, interface1, interface2).
|
consisting of (network, interface1, interface2).
|
||||||
|
|
||||||
:param obj: object to get common network with
|
:param node: node to get common network with
|
||||||
:param want_ctrl: flag set to determine if control network are wanted
|
:param want_ctrl: flag set to determine if control network are wanted
|
||||||
:return: tuples of common networks
|
:return: tuples of common networks
|
||||||
"""
|
"""
|
||||||
|
@ -428,7 +428,7 @@ class CoreNodeBase(NodeBase):
|
||||||
for netif1 in self.netifs():
|
for netif1 in self.netifs():
|
||||||
if not want_ctrl and hasattr(netif1, "control"):
|
if not want_ctrl and hasattr(netif1, "control"):
|
||||||
continue
|
continue
|
||||||
for netif2 in obj.netifs():
|
for netif2 in node.netifs():
|
||||||
if netif1.net == netif2.net:
|
if netif1.net == netif2.net:
|
||||||
common.append((netif1.net, netif1, netif2))
|
common.append((netif1.net, netif1, netif2))
|
||||||
return common
|
return common
|
||||||
|
@ -1041,7 +1041,7 @@ class CoreNetworkBase(NodeBase):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def getlinknetif(self, net: "CoreNetworkBase") -> CoreInterface:
|
def getlinknetif(self, net: "CoreNetworkBase") -> Optional[CoreInterface]:
|
||||||
"""
|
"""
|
||||||
Return the interface of that links this net with another net.
|
Return the interface of that links this net with another net.
|
||||||
|
|
||||||
|
@ -1049,7 +1049,7 @@ class CoreNetworkBase(NodeBase):
|
||||||
:return: interface the provided network is linked to
|
:return: interface the provided network is linked to
|
||||||
"""
|
"""
|
||||||
for netif in self.netifs():
|
for netif in self.netifs():
|
||||||
if hasattr(netif, "othernet") and netif.othernet == net:
|
if getattr(netif, "othernet", None) == net:
|
||||||
return netif
|
return netif
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
|
@ -662,7 +662,7 @@ class CoreXmlReader:
|
||||||
state = EventTypes(state)
|
state = EventTypes(state)
|
||||||
data = hook.text
|
data = hook.text
|
||||||
logging.info("reading hook: state(%s) name(%s)", state, name)
|
logging.info("reading hook: state(%s) name(%s)", state, name)
|
||||||
self.session.add_hook(state, name, None, data)
|
self.session.add_hook(state, name, data)
|
||||||
|
|
||||||
def read_session_origin(self) -> None:
|
def read_session_origin(self) -> None:
|
||||||
session_origin = self.scenario.find("session_origin")
|
session_origin = self.scenario.find("session_origin")
|
||||||
|
|
|
@ -450,7 +450,7 @@ class TestGrpc:
|
||||||
session = grpc_server.coreemu.create_session()
|
session = grpc_server.coreemu.create_session()
|
||||||
file_name = "test"
|
file_name = "test"
|
||||||
file_data = "echo hello"
|
file_data = "echo hello"
|
||||||
session.add_hook(EventTypes.RUNTIME_STATE, file_name, None, file_data)
|
session.add_hook(EventTypes.RUNTIME_STATE, file_name, file_data)
|
||||||
|
|
||||||
# then
|
# then
|
||||||
with client.context_connect():
|
with client.context_connect():
|
||||||
|
|
|
@ -23,12 +23,12 @@ class TestXml:
|
||||||
file_name = "runtime_hook.sh"
|
file_name = "runtime_hook.sh"
|
||||||
data = "#!/bin/sh\necho hello"
|
data = "#!/bin/sh\necho hello"
|
||||||
state = EventTypes.RUNTIME_STATE
|
state = EventTypes.RUNTIME_STATE
|
||||||
session.add_hook(state, file_name, None, data)
|
session.add_hook(state, file_name, data)
|
||||||
|
|
||||||
file_name = "instantiation_hook.sh"
|
file_name = "instantiation_hook.sh"
|
||||||
data = "#!/bin/sh\necho hello"
|
data = "#!/bin/sh\necho hello"
|
||||||
state = EventTypes.INSTANTIATION_STATE
|
state = EventTypes.INSTANTIATION_STATE
|
||||||
session.add_hook(state, file_name, None, data)
|
session.add_hook(state, file_name, data)
|
||||||
|
|
||||||
# save xml
|
# save xml
|
||||||
xml_file = tmpdir.join("session.xml")
|
xml_file = tmpdir.join("session.xml")
|
||||||
|
|
Loading…
Add table
Reference in a new issue