Skip to content

Commit

Permalink
mps-cli-py: small fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
ratiud committed Dec 3, 2023
1 parent 12603fe commit 043da16
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 16 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@
**/dist/

gradle.properties
**/workspace.xml
**/misc.xml
6 changes: 6 additions & 0 deletions mps-cli-py/src/mpscli/demo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@

from model.builder.SSolutionsRepositoryBuilder import SSolutionsRepositoryBuilder

builder = SSolutionsRepositoryBuilder()
#repo = builder.build('..\\..\\mps_test_projects\\mps_cli_lanuse_file_per_root')
repo = builder.build('..\\..\\..\\..\\E3_2.0_Solution\\solutions')
15 changes: 10 additions & 5 deletions mps-cli-py/src/mpscli/model/builder/SModelBuilderBase.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def __init__(self):
self.index_2_reference_role = {}
self.index_2_imported_model_uuid = {}

def extract_node(self, node_xml):
def extract_node(self, my_model, node_xml):
root_node_id = node_xml.get("id")
root_node_concept = self.index_2_concept[node_xml.get("concept")]
child_role_index = node_xml.get("role")
Expand All @@ -30,12 +30,17 @@ def extract_node(self, node_xml):
for ref_xml_node in node_xml.findall("ref"):
ref_role = ref_xml_node.get("role")
ref_to = ref_xml_node.get("to")
if ref_to is None:
ref_node_uuid = ref_xml_node.get("node")
s_node_ref = SNodeRef(my_model.uuid, ref_node_uuid)
else:
ref_model_index = ref_to[0 : ref_to.find(":")]
ref_node_uuid = ref_to[ref_to.find(":") + 1 : len(ref_to)]
s_node_ref = SNodeRef(self.index_2_imported_model_uuid[ref_model_index], ref_node_uuid)
ref_name = self.index_2_reference_role[ref_role]
ref_model_index = ref_to[0 : ref_to.find(":")]
ref_node_uuid = ref_to[ref_to.find(":") + 1 : len(ref_to)]
s_node.references[ref_name] = SNodeRef(self.index_2_imported_model_uuid[ref_model_index], ref_node_uuid)
s_node.references[ref_name] = s_node_ref
for child_node_xml in node_xml.findall("node"):
child_node = self.extract_node(child_node_xml)
child_node = self.extract_node(my_model, child_node_xml)
s_node.children.append(child_node)

return s_node
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ def build(self, path):
self.extract_imports_and_registry(model_xml_node)

for node_xml_node in model_xml_node.findall("node"):
root_node = self.extract_node(node_xml_node)
root_node = self.extract_node(model, node_xml_node)
model.root_nodes.append(root_node)

return model
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,17 @@ def build(self, path):

for file in path.iterdir():
if file.suffix == '.mpsr':
root_node = self.extract_root_node(file)
root_node = self.extract_root_node(model, file)
model.root_nodes.append(root_node)

return model

def extract_root_node(self, mpsr_file):
def extract_root_node(self, model, mpsr_file):
tree = ET.parse(mpsr_file)
model_xml_node = tree.getroot()
self.extract_imports_and_registry(model_xml_node)
root_node = model_xml_node.find("node")
return self.extract_node(root_node)
return self.extract_node(model, root_node)



5 changes: 4 additions & 1 deletion mps-cli-py/src/mpscli/model/builder/SSolutionBuilder.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@

import os
import xml.etree.ElementTree as ET
from mpscli.model.SSolution import SSolution
from mpscli.model.builder.SModelBuilderDefaultPersistency import SModelBuilderDefaultPersistency
Expand All @@ -13,6 +13,9 @@ def build_solution(self, path_to_msd_file):
solution.path_to_solution_file = path_to_msd_file
print("building from:", path_to_solution_dir)
path_to_models_dir = path_to_solution_dir / 'models'
if not os.path.exists(path_to_models_dir):
print("ERROR: 'models' directory not found! No model is loaded from path: " + str(path_to_solution_dir))
return None

for path_to_model in path_to_models_dir.iterdir():
if path_to_model.is_dir():
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import datetime
from timeit import default_timer as timer
import os
import sys
import zipfile
Expand All @@ -23,20 +23,21 @@ def build(self, path):
sys.exit(1)

print("building model from path:", path)
start = datetime.datetime.now()
start = timer()
self.collect_solutions_from_sources(path)
self.collect_solutions_from_jars(path)
self.repo.languages = list(SLanguageBuilder.languages.values())
stop = datetime.datetime.now()
duration = (stop - start).microseconds / 1000
print('duration is: ' + str(duration))
stop = timer()
duration = (stop - start)
print('duration is: ' + str(duration) + ' seconds')
return self.repo

def collect_solutions_from_sources(self, path):
for pth in Path(path).rglob('*.msd'):
solutionBuilder = SSolutionBuilder()
solution = solutionBuilder.build_solution(pth)
self.repo.solutions.append(solution)
if solution is not None:
self.repo.solutions.append(solution)

def collect_solutions_from_jars(self, path):
for jar_path in Path(path).rglob('*.jar'):
Expand Down

0 comments on commit 043da16

Please sign in to comment.