X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=code%2Fnetwork-generator%2Fmodel%2Fpython%2Fo_ran_network.py;h=42ff19b2791413dde85734b47ca4c6135db5b658;hb=refs%2Fchanges%2F55%2F11955%2F1;hp=0439a675781c6ba1b805416753b952619534ba1e;hpb=9ea4e241e3ec0c9dffd3db7fd7ab5a2cf3d13e7d;p=oam.git diff --git a/code/network-generator/model/python/o_ran_network.py b/code/network-generator/model/python/o_ran_network.py index 0439a67..42ff19b 100644 --- a/code/network-generator/model/python/o_ran_network.py +++ b/code/network-generator/model/python/o_ran_network.py @@ -16,9 +16,14 @@ """ Module for a class representing a O-RAN Network """ -from typing import Any, Dict, List -from model.python.tower import Tower +from typing import Any + +from model.python.o_ran_smo import ORanSmo +from model.python.o_ran_spiral_radius_profile import SpiralRadiusProfile from model.python.o_ran_object import IORanObject, ORanObject +import model.python.hexagon as Hexagon +from model.python.hexagon import Layout +from model.python.point import Point import xml.etree.ElementTree as ET @@ -28,29 +33,56 @@ class ORanNetwork(ORanObject): """ # constructor - def __init__(self, configuration: Dict[str, Any], of: IORanObject = None, **kwargs): + def __init__(self, configuration: dict[str, Any], of: IORanObject = None, **kwargs): super().__init__(of, **kwargs) self.__configuration = configuration - self.__towers: List[Tower] = [] - - center = configuration["center"] - self.__towers.append(Tower(center)) + self.name = configuration["name"] + self.center = configuration["center"] + size = configuration["pattern"]["o-ran-ru"]["max-reach"] + layout = Layout( + Hexagon.layout_flat, Point(size, size), Point(0, 0) + ) # 1 pixel = 1 meter + spiral_radius_profile = SpiralRadiusProfile( + { + "oRanSmoSpiralRadiusOfNearRtRics": configuration["pattern"]["smo"][ + "near-rt-ric-spiral-radius" + ], + "oRanNearRtRicSpiralRadiusOfOCus": configuration["pattern"][ + "near-rt-ric" + ]["o-ran-cu-spiral-radius"], + "oRanCuSpiralRadiusOfODus": configuration["pattern"]["o-ran-cu"][ + "o-ran-du-spiral-radius" + ], + "oRanDuSpiralRadiusOfTowers": configuration["pattern"]["o-ran-du"][ + "tower-spiral-radius" + ], + } + ) + self._o_ran_smo = ORanSmo( + { + "name": "SMO", + "geoLocation": self.center, + "layout": layout, + "spiralRadiusProfile": spiral_radius_profile, + "parent": self, + } + ) # getter - def configuration(self) -> Dict[str, Dict]: + def configuration(self) -> dict[str, dict]: """ Getter for a json object representing the O-RAN Network. :return O-RAN Network as json object. """ return self.__configuration - def __appendNodes(self): - result: List[Dict[str, Any]] = [] - for tower in self.__towers: + def __appendNodes(self) -> list[dict[str, Any]]: + result: list[dict[str, Any]] = [] + for tower in self._o_ran_smo.towers: result.append(tower.toTopology()) return result - def toTopology(self): + def toTopology(self) -> dict[str, Any]: return { "ietf-network:networks": { "network": [ @@ -63,19 +95,29 @@ class ORanNetwork(ORanObject): } } - def toKml(self): - root: Element = ET.Element("kml", xmlns="http://www.opengis.net/kml/2.2") + def toKml(self) -> ET.Element: + root: ET.Element = ET.Element("kml", xmlns="http://www.opengis.net/kml/2.2") document = ET.SubElement(root, "Document") open = ET.SubElement(document, "open") open.text = "1" + name = ET.SubElement(document, "name") + name.text = self.name + folder = ET.SubElement(document, "Folder") + open = ET.SubElement(folder, "open") + open.text = "1" + name = ET.SubElement(folder, "name") + name.text = "Towers" + for tower in self._o_ran_smo.towers: + folder.append(tower.toKml()) + return root - def toSvg(self): + def toSvg(self) -> ET.Element: """ Getter for a xml/svg Element object representing the Network. :return Network as SVG object. """ - root: Element = ET.Element( + root: ET.Element = ET.Element( "svg", # width=str(self.__svg_width()), # height=str(self.__svg_height()),