From eb5dc0afea3bdf10feb5cd219ce78fde6dae33ac Mon Sep 17 00:00:00 2001 From: Christos Choutouridis Date: Sat, 26 Sep 2026 17:15:43 +0300 Subject: [PATCH] Init commit: First try to load and parse --- .gitignore | 9 + Computer Networks II - Programming task.pdf | Bin 0 -> 164910 bytes LICENSE | 21 + source/topology_loader.py | 117 +++ source/topology_parser.py | 930 ++++++++++++++++++++ 5 files changed, 1077 insertions(+) create mode 100644 .gitignore create mode 100644 Computer Networks II - Programming task.pdf create mode 100644 LICENSE create mode 100644 source/topology_loader.py create mode 100644 source/topology_parser.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5925ab4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# IDEs +.idea +.vscode + +# Python specific +__pycache__/ + + + diff --git a/Computer Networks II - Programming task.pdf b/Computer Networks II - Programming task.pdf new file mode 100644 index 0000000000000000000000000000000000000000..bd3248cc197363570209709b5ada8eb0d02a9632 GIT binary patch literal 164910 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

!Zq6be30N8wYDgg40TtO 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
Ne2*Fb~Id2;rtp*|iPBRhfc; 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 I<;4*HA5~jZK>z>% literal 0 HcmV?d00001 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7d9c8af --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Christos Choutouridis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/source/topology_loader.py b/source/topology_loader.py new file mode 100644 index 0000000..456b571 --- /dev/null +++ b/source/topology_loader.py @@ -0,0 +1,117 @@ +"""Load topology JSON files and expose the high-level loading API. + +The loading stage has two public entry points: + + load_topology(path) + Read JSON from disk and return the raw dictionary. + + load(path) + Read JSON from disk and immediately parse it into the typed Topology + model by calling topology_parser.parse_topology(). + +No Mininet code is imported or executed in this module. +""" + +import json +from pathlib import Path +from tempfile import NamedTemporaryFile +from typing import Any, Dict, Union + +from topology_parser import Topology, parse_topology + + +PathLike = Union[str, Path] + + +class TopologyLoadError(ValueError): + """Raised when a topology file cannot be loaded as a JSON object.""" + + +def load_topology(path: PathLike) -> Dict[str, Any]: + """Load a topology JSON file into a raw dictionary. + + Args: + path: Path to the topology JSON file. + + Returns: + Raw JSON dictionary exactly as loaded from disk. + + Raises: + TopologyLoadError: If the file cannot be opened, contains invalid JSON, + or has a non-object JSON value at its root. + """ + + source = Path(path) + + try: + with source.open("r", encoding="utf-8") as handle: + raw = json.load(handle) + except OSError as exc: + raise TopologyLoadError( + "failed to read topology file %s: %s" % (source, exc) + ) from exc + except json.JSONDecodeError as exc: + raise TopologyLoadError( + "invalid JSON in topology file %s at line %d column %d: %s" + % (source, exc.lineno, exc.colno, exc.msg) + ) from exc + + if not isinstance(raw, dict): + raise TopologyLoadError( + "topology root in %s must be a JSON object" % source + ) + + return raw + + +def load(path: PathLike) -> Topology: + """Load and parse a topology file in one convenience call. + + Args: + path: Path to the topology JSON file. + + Returns: + Parsed Topology model. + + Raises: + TopologyLoadError: If the JSON file cannot be loaded. + topology_parser.TopologyParseError: If the loaded JSON cannot be + represented by the topology grammar. + """ + + return parse_topology(load_topology(path)) + + +def _self_test() -> None: + """Run a small smoke test against load_topology() and load().""" + + sample = { + "nodes": [ + { + "name": "s1", + "type": "switch", + } + ], + "links": [], + "services": [], + } + + with NamedTemporaryFile( + mode="w", + suffix=".json", + encoding="utf-8", + delete=True, + ) as handle: + json.dump(sample, handle) + handle.flush() + + raw = load_topology(handle.name) + topology = load(handle.name) + + assert raw["nodes"][0]["name"] == "s1" + assert topology.nodes[0].name == "s1" + + +if __name__ == "__main__": + _self_test() + print("topology_loader: self-test passed") diff --git a/source/topology_parser.py b/source/topology_parser.py new file mode 100644 index 0000000..4d40d74 --- /dev/null +++ b/source/topology_parser.py @@ -0,0 +1,930 @@ +"""Parse the declarative topology JSON representation into typed Python objects. + +This module contains the in-memory semantic model used by the rest of the +pipeline and the parser that converts a raw JSON dictionary into that model. + +The parser is intentionally independent of Mininet. Its job is only to turn +JSON-shaped data into typed Python objects. Cross-reference and semantic +validation belong to the validation stage that follows parsing. + +Author: Christos Choutouridis +""" + +from dataclasses import dataclass, field +from enum import Enum +from typing import Any, Dict, List, Mapping, Optional, Set, Tuple, Union + + +JSONMapping = Mapping[str, Any] + + +class TopologyParseError(ValueError): + """Raised when raw JSON data cannot be represented by the topology model.""" + + +class NodeType(Enum): + """Supported logical node types.""" + + HOST = "host" + SWITCH = "switch" + ROUTER = "router" + + +class AddressingMode(Enum): + """Supported Layer-3 addressing modes for an interface.""" + + NONE = "none" + STATIC = "static" + DHCP = "dhcp" + + +class LinkInterfaceSelector(Enum): + """Special interface selectors that are valid on a link endpoint.""" + + AUTO = "auto" + + +class ServiceInterfaceSelector(Enum): + """Special interface selectors that are valid for a service binding.""" + + AUTO = "auto" + ALL = "all" + + +class ServiceType(Enum): + """Supported service types.""" + + DHCP_SERVER = "dhcp-server" + + +@dataclass +class Interface: + """Describe one logical network interface owned by a node. + + Args: + name: Logical interface tag used by the topology description. + addressing: Layer-3 addressing strategy. Omitting addressing in JSON + is represented as AddressingMode.NONE. + address: Static CIDR address, valid when addressing is STATIC. + gateway: Optional default gateway, valid when addressing is STATIC. + mac: Optional explicit MAC address. Reserved for current/future use. + mtu: Optional MTU value. Reserved for current/future use. + """ + + name: str + addressing: AddressingMode = AddressingMode.NONE + address: Optional[str] = None + gateway: Optional[str] = None + mac: Optional[str] = None + mtu: Optional[int] = None + + +@dataclass +class HostSettings: + """Contain host-specific settings. + + The current grammar does not require host-specific settings yet. Keeping + a dedicated type gives the model a stable extension point. + """ + + +@dataclass +class SwitchSettings: + """Contain switch-specific settings. + + The current grammar does not require switch-specific settings yet. Keeping + a dedicated type gives the model a stable extension point. + """ + + +@dataclass +class RouterSettings: + """Contain router-specific settings. + + Args: + ip_forward: Desired IPv4 forwarding state, or None when unspecified. + rp_filter: Desired reverse-path-filter state, or None when unspecified. + """ + + ip_forward: Optional[bool] = None + rp_filter: Optional[bool] = None + + +NodeSettings = Union[HostSettings, SwitchSettings, RouterSettings] + + +@dataclass +class Node: + """Describe one logical topology node. + + Args: + name: Unique logical node name. + type: Semantic node type. + interfaces: Declared logical interfaces. None means that the node did + not declare an interface set and therefore allows dynamic interface + allocation. An empty dictionary means that an explicit, fixed + interface set was declared and contains zero interfaces. + settings: Type-specific node settings. + """ + + name: str + type: NodeType + interfaces: Optional[Dict[str, Interface]] + settings: NodeSettings + + +@dataclass +class LinkEndpoint: + """Describe one endpoint of a point-to-point logical link. + + Args: + node: Name of the node referenced by the endpoint. + interface: Explicit logical interface tag or the AUTO selector. + """ + + node: str + interface: Union[str, LinkInterfaceSelector] + + +@dataclass +class LinkSettings: + """Contain optional link-specific provisioning settings. + + Args: + bandwidth_mbps: Optional link bandwidth limit in megabits per second. + delay_ms: Optional one-way propagation delay in milliseconds. + loss_percent: Optional packet-loss percentage. + jitter_ms: Optional delay variation in milliseconds. + + Notes: + These fields are reserved as extension points for later Mininet link + provisioning, for example through traffic-controlled link classes. + They are parsed now so the semantic model already has a stable place + for link-level configuration. + """ + + bandwidth_mbps: Optional[float] = None + delay_ms: Optional[float] = None + loss_percent: Optional[float] = None + jitter_ms: Optional[float] = None + + +@dataclass +class Link: + """Describe a link between exactly two endpoints. + + Args: + endpoints: Ordered pair of link endpoints. + name: Optional logical link name used for diagnostics or extensions. + settings: Link-specific provisioning settings. + """ + + endpoints: Tuple[LinkEndpoint, LinkEndpoint] + name: Optional[str] = None + settings: LinkSettings = field(default_factory=LinkSettings) + + +@dataclass +class DHCPRange: + """Describe the address range offered by a DHCP server. + + Args: + start: First address in the DHCP allocation range. + end: Last address in the DHCP allocation range. + """ + + start: str + end: str + + +@dataclass +class DHCPServerSettings: + """Contain DHCP-server-specific settings. + + Args: + address_range: Address range offered to DHCP clients. + gateway: Optional default gateway advertised to DHCP clients. + """ + + address_range: DHCPRange + gateway: Optional[str] = None + + +ServiceSettings = DHCPServerSettings + + +@dataclass +class Service: + """Describe a service attached to a topology node. + + Args: + type: Service implementation type. + node: Name of the node on which the service runs. + interface: Explicit logical interface tag or a supported special + selector such as AUTO or ALL. + settings: Type-specific service settings. + """ + + type: ServiceType + node: str + interface: Union[str, ServiceInterfaceSelector] + settings: ServiceSettings + + +@dataclass +class Topology: + """Contain the complete parsed topology model. + + Args: + nodes: Nodes in declaration order. Keeping nodes as a list preserves + the parsed source faithfully, including duplicate names, so that + the separate validation stage can diagnose them instead of losing + information during parsing. + links: Links in declaration order. Order is preserved because it can + make automatic interface allocation deterministic. + services: Services in declaration order. Order may later be useful for + deterministic startup and shutdown. + """ + + nodes: List[Node] = field(default_factory=list) + links: List[Link] = field(default_factory=list) + services: List[Service] = field(default_factory=list) + + +def _mapping(value: Any, context: str) -> JSONMapping: + """Return a value as a mapping or raise a parse error. + + Args: + value: Value expected to be a JSON object. + context: Human-readable location used in the error message. + + Returns: + The value as a mapping. + + Raises: + TopologyParseError: If value is not a mapping. + """ + + if not isinstance(value, Mapping): + raise TopologyParseError("%s must be a JSON object" % context) + return value + + +def _reject_unknown_fields( + data: JSONMapping, + allowed: Set[str], + context: str, +) -> None: + """Reject object members that are not part of the grammar. + + Args: + data: Parsed JSON object whose member names are checked. + allowed: Set of field names accepted at this grammar location. + context: Human-readable location used in the error message. + + Raises: + TopologyParseError: If one or more unknown fields are present. + """ + + unknown = sorted(set(data.keys()) - allowed) + if unknown: + raise TopologyParseError( + "%s contains unknown field%s: %s" + % ( + context, + "s" if len(unknown) != 1 else "", + ", ".join(repr(name) for name in unknown), + ) + ) + + +def _list(value: Any, context: str) -> List[Any]: + """Return a value as a list or raise a parse error. + + Args: + value: Value expected to be a JSON array. + context: Human-readable location used in the error message. + + Returns: + The value as a list. + + Raises: + TopologyParseError: If value is not a list. + """ + + if not isinstance(value, list): + raise TopologyParseError("%s must be a JSON array" % context) + return value + + +def _string(value: Any, context: str) -> str: + """Return a value as a string or raise a parse error. + + Args: + value: Value expected to be a string. + context: Human-readable location used in the error message. + + Returns: + The string value. + + Raises: + TopologyParseError: If value is not a string. + """ + + if not isinstance(value, str): + raise TopologyParseError("%s must be a string" % context) + return value + + +def _optional_string(value: Any, context: str) -> Optional[str]: + """Return an optional string or raise a parse error. + + Args: + value: None or a value expected to be a string. + context: Human-readable location used in the error message. + + Returns: + None or the string value. + + Raises: + TopologyParseError: If value is neither None nor a string. + """ + + if value is None: + return None + return _string(value, context) + + +def _optional_bool(value: Any, context: str) -> Optional[bool]: + """Return an optional boolean or raise a parse error. + + Args: + value: None or a value expected to be a boolean. + context: Human-readable location used in the error message. + + Returns: + None or the boolean value. + + Raises: + TopologyParseError: If value is neither None nor a boolean. + """ + + if value is None: + return None + if not isinstance(value, bool): + raise TopologyParseError("%s must be a boolean" % context) + return value + + +def _optional_int(value: Any, context: str) -> Optional[int]: + """Return an optional integer or raise a parse error. + + Args: + value: None or a value expected to be an integer. + context: Human-readable location used in the error message. + + Returns: + None or the integer value. + + Raises: + TopologyParseError: If value is neither None nor an integer. + """ + + if value is None: + return None + if isinstance(value, bool) or not isinstance(value, int): + raise TopologyParseError("%s must be an integer" % context) + return value + + +def _optional_float(value: Any, context: str) -> Optional[float]: + """Return an optional numeric value as float or raise a parse error. + + Args: + value: None or a value expected to be an integer or floating-point + number. + context: Human-readable location used in the error message. + + Returns: + None or the numeric value converted to float. + + Raises: + TopologyParseError: If value is neither None nor a numeric value. + """ + + if value is None: + return None + if isinstance(value, bool) or not isinstance(value, (int, float)): + raise TopologyParseError("%s must be a number" % context) + return float(value) + + +def _parse_interface(name: str, raw: Any, context: str) -> Interface: + """Parse one interface definition. + + Args: + name: Logical interface tag taken from the JSON object key. + raw: Raw JSON value containing interface properties. + context: Human-readable location used in error messages. + + Returns: + Parsed Interface object. + + Raises: + TopologyParseError: If the interface cannot be represented. + """ + + data = _mapping(raw, context) + _reject_unknown_fields( + data, + {"addressing", "address", "gateway", "mac", "mtu"}, + context, + ) + + raw_addressing = data.get("addressing", AddressingMode.NONE.value) + try: + addressing = AddressingMode(_string(raw_addressing, context + ".addressing")) + except ValueError as exc: + raise TopologyParseError( + "%s.addressing has unsupported value %r" % (context, raw_addressing) + ) from exc + + return Interface( + name=name, + addressing=addressing, + address=_optional_string(data.get("address"), context + ".address"), + gateway=_optional_string(data.get("gateway"), context + ".gateway"), + mac=_optional_string(data.get("mac"), context + ".mac"), + mtu=_optional_int(data.get("mtu"), context + ".mtu"), + ) + + +def _parse_interfaces(raw_node: JSONMapping, context: str) -> Optional[Dict[str, Interface]]: + """Parse the optional interface collection of a node. + + Args: + raw_node: Raw JSON node object. + context: Human-readable node location used in error messages. + + Returns: + None when the interfaces field is omitted, otherwise a dictionary of + logical interface tags to Interface objects. + + Raises: + TopologyParseError: If the interfaces field has an invalid shape. + """ + + if "interfaces" not in raw_node: + return None + + raw_interfaces = _mapping(raw_node["interfaces"], context + ".interfaces") + interfaces: Dict[str, Interface] = {} + + for name, raw_interface in raw_interfaces.items(): + interface_name = _string(name, context + ".interfaces key") + interfaces[interface_name] = _parse_interface( + interface_name, + raw_interface, + "%s.interfaces.%s" % (context, interface_name), + ) + + return interfaces + + +def _parse_node_settings(node_type: NodeType, raw: Any, context: str) -> NodeSettings: + """Parse type-specific node settings. + + Args: + node_type: Parsed semantic node type. + raw: Raw JSON settings object or None. + context: Human-readable node location used in error messages. + + Returns: + Type-specific node settings object. + + Raises: + TopologyParseError: If the settings object has an invalid shape or + contains values that cannot be represented by the selected type. + """ + + data = {} if raw is None else dict(_mapping(raw, context + ".settings")) + + allowed_fields = { + NodeType.HOST: set(), + NodeType.SWITCH: set(), + NodeType.ROUTER: {"ip_forward", "rp_filter"}, + }[node_type] + _reject_unknown_fields(data, allowed_fields, context + ".settings") + + if node_type is NodeType.ROUTER: + return RouterSettings( + ip_forward=_optional_bool( + data.get("ip_forward"), + context + ".settings.ip_forward", + ), + rp_filter=_optional_bool( + data.get("rp_filter"), + context + ".settings.rp_filter", + ), + ) + + if node_type is NodeType.SWITCH: + return SwitchSettings() + + return HostSettings() + + +def _parse_node(raw: Any, index: int) -> Node: + """Parse one node declaration. + + Args: + raw: Raw JSON node object. + index: Node index in the source array, used in diagnostics. + + Returns: + Parsed Node object. + + Raises: + TopologyParseError: If the node cannot be represented. + """ + + context = "nodes[%d]" % index + data = _mapping(raw, context) + _reject_unknown_fields( + data, + {"name", "type", "interfaces", "settings"}, + context, + ) + + name = _string(data.get("name"), context + ".name") + raw_type = _string(data.get("type"), context + ".type") + + try: + node_type = NodeType(raw_type) + except ValueError as exc: + raise TopologyParseError( + "%s.type has unsupported value %r" % (context, raw_type) + ) from exc + + return Node( + name=name, + type=node_type, + interfaces=_parse_interfaces(data, context), + settings=_parse_node_settings(node_type, data.get("settings"), context), + ) + + +def _parse_link_interface(value: Any, context: str) -> Union[str, LinkInterfaceSelector]: + """Parse a link endpoint interface reference. + + Args: + value: Raw interface reference. + context: Human-readable location used in error messages. + + Returns: + Explicit interface tag or LinkInterfaceSelector.AUTO. + + Raises: + TopologyParseError: If the reference is not a string. + """ + + text = _string(value, context) + if text == LinkInterfaceSelector.AUTO.value: + return LinkInterfaceSelector.AUTO + return text + + +def _parse_link_endpoint(raw: Any, context: str) -> LinkEndpoint: + """Parse one link endpoint. + + Args: + raw: Raw JSON endpoint object. + context: Human-readable location used in error messages. + + Returns: + Parsed LinkEndpoint object. + + Raises: + TopologyParseError: If the endpoint cannot be represented. + """ + + data = _mapping(raw, context) + _reject_unknown_fields(data, {"node", "interface"}, context) + + return LinkEndpoint( + node=_string(data.get("node"), context + ".node"), + interface=_parse_link_interface( + data.get("interface"), + context + ".interface", + ), + ) + + +def _parse_link_settings(raw: Any, context: str) -> LinkSettings: + """Parse optional link-specific provisioning settings. + + Args: + raw: Raw JSON settings object or None. + context: Human-readable link location used in error messages. + + Returns: + Parsed LinkSettings object. + + Raises: + TopologyParseError: If a known setting has an incompatible JSON type. + """ + + data = {} if raw is None else dict(_mapping(raw, context)) + _reject_unknown_fields( + data, + {"bandwidth_mbps", "delay_ms", "loss_percent", "jitter_ms"}, + context, + ) + + return LinkSettings( + bandwidth_mbps=_optional_float( + data.get("bandwidth_mbps"), + context + ".bandwidth_mbps", + ), + delay_ms=_optional_float( + data.get("delay_ms"), + context + ".delay_ms", + ), + loss_percent=_optional_float( + data.get("loss_percent"), + context + ".loss_percent", + ), + jitter_ms=_optional_float( + data.get("jitter_ms"), + context + ".jitter_ms", + ), + ) + + +def _parse_link(raw: Any, index: int) -> Link: + """Parse one link declaration. + + Args: + raw: Raw JSON link object. + index: Link index in the source array, used in diagnostics. + + Returns: + Parsed Link object. + + Raises: + TopologyParseError: If the link cannot be represented. + """ + + context = "links[%d]" % index + data = _mapping(raw, context) + _reject_unknown_fields( + data, + {"endpoints", "name", "settings"}, + context, + ) + + raw_endpoints = _list(data.get("endpoints"), context + ".endpoints") + + if len(raw_endpoints) != 2: + raise TopologyParseError( + "%s.endpoints must contain exactly two endpoints" % context + ) + + endpoints = ( + _parse_link_endpoint(raw_endpoints[0], context + ".endpoints[0]"), + _parse_link_endpoint(raw_endpoints[1], context + ".endpoints[1]"), + ) + + return Link( + endpoints=endpoints, + name=_optional_string(data.get("name"), context + ".name"), + settings=_parse_link_settings( + data.get("settings"), + context + ".settings", + ), + ) + + +def _parse_service_interface( + value: Any, + context: str, +) -> Union[str, ServiceInterfaceSelector]: + """Parse a service interface binding. + + Args: + value: Raw service interface reference. + context: Human-readable location used in error messages. + + Returns: + Explicit interface tag, AUTO, or ALL. + + Raises: + TopologyParseError: If the reference is not a string. + """ + + text = _string(value, context) + + for selector in ServiceInterfaceSelector: + if text == selector.value: + return selector + + return text + + +def _parse_dhcp_server_settings(raw: Any, context: str) -> DHCPServerSettings: + """Parse DHCP-server-specific settings. + + Args: + raw: Raw JSON DHCP server settings object. + context: Human-readable location used in error messages. + + Returns: + Parsed DHCPServerSettings object. + + Raises: + TopologyParseError: If required structural fields are missing or have + incompatible JSON types. + """ + + data = _mapping(raw, context) + _reject_unknown_fields(data, {"range", "gateway"}, context) + + raw_range = _mapping(data.get("range"), context + ".range") + _reject_unknown_fields(raw_range, {"start", "end"}, context + ".range") + + address_range = DHCPRange( + start=_string(raw_range.get("start"), context + ".range.start"), + end=_string(raw_range.get("end"), context + ".range.end"), + ) + + return DHCPServerSettings( + address_range=address_range, + gateway=_optional_string(data.get("gateway"), context + ".gateway"), + ) + + +def _parse_service(raw: Any, index: int) -> Service: + """Parse one service declaration. + + Args: + raw: Raw JSON service object. + index: Service index in the source array, used in diagnostics. + + Returns: + Parsed Service object. + + Raises: + TopologyParseError: If the service cannot be represented. + """ + + context = "services[%d]" % index + data = _mapping(raw, context) + _reject_unknown_fields( + data, + {"type", "node", "interface", "settings"}, + context, + ) + + raw_type = _string(data.get("type"), context + ".type") + try: + service_type = ServiceType(raw_type) + except ValueError as exc: + raise TopologyParseError( + "%s.type has unsupported value %r" % (context, raw_type) + ) from exc + + if service_type is ServiceType.DHCP_SERVER: + settings = _parse_dhcp_server_settings( + data.get("settings"), + context + ".settings", + ) + else: + raise TopologyParseError( + "%s.type has no parser implementation" % context + ) + + return Service( + type=service_type, + node=_string(data.get("node"), context + ".node"), + interface=_parse_service_interface( + data.get("interface"), + context + ".interface", + ), + settings=settings, + ) + + +def parse_topology(raw: Mapping[str, Any]) -> Topology: + """Parse a raw JSON dictionary into the typed topology model. + + Args: + raw: Mapping produced by the loading stage. + + Returns: + Topology object containing ordered nodes, links, and services. + + Raises: + TopologyParseError: If the raw structure cannot be represented by the + topology grammar. + + Notes: + This function intentionally does not validate cross references such as + whether a link references an existing node. Those checks belong to + the separate validation stage. + """ + + data = _mapping(raw, "topology") + _reject_unknown_fields(data, {"nodes", "links", "services"}, "topology") + + raw_nodes = _list(data.get("nodes", []), "nodes") + raw_links = _list(data.get("links", []), "links") + raw_services = _list(data.get("services", []), "services") + + nodes = [ + _parse_node(raw_node, index) + for index, raw_node in enumerate(raw_nodes) + ] + + links = [ + _parse_link(raw_link, index) + for index, raw_link in enumerate(raw_links) + ] + + services = [ + _parse_service(raw_service, index) + for index, raw_service in enumerate(raw_services) + ] + + return Topology(nodes=nodes, links=links, services=services) + + +def _self_test() -> None: + """Run a small smoke test against the public parse_topology() interface.""" + + raw = { + "nodes": [ + { + "name": "h1", + "type": "host", + "interfaces": { + "net0": { + "addressing": "dhcp", + } + }, + }, + { + "name": "s1", + "type": "switch", + }, + ], + "links": [ + { + "endpoints": [ + {"node": "h1", "interface": "net0"}, + {"node": "s1", "interface": "auto"}, + ], + "settings": { + "bandwidth_mbps": 100, + "delay_ms": 1.5, + }, + } + ], + "services": [], + } + + topology = parse_topology(raw) + + h1 = topology.nodes[0] + s1 = topology.nodes[1] + + assert h1.type is NodeType.HOST + assert h1.interfaces is not None + assert h1.interfaces["net0"].addressing is AddressingMode.DHCP + assert s1.interfaces is None + assert topology.links[0].endpoints[1].interface is LinkInterfaceSelector.AUTO + assert topology.links[0].settings.bandwidth_mbps == 100.0 + assert topology.links[0].settings.delay_ms == 1.5 + + invalid = { + "nodes": [ + { + "name": "r0", + "type": "router", + "settings": { + "ip_foward": True, + }, + } + ] + } + + try: + parse_topology(invalid) + except TopologyParseError as exc: + assert "ip_foward" in str(exc) + else: + raise AssertionError("unknown fields must raise TopologyParseError") + + +if __name__ == "__main__": + _self_test() + print("topology_parser: self-test passed")