Add to_directory method to relevant object classes
[oam.git] / code / network-generator / network_generation / cli.py
index ada37e1..e156fcd 100644 (file)
 
 # inspired by https://github.com/rochacbruno/python-project-template
 
-"""CLI interface for network_generation project.
-
-Be creative! do whatever you want!
-
-- Install click or typer and create a CLI app
-- Use builtin argparse
-- Start a web application
-- Import things from your .base module
-"""
-
-
-"""
-Module as entry point to generate an ietf topology json
-"""
 import os
 import sys
 
 from network_generation.base import NetworkGenerator
+from network_generation.model.python.o_ran_network import ORanNetwork
 from network_generation.parameter_validator import ParameterValidator
 from network_generation.view.network_viewer import NetworkViewer
 
+"""
+CLI interface for network_generation project.
+Module as entry point to generate an ietf topology json
+"""
 
-def main():  # pragma: no cover
+
+def main() -> None:  # pragma: no cover
     """
     The main function executes on commands:
     `python -m network_generation`.
@@ -45,32 +37,48 @@ def main():  # pragma: no cover
     validator: ParameterValidator = ParameterValidator(sys.argv)
 
     if validator.is_valid():
-        configuration = validator.configuration()
-        generator = NetworkGenerator(configuration["network"])
-        network = generator.generate()
-        viewer = NetworkViewer(network)
-
-        output_folder: str = configuration["output-folder"]
+        configuration: dict = validator.configuration()
+        generator: NetworkGenerator = NetworkGenerator(
+            configuration["network"]
+        )
+        network: ORanNetwork = generator.generate()
+        viewer: NetworkViewer = NetworkViewer(network)
+
+        output_folder: str = configuration["outputFolder"]
         # If folder doesn't exist, then create it.
         if not os.path.isdir(output_folder):
             os.makedirs(output_folder)
 
-        name: str = configuration["network"]["name"]
+        name: str = str(configuration["network"]["name"]).lower()
+        filename: str = "/".join([output_folder, name])
 
         # topology json
-        if configuration["generation-tasks"]["topology"] is True:
-            filename: str = output_folder + "/" + name + "-operational.json"
-            viewer.json().save(filename)
+        if configuration["generationTasks"]["topology"]["enabled"] is True:
+            viewer.json().save(
+                filename,
+                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["generation-tasks"]["svg"] is True:
-            filename: str = output_folder + "/" + name + ".svg"
-            viewer.svg(filename)
-
-        # kml xml
-        if configuration["generation-tasks"]["kml"] is True:
-            filename: str = output_folder + "/" + name + ".kml"
-            viewer.kml(filename)
+        if configuration["generationTasks"]["svg"]["enabled"] is True:
+            viewer.svg(
+                filename,
+                configuration["generationTasks"]["svg"]["compressed"]
+            )
+
+        # kml/kmz xml
+        if configuration["generationTasks"]["kml"]["enabled"] is True:
+            viewer.kml(
+                filename,
+                configuration["generationTasks"]["kml"]["compressed"]
+            )
 
     else:
         print(validator.error_message())