From 4b741eb7645ca81a176bf878f039dc9199e87268 Mon Sep 17 00:00:00 2001
From: imcovangent <I.vanGent@tudelft.nl>
Date: Tue, 3 Apr 2018 10:40:29 +0200
Subject: [PATCH] Fixed inconsistency in use of single and double quotes in
 load() function using a mix of CMDOWS and XML (CPACS) I/O files. Fixed
 addition of T instead of space in timestamp. Added check on workflow element
 in CMDOWS while loading to make sure the parameters exists (to avoid
 unexpected errors downstream).

Former-commit-id: dc7b4f6a06003bd0f603fba427f423e3d262737f
---
 kadmos/cmdows/cmdows.py        |  2 +-
 kadmos/graph/graph_kadmos.py   | 13 ++++++++-----
 kadmos/graph/mixin_equation.py |  4 ++--
 3 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/kadmos/cmdows/cmdows.py b/kadmos/cmdows/cmdows.py
index e103ebbf9..d1ef5e03c 100644
--- a/kadmos/cmdows/cmdows.py
+++ b/kadmos/cmdows/cmdows.py
@@ -301,7 +301,7 @@ class CMDOWS(object):
         # Add elements
         el.add("creator", creator)
         el.add("description", description)
-        el.add("timestamp", str(datetime.now()) if timestamp is None else timestamp)
+        el.add("timestamp", str(datetime.now()).replace(' ', 'T') if timestamp is None else timestamp)
         el.add("fileVersion", fileVersion)
         el.add("cmdowsVersion", cmdowsVersion)
         return
diff --git a/kadmos/graph/graph_kadmos.py b/kadmos/graph/graph_kadmos.py
index 62eef74d9..8c76ddced 100644
--- a/kadmos/graph/graph_kadmos.py
+++ b/kadmos/graph/graph_kadmos.py
@@ -1166,7 +1166,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin):
                           projectSpecific=function.finddict('projectSpecific'))
 
             for inp in function.findall('inputs/input'):
-                self.add_edge(inp.findtext('parameterUID'), function.get('uID'),
+                self.add_edge(inp.findtext('parameterUID').replace("'", '"'), function.get('uID'),
                               valid_ranges=inp.finddict('validRanges', ordered=False, camel_case_conversion=True))
 
             if not function.findall('inputs/input'):
@@ -1181,7 +1181,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin):
                 # #  #
 
             for output in function.findall('outputs/output'):
-                self.add_edge(function.get('uID'), output.findtext('parameterUID'))
+                self.add_edge(function.get('uID'), output.findtext('parameterUID').replace("'", '"'))
 
             if not function.findall('outputs/output'):
                 # Determine assumed output file location (same folder as CMDOWS file)
@@ -1193,6 +1193,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin):
                 else:
                     logger.warning('Could not find outputs for function: ' + function.get('uID'))
 
+        # Add inputs and outputs based on XML
         io_list = inputs_list+outputs_list
 
         _perform_check_list(io_list, check_list, keep_running=keep_running)
@@ -1223,7 +1224,7 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin):
     def _load_cmdows_parameters(self, cmdows):
 
         for variable in cmdows.findall('parameters/parameter'):
-            self.add_node(variable.get('uID'),
+            self.add_node(variable.get('uID').replace("'", '"'),
                           category='variable',
                           shape='o',
                           label=variable.findtext('label'),
@@ -1242,8 +1243,10 @@ class KadmosGraph(nx.DiGraph, EquationMixin, VistomsMixin):
             cmdows_edges = cmdows_data_graph.find('edges')
             if cmdows_edges is not None:
                 for edge in list(cmdows_edges):
-                    from_id = edge.findtext('fromExecutableBlockUID', default=edge.findtext('fromParameterUID'))
-                    to_id = edge.findtext('toExecutableBlockUID', default=edge.findtext('toParameterUID'))
+                    from_id = edge.findtext('fromExecutableBlockUID', default=edge.findtext('fromParameterUID')).replace("'", '"')
+                    to_id = edge.findtext('toExecutableBlockUID', default=edge.findtext('toParameterUID')).replace("'", '"')
+                    self.assert_node_exists(from_id)
+                    self.assert_node_exists(to_id)
                     self.add_edge(from_id, to_id)
         else:
             logger.warning('No dataGraph element found in the CMDOWS file. Ignoring missing information.')
diff --git a/kadmos/graph/mixin_equation.py b/kadmos/graph/mixin_equation.py
index b3c20ffc8..ff9f4d61f 100644
--- a/kadmos/graph/mixin_equation.py
+++ b/kadmos/graph/mixin_equation.py
@@ -269,7 +269,7 @@ class EquationMixin(object):
                           label=function.findtext('label'),
                           function_type=function.findtext('functionType'))
             for inp in function.findall('inputs/input'):
-                self.add_edge(inp.findtext('parameterUID'), function.get('uID'),
+                self.add_edge(inp.findtext('parameterUID').replace("'", '"'), function.get('uID'),
                               equation_label=inp.findtext('equationLabel'),
                               valid_ranges=inp.finddict('validRanges', ordered=False, camel_case_conversion=True))
             for outp in function.findall('outputs/output'):
@@ -277,5 +277,5 @@ class EquationMixin(object):
                     equations = cmdows.xpath('.//*[@uID="' + outp.find('equationsUID').text + '"]')[0]
                 else:
                     equations = outp.findall('equations/equation')
-                self.add_edge(function.get('uID'), outp.findtext('parameterUID'),
+                self.add_edge(function.get('uID'), outp.findtext('parameterUID').replace("'", '"'),
                               equations={eq.get('language'): eq.text for eq in equations})
-- 
GitLab