From 98aa2133aea1f2e86aca81b67468758b6d00ebc5 Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 16 Nov 2018 13:24:52 +0100 Subject: [PATCH 1/2] [tools/versionConv] Change same named obj indexing Closes #289 Previously all same named odml.Sections within a document got indexed upon conversion. With these changes, only same named odml.Sections that reside on the same level are indexed. --- odml/tools/version_converter.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/odml/tools/version_converter.py b/odml/tools/version_converter.py index 99fdda93..273dbe16 100644 --- a/odml/tools/version_converter.py +++ b/odml/tools/version_converter.py @@ -370,7 +370,8 @@ def _handle_value(self, value, log_id): @classmethod def _replace_same_name_entities(cls, tree): """ - Changes same section names in the doc by adding <-{index}> to the next section occurrences. + Changes same section names in the doc by adding <-{index}> + to the next section occurrences. :param tree: ElementTree of the doc :return: ElementTree """ @@ -378,26 +379,29 @@ def _replace_same_name_entities(cls, tree): prop_map = {} root = tree.getroot() for sec in root.iter("section"): - n = sec.find("name") - if n is not None: - cls._change_entity_name(sec_map, n) + + sec_name = sec.find("name") + if sec_name is not None: + cls._change_entity_name(tree, sec_map, sec_name) else: raise Exception("Section attribute name is not specified") + for prop in sec.iter("property"): if prop.getparent() == sec: - n = prop.find("name") - if n is not None: - cls._change_entity_name(prop_map, n) + prop_name = prop.find("name") + if prop_name is not None: + cls._change_entity_name(tree, prop_map, prop_name) prop_map.clear() return tree @staticmethod - def _change_entity_name(elem_map, name): - if name.text not in elem_map: - elem_map[name.text] = 1 + def _change_entity_name(tree, elem_map, name): + named_path = "%s:%s" % (tree.getpath(name.getparent().getparent()), name.text) + if named_path not in elem_map: + elem_map[named_path] = 1 else: - elem_map[name.text] += 1 - name.text += "-" + str(elem_map[name.text]) + elem_map[named_path] += 1 + name.text += "-" + str(elem_map[named_path]) def _log(self, msg): """ From 76e908a124f8d1bb167c83ff6c4b4cdaec9b43fc Mon Sep 17 00:00:00 2001 From: "M. Sonntag" Date: Fri, 16 Nov 2018 13:30:21 +0100 Subject: [PATCH 2/2] [tools/versionConv] Add method description --- odml/tools/version_converter.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/odml/tools/version_converter.py b/odml/tools/version_converter.py index 273dbe16..3d842e89 100644 --- a/odml/tools/version_converter.py +++ b/odml/tools/version_converter.py @@ -396,6 +396,13 @@ def _replace_same_name_entities(cls, tree): @staticmethod def _change_entity_name(tree, elem_map, name): + """ + Adds numbering to identical element names where their odml.Section + or odml.Property parents reside on the same level in the tree. + :param tree: The element tree containing the 'name' element. + :param elem_map: lxml path to occurrence maps of named Sections or Properties. + :param name: lxml element containing the name text of a Section or Property. + """ named_path = "%s:%s" % (tree.getpath(name.getparent().getparent()), name.text) if named_path not in elem_map: elem_map[named_path] = 1