From: Martin Skorupski Date: Fri, 5 Apr 2024 13:42:23 +0000 (+0200) Subject: Add to_directory method to relevant object classes X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=oam.git;a=commitdiff_plain;h=refs%2Fheads%2Fmaster Add to_directory method to relevant object classes - method added to create folder structure for topology nodes Issue-ID: OAM-408 Change-Id: I55900404eac916a37d9c761b4eda478528d77017 Signed-off-by: Martin Skorupski --- diff --git a/code/network-generator/network_generation/cli.py b/code/network-generator/network_generation/cli.py index fa8a8f3..e156fcd 100644 --- a/code/network-generator/network_generation/cli.py +++ b/code/network-generator/network_generation/cli.py @@ -59,6 +59,13 @@ def main() -> None: # pragma: no cover configuration["generationTasks"]["topology"]["compressed"] ) + # dir structure for day0 configuration + # Note: compressed option ignored + if configuration["generationTasks"]["network_dir"]["enabled"] is True: + viewer.to_directory( + output_folder + ) + # svg xml if configuration["generationTasks"]["svg"]["enabled"] is True: viewer.svg( diff --git a/code/network-generator/network_generation/model/python/nr_cell_du.py b/code/network-generator/network_generation/model/python/nr_cell_du.py index acdafe1..13fc42b 100644 --- a/code/network-generator/network_generation/model/python/nr_cell_du.py +++ b/code/network-generator/network_generation/model/python/nr_cell_du.py @@ -240,3 +240,6 @@ class NrCellDu(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + pass diff --git a/code/network-generator/network_generation/model/python/o_ran_cloud_du.py b/code/network-generator/network_generation/model/python/o_ran_cloud_du.py index b97f97e..d3a4d10 100644 --- a/code/network-generator/network_generation/model/python/o_ran_cloud_du.py +++ b/code/network-generator/network_generation/model/python/o_ran_cloud_du.py @@ -136,3 +136,7 @@ class ORanCloudDu(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + for tower in self.towers: + tower.to_directory(parent_dir) diff --git a/code/network-generator/network_generation/model/python/o_ran_cu.py b/code/network-generator/network_generation/model/python/o_ran_cu.py index be0006d..2df40f6 100644 --- a/code/network-generator/network_generation/model/python/o_ran_cu.py +++ b/code/network-generator/network_generation/model/python/o_ran_cu.py @@ -143,3 +143,7 @@ class ORanCu(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + for o_ran_cloud_du in self.o_ran_cloud_dus: + o_ran_cloud_du.to_directory(parent_dir) diff --git a/code/network-generator/network_generation/model/python/o_ran_du.py b/code/network-generator/network_generation/model/python/o_ran_du.py index 0392d2c..98e8c1a 100644 --- a/code/network-generator/network_generation/model/python/o_ran_du.py +++ b/code/network-generator/network_generation/model/python/o_ran_du.py @@ -18,6 +18,7 @@ A Class representing an O-RAN distributed unit (ORanDu) """ import xml.etree.ElementTree as ET +import os from typing import Any, cast from network_generation.model.python.o_ran_node import IORanNode, ORanNode @@ -54,6 +55,7 @@ class ORanDu(ORanNode): if o_ran_du_data and "oRanRuCount" in o_ran_du_data else 1 ) + self.type = "ntsim-ng-o-du" def _to_o_ran_du_data(self, data: dict[str, Any]) -> IORanDu: result: IORanDu = default_value @@ -114,3 +116,11 @@ class ORanDu(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + parent_path = os.path.join(parent_dir, self.type) + path = os.path.join(parent_path, self.name) + if not os.path.exists(parent_path): + os.makedirs(parent_path, exist_ok=True) + if not os.path.exists(path): + os.mkdir(path) diff --git a/code/network-generator/network_generation/model/python/o_ran_near_rt_ric.py b/code/network-generator/network_generation/model/python/o_ran_near_rt_ric.py index 5a44843..17208f8 100644 --- a/code/network-generator/network_generation/model/python/o_ran_near_rt_ric.py +++ b/code/network-generator/network_generation/model/python/o_ran_near_rt_ric.py @@ -145,3 +145,7 @@ class ORanNearRtRic(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + for o_ran_cu in self.o_ran_cus: + o_ran_cu.to_directory(parent_dir) diff --git a/code/network-generator/network_generation/model/python/o_ran_network.py b/code/network-generator/network_generation/model/python/o_ran_network.py index 962e5b1..901e83f 100644 --- a/code/network-generator/network_generation/model/python/o_ran_network.py +++ b/code/network-generator/network_generation/model/python/o_ran_network.py @@ -17,6 +17,7 @@ Module for a class representing a O-RAN Network """ import xml.etree.ElementTree as ET +import os from typing import Any, cast import network_generation.model.python.hexagon as Hexagon @@ -148,6 +149,9 @@ class ORanNetwork(ORanObject): } } + def to_directory(self, parent_dir: str) -> None: + self._o_ran_smo.to_directory(os.path.join(parent_dir, self.id)) + def toKml(self) -> ET.Element: root: ET.Element = ET.Element( "kml", xmlns="http://www.opengis.net/kml/2.2" diff --git a/code/network-generator/network_generation/model/python/o_ran_node.py b/code/network-generator/network_generation/model/python/o_ran_node.py index 6a2b3cb..8dba3bc 100644 --- a/code/network-generator/network_generation/model/python/o_ran_node.py +++ b/code/network-generator/network_generation/model/python/o_ran_node.py @@ -216,3 +216,7 @@ class ORanNode(ORanObject): @abstractmethod def toSvg(self) -> ET.Element: pass + + @abstractmethod + def to_directory(self, parent_dir: str) -> None: + pass diff --git a/code/network-generator/network_generation/model/python/o_ran_ru.py b/code/network-generator/network_generation/model/python/o_ran_ru.py index 265e6f4..c88dfec 100644 --- a/code/network-generator/network_generation/model/python/o_ran_ru.py +++ b/code/network-generator/network_generation/model/python/o_ran_ru.py @@ -18,6 +18,7 @@ A Class representing an O-RAN radio unit (ORanRu) """ import xml.etree.ElementTree as ET +import os from typing import Any, cast from network_generation.model.python.nr_cell_du import NrCellDu @@ -70,6 +71,7 @@ class ORanRu(ORanNode): ) self._cells: list[NrCellDu] = self._create_cells() name: str = self.name.replace("RU", "DU") + self.type = "ntsim-ng-o-ru" o_ran_du_data: dict[str, Any] = { "name": name, @@ -185,3 +187,12 @@ class ORanRu(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + self.oRanDu.to_directory(parent_dir) + parent_path = os.path.join(parent_dir, self.type) + path = os.path.join(parent_path, self.name) + if not os.path.exists(parent_path): + os.makedirs(parent_path, exist_ok=True) + if not os.path.exists(path): + os.mkdir(path) diff --git a/code/network-generator/network_generation/model/python/o_ran_smo.py b/code/network-generator/network_generation/model/python/o_ran_smo.py index 9308291..d9a7e9a 100644 --- a/code/network-generator/network_generation/model/python/o_ran_smo.py +++ b/code/network-generator/network_generation/model/python/o_ran_smo.py @@ -153,3 +153,7 @@ class ORanSmo(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("not-implemented-yet-TODO") + + def to_directory(self, parent_dir: str) -> None: + for ric in self.o_ran_near_rt_rics: + ric.to_directory(parent_dir) diff --git a/code/network-generator/network_generation/model/python/tower.py b/code/network-generator/network_generation/model/python/tower.py index dd1eb70..2aae0b3 100644 --- a/code/network-generator/network_generation/model/python/tower.py +++ b/code/network-generator/network_generation/model/python/tower.py @@ -154,3 +154,7 @@ class Tower(ORanNode): def toSvg(self) -> ET.Element: return ET.Element("to-be-implemented") + + def to_directory(self, parent_dir: str) -> None: + for o_ran_ru in self.o_ran_rus: + o_ran_ru.to_directory(parent_dir) diff --git a/code/network-generator/network_generation/view/network_viewer.py b/code/network-generator/network_generation/view/network_viewer.py index b55b476..750a661 100644 --- a/code/network-generator/network_generation/view/network_viewer.py +++ b/code/network-generator/network_generation/view/network_viewer.py @@ -58,6 +58,13 @@ class NetworkViewer: """ print(self.__network) + def to_directory(self, parent_dir: str) -> None: + """ + Method converting the network to a subdirectory file structure + """ + self.__network.to_directory(parent_dir) + print(f'Directory structure saved to "{parent_dir}"') + def save(self, filename: str, compressed: bool = True) -> None: """ Method saving the class content to a file in json format.