switched core emulator data files from using namedtuples to backported dataclasses
This commit is contained in:
parent
5d9b451b1d
commit
8186c62b19
11 changed files with 240 additions and 242 deletions
|
@ -23,14 +23,12 @@ def handle_node_event(event: NodeData) -> core_pb2.NodeEvent:
|
|||
:return: node event that contains node id, name, model, position, and services
|
||||
"""
|
||||
position = core_pb2.Position(x=event.x_position, y=event.y_position)
|
||||
services = event.services or ""
|
||||
services = services.split("|")
|
||||
node_proto = core_pb2.Node(
|
||||
id=event.id,
|
||||
name=event.name,
|
||||
model=event.model,
|
||||
position=position,
|
||||
services=services,
|
||||
services=event.services,
|
||||
)
|
||||
return core_pb2.NodeEvent(node=node_proto, source=event.source)
|
||||
|
||||
|
|
|
@ -300,7 +300,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
coreapi.CoreExceptionTlv,
|
||||
[
|
||||
(ExceptionTlvs.NODE, exception_data.node),
|
||||
(ExceptionTlvs.SESSION, exception_data.session),
|
||||
(ExceptionTlvs.SESSION, str(exception_data.session)),
|
||||
(ExceptionTlvs.LEVEL, exception_data.level.value),
|
||||
(ExceptionTlvs.SOURCE, exception_data.source),
|
||||
(ExceptionTlvs.DATE, exception_data.date),
|
||||
|
@ -639,7 +639,7 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
:return:
|
||||
"""
|
||||
exception_data = ExceptionData(
|
||||
session=str(self.session.id),
|
||||
session=self.session.id,
|
||||
node=node,
|
||||
date=time.ctime(),
|
||||
level=level.value,
|
||||
|
@ -1891,13 +1891,13 @@ class CoreHandler(socketserver.BaseRequestHandler):
|
|||
node = self.session.get_node(node_id)
|
||||
values = ServiceShim.tovaluelist(node, service)
|
||||
config_data = ConfigData(
|
||||
message_type=0,
|
||||
message_type=MessageFlags.NONE,
|
||||
node=node_id,
|
||||
object=self.session.services.name,
|
||||
type=ConfigFlags.UPDATE.value,
|
||||
data_types=data_types,
|
||||
data_values=values,
|
||||
session=str(self.session.id),
|
||||
session=self.session.id,
|
||||
opaque=opaque,
|
||||
)
|
||||
self.session.broadcast_config(config_data)
|
||||
|
|
|
@ -18,6 +18,9 @@ def convert_node(node_data):
|
|||
:param core.emulator.data.NodeData node_data: node data to convert
|
||||
:return: packed node message
|
||||
"""
|
||||
services = None
|
||||
if node_data.services is not None:
|
||||
services = "|".join([x for x in node_data.services])
|
||||
tlv_data = structutils.pack_values(
|
||||
coreapi.CoreNodeTlv,
|
||||
[
|
||||
|
@ -30,12 +33,12 @@ def convert_node(node_data):
|
|||
(NodeTlvs.MODEL, node_data.model),
|
||||
(NodeTlvs.EMULATION_ID, node_data.emulation_id),
|
||||
(NodeTlvs.EMULATION_SERVER, node_data.server),
|
||||
(NodeTlvs.SESSION, node_data.session),
|
||||
(NodeTlvs.SESSION, str(node_data.session)),
|
||||
(NodeTlvs.X_POSITION, int(node_data.x_position)),
|
||||
(NodeTlvs.Y_POSITION, int(node_data.y_position)),
|
||||
(NodeTlvs.CANVAS, node_data.canvas),
|
||||
(NodeTlvs.NETWORK_ID, node_data.network_id),
|
||||
(NodeTlvs.SERVICES, node_data.services),
|
||||
(NodeTlvs.SERVICES, services),
|
||||
(NodeTlvs.LATITUDE, str(node_data.latitude)),
|
||||
(NodeTlvs.LONGITUDE, str(node_data.longitude)),
|
||||
(NodeTlvs.ALTITUDE, str(node_data.altitude)),
|
||||
|
@ -65,7 +68,7 @@ def convert_config(config_data):
|
|||
(ConfigTlvs.BITMAP, config_data.bitmap),
|
||||
(ConfigTlvs.POSSIBLE_VALUES, config_data.possible_values),
|
||||
(ConfigTlvs.GROUPS, config_data.groups),
|
||||
(ConfigTlvs.SESSION, config_data.session),
|
||||
(ConfigTlvs.SESSION, str(config_data.session)),
|
||||
(ConfigTlvs.INTERFACE_NUMBER, config_data.interface_number),
|
||||
(ConfigTlvs.NETWORK_ID, config_data.network_id),
|
||||
(ConfigTlvs.OPAQUE, config_data.opaque),
|
||||
|
|
|
@ -2,121 +2,129 @@
|
|||
CORE data objects.
|
||||
"""
|
||||
|
||||
import collections
|
||||
from dataclasses import dataclass
|
||||
from typing import List, Tuple
|
||||
|
||||
ConfigData = collections.namedtuple(
|
||||
"ConfigData",
|
||||
[
|
||||
"message_type",
|
||||
"node",
|
||||
"object",
|
||||
"type",
|
||||
"data_types",
|
||||
"data_values",
|
||||
"captions",
|
||||
"bitmap",
|
||||
"possible_values",
|
||||
"groups",
|
||||
"session",
|
||||
"interface_number",
|
||||
"network_id",
|
||||
"opaque",
|
||||
],
|
||||
from core.emulator.enumerations import (
|
||||
EventTypes,
|
||||
ExceptionLevels,
|
||||
LinkTypes,
|
||||
MessageFlags,
|
||||
NodeTypes,
|
||||
)
|
||||
ConfigData.__new__.__defaults__ = (None,) * len(ConfigData._fields)
|
||||
|
||||
EventData = collections.namedtuple(
|
||||
"EventData", ["node", "event_type", "name", "data", "time", "session"]
|
||||
)
|
||||
EventData.__new__.__defaults__ = (None,) * len(EventData._fields)
|
||||
|
||||
ExceptionData = collections.namedtuple(
|
||||
"ExceptionData", ["node", "session", "level", "source", "date", "text", "opaque"]
|
||||
)
|
||||
ExceptionData.__new__.__defaults__ = (None,) * len(ExceptionData._fields)
|
||||
@dataclass
|
||||
class ConfigData:
|
||||
message_type: MessageFlags = None
|
||||
node: int = None
|
||||
object: str = None
|
||||
type: int = None
|
||||
data_types: Tuple[int] = None
|
||||
data_values: str = None
|
||||
captions: str = None
|
||||
bitmap: str = None
|
||||
possible_values: str = None
|
||||
groups: str = None
|
||||
session: int = None
|
||||
interface_number: int = None
|
||||
network_id: int = None
|
||||
opaque: str = None
|
||||
|
||||
FileData = collections.namedtuple(
|
||||
"FileData",
|
||||
[
|
||||
"message_type",
|
||||
"node",
|
||||
"name",
|
||||
"mode",
|
||||
"number",
|
||||
"type",
|
||||
"source",
|
||||
"session",
|
||||
"data",
|
||||
"compressed_data",
|
||||
],
|
||||
)
|
||||
FileData.__new__.__defaults__ = (None,) * len(FileData._fields)
|
||||
|
||||
NodeData = collections.namedtuple(
|
||||
"NodeData",
|
||||
[
|
||||
"message_type",
|
||||
"id",
|
||||
"node_type",
|
||||
"name",
|
||||
"ip_address",
|
||||
"mac_address",
|
||||
"ip6_address",
|
||||
"model",
|
||||
"emulation_id",
|
||||
"server",
|
||||
"session",
|
||||
"x_position",
|
||||
"y_position",
|
||||
"canvas",
|
||||
"network_id",
|
||||
"services",
|
||||
"latitude",
|
||||
"longitude",
|
||||
"altitude",
|
||||
"icon",
|
||||
"opaque",
|
||||
"source",
|
||||
],
|
||||
)
|
||||
NodeData.__new__.__defaults__ = (None,) * len(NodeData._fields)
|
||||
@dataclass
|
||||
class EventData:
|
||||
node: int = None
|
||||
event_type: EventTypes = None
|
||||
name: str = None
|
||||
data: str = None
|
||||
time: float = None
|
||||
session: int = None
|
||||
|
||||
LinkData = collections.namedtuple(
|
||||
"LinkData",
|
||||
[
|
||||
"message_type",
|
||||
"node1_id",
|
||||
"node2_id",
|
||||
"delay",
|
||||
"bandwidth",
|
||||
"per",
|
||||
"dup",
|
||||
"jitter",
|
||||
"mer",
|
||||
"burst",
|
||||
"session",
|
||||
"mburst",
|
||||
"link_type",
|
||||
"gui_attributes",
|
||||
"unidirectional",
|
||||
"emulation_id",
|
||||
"network_id",
|
||||
"key",
|
||||
"interface1_id",
|
||||
"interface1_name",
|
||||
"interface1_ip4",
|
||||
"interface1_ip4_mask",
|
||||
"interface1_mac",
|
||||
"interface1_ip6",
|
||||
"interface1_ip6_mask",
|
||||
"interface2_id",
|
||||
"interface2_name",
|
||||
"interface2_ip4",
|
||||
"interface2_ip4_mask",
|
||||
"interface2_mac",
|
||||
"interface2_ip6",
|
||||
"interface2_ip6_mask",
|
||||
"opaque",
|
||||
],
|
||||
)
|
||||
LinkData.__new__.__defaults__ = (None,) * len(LinkData._fields)
|
||||
|
||||
@dataclass
|
||||
class ExceptionData:
|
||||
node: int = None
|
||||
session: int = None
|
||||
level: ExceptionLevels = None
|
||||
source: str = None
|
||||
date: str = None
|
||||
text: str = None
|
||||
opaque: str = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class FileData:
|
||||
message_type: MessageFlags = None
|
||||
node: int = None
|
||||
name: str = None
|
||||
mode: str = None
|
||||
number: int = None
|
||||
type: str = None
|
||||
source: str = None
|
||||
session: int = None
|
||||
data: str = None
|
||||
compressed_data: str = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class NodeData:
|
||||
message_type: MessageFlags = None
|
||||
id: int = None
|
||||
node_type: NodeTypes = None
|
||||
name: str = None
|
||||
ip_address: str = None
|
||||
mac_address: str = None
|
||||
ip6_address: str = None
|
||||
model: str = None
|
||||
emulation_id: int = None
|
||||
server: str = None
|
||||
session: int = None
|
||||
x_position: float = None
|
||||
y_position: float = None
|
||||
canvas: int = None
|
||||
network_id: int = None
|
||||
services: List[str] = None
|
||||
latitude: float = None
|
||||
longitude: float = None
|
||||
altitude: float = None
|
||||
icon: str = None
|
||||
opaque: str = None
|
||||
source: str = None
|
||||
|
||||
|
||||
@dataclass
|
||||
class LinkData:
|
||||
message_type: MessageFlags = None
|
||||
node1_id: int = None
|
||||
node2_id: int = None
|
||||
delay: float = None
|
||||
bandwidth: float = None
|
||||
per: float = None
|
||||
dup: float = None
|
||||
jitter: float = None
|
||||
mer: float = None
|
||||
burst: float = None
|
||||
session: int = None
|
||||
mburst: float = None
|
||||
link_type: LinkTypes = None
|
||||
gui_attributes: str = None
|
||||
unidirectional: int = None
|
||||
emulation_id: int = None
|
||||
network_id: int = None
|
||||
key: int = None
|
||||
interface1_id: int = None
|
||||
interface1_name: str = None
|
||||
interface1_ip4: str = None
|
||||
interface1_ip4_mask: int = None
|
||||
interface1_mac: str = None
|
||||
interface1_ip6: str = None
|
||||
interface1_ip6_mask: int = None
|
||||
interface2_id: int = None
|
||||
interface2_name: str = None
|
||||
interface2_ip4: str = None
|
||||
interface2_ip4_mask: int = None
|
||||
interface2_mac: str = None
|
||||
interface2_ip6: str = None
|
||||
interface2_ip6_mask: int = None
|
||||
opaque: str = None
|
||||
|
|
|
@ -1464,7 +1464,7 @@ class Session:
|
|||
"""
|
||||
exception_data = ExceptionData(
|
||||
node=node_id,
|
||||
session=str(self.id),
|
||||
session=self.id,
|
||||
level=level,
|
||||
source=source,
|
||||
date=time.ctime(),
|
||||
|
|
|
@ -193,7 +193,7 @@ class NodeBase:
|
|||
|
||||
def data(
|
||||
self, message_type: MessageFlags = MessageFlags.NONE, source: str = None
|
||||
) -> NodeData:
|
||||
) -> Optional[NodeData]:
|
||||
"""
|
||||
Build a data object for this node.
|
||||
|
||||
|
@ -209,9 +209,9 @@ class NodeBase:
|
|||
server = None
|
||||
if self.server is not None:
|
||||
server = self.server.name
|
||||
services = self.services
|
||||
if services is not None:
|
||||
services = "|".join([service.name for service in services])
|
||||
services = None
|
||||
if self.services is not None:
|
||||
services = [service.name for service in self.services]
|
||||
return NodeData(
|
||||
message_type=message_type,
|
||||
id=self.id,
|
||||
|
@ -1131,7 +1131,7 @@ class CoreNetworkBase(NodeBase):
|
|||
|
||||
netif.swapparams("_params_up")
|
||||
link_data = LinkData(
|
||||
message_type=0,
|
||||
message_type=MessageFlags.NONE,
|
||||
node1_id=linked_node.id,
|
||||
node2_id=self.id,
|
||||
link_type=self.linktype,
|
||||
|
|
|
@ -880,7 +880,7 @@ class PtpNet(CoreNetwork):
|
|||
|
||||
def data(
|
||||
self, message_type: MessageFlags = MessageFlags.NONE, source: str = None
|
||||
) -> NodeData:
|
||||
) -> Optional[NodeData]:
|
||||
"""
|
||||
Do not generate a Node Message for point-to-point links. They are
|
||||
built using a link message instead.
|
||||
|
|
|
@ -637,7 +637,9 @@ class CoreServices:
|
|||
status = -1
|
||||
return status
|
||||
|
||||
def get_service_file(self, node: CoreNode, service_name: str, filename: str) -> str:
|
||||
def get_service_file(
|
||||
self, node: CoreNode, service_name: str, filename: str
|
||||
) -> FileData:
|
||||
"""
|
||||
Send a File Message when the GUI has requested a service file.
|
||||
The file data is either auto-generated or comes from an existing config.
|
||||
|
@ -645,7 +647,7 @@ class CoreServices:
|
|||
:param node: node to get service file from
|
||||
:param service_name: service to get file from
|
||||
:param filename: file name to retrieve
|
||||
:return: file message for node
|
||||
:return: file data
|
||||
"""
|
||||
# get service to get file from
|
||||
service = self.get_service(node.id, service_name, default_service=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue