diff -r fda6c1a37662 -r f62625418bff xmlclass/xmlclass.py --- a/xmlclass/xmlclass.py Mon Mar 27 10:19:14 2023 +0200 +++ b/xmlclass/xmlclass.py Fri Oct 28 12:39:15 2022 +0800 @@ -23,8 +23,8 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -from __future__ import absolute_import -from __future__ import print_function + + import os import re import datetime @@ -107,7 +107,7 @@ [ SYNTAXELEMENT, SYNTAXATTRIBUTE, SIMPLETYPE, COMPLEXTYPE, COMPILEDCOMPLEXTYPE, ATTRIBUTESGROUP, ELEMENTSGROUP, ATTRIBUTE, ELEMENT, CHOICE, ANY, TAG, CONSTRAINT, -] = range(13) +] = list(range(13)) def NotSupportedYet(type): @@ -128,7 +128,7 @@ """ first = indent * 2 second = first + len(balise) + 1 - return u'\t'.expandtabs(first), u'\t'.expandtabs(second) + return '\t'.expandtabs(first), '\t'.expandtabs(second) def GetAttributeValue(attr, extract=True): @@ -144,9 +144,9 @@ return text(unescape(attr.childNodes[0].data)) else: # content is a CDATA - txt = u'' + txt = '' for node in attr.childNodes: - if not (node.nodeName == "#text" and node.data.strip() == u''): + if not (node.nodeName == "#text" and node.data.strip() == ''): txt += text(unescape(node.data)) return text @@ -634,7 +634,7 @@ if infos["type"] != ANY: DefaultElementClass.__setattr__(value, "tag", element_name) return value - return [initial_value() for dummy in xrange(infos["minOccurs"])] + return [initial_value() for dummy in range(infos["minOccurs"])] else: return [] @@ -691,13 +691,13 @@ choices_dict[choice_name] = infos prefix = ("%s:" % factory.TargetNamespace if factory.TargetNamespace is not None else "") - choices_xpath = "|".join(map(lambda x: prefix + x, choices_dict.keys())) + choices_xpath = "|".join([prefix + x for x in list(choices_dict.keys())]) def GetContentInitial(): content_name, infos = choices[0] if content_name == "sequence": content_value = [] - for dummy in xrange(infos["minOccurs"]): + for dummy in range(infos["minOccurs"]): for element_infos in infos["elements"]: content_value.extend(GetElementInitialValue(factory, element_infos)) else: @@ -801,7 +801,7 @@ if namespace is None: if name in self.Namespaces[self.SchemaNamespace]: return self.Namespaces[self.SchemaNamespace][name] - for space, elements in self.Namespaces.iteritems(): + for space, elements in self.Namespaces.items(): if space != self.SchemaNamespace and name in elements: return elements[name] parts = name.split("_", 1) @@ -843,7 +843,7 @@ if namespace is None: if name in self.Namespaces[self.SchemaNamespace]: return name, None - for space, elements in self.Namespaces.items(): + for space, elements in list(self.Namespaces.items()): if space != self.SchemaNamespace and name in elements: return name, None parts = name.split("_", 1) @@ -883,7 +883,7 @@ def ExtractNodeAttrs(self, element_name, node, valid_attrs): attrs = {} - for qualified_name, attr in node._attrs.items(): + for qualified_name, attr in list(node._attrs.items()): namespace, name = DecomposeQualifiedName(qualified_name) if name in valid_attrs: infos = self.GetQualifiedNameInfos(name, namespace) @@ -1016,14 +1016,14 @@ def GetEquivalentParents(self, parent): return reduce(lambda x, y: x + y, [[p] + self.GetEquivalentParents(p) - for p in self.EquivalentClassesParent.get(parent, {}).keys()], []) + for p in list(self.EquivalentClassesParent.get(parent, {}).keys())], []) def CreateClasses(self): """ Method that generates the classes """ self.ParseSchema() - for name, infos in self.Namespaces[self.TargetNamespace].items(): + for name, infos in list(self.Namespaces[self.TargetNamespace].items()): if infos["type"] == ELEMENT: if not isinstance(infos["elmt_type"], string_types) and \ infos["elmt_type"]["type"] == COMPLEXTYPE: @@ -1055,9 +1055,9 @@ not isinstance(result, string_types): self.Namespaces[self.TargetNamespace][result["name"]] = result - for name, parents in self.ComputedClassesLookUp.iteritems(): + for name, parents in self.ComputedClassesLookUp.items(): if isinstance(parents, dict): - computed_classes = parents.items() + computed_classes = list(parents.items()) elif parents[1] is not None: computed_classes = [(self.etreeNamespaceFormat % parents[1], parents[0])] else: @@ -1101,7 +1101,7 @@ if self.FileName is not None: classinfos["base"] = self.ComputedClasses[self.FileName].get(result["name"], None) if classinfos["base"] is None: - for filename, classes in self.ComputedClasses.iteritems(): + for filename, classes in self.ComputedClasses.items(): if filename != self.FileName: classinfos["base"] = classes.get(result["name"], None) if classinfos["base"] is not None: @@ -1197,12 +1197,12 @@ """ Method that print the classes generated """ - items = self.ComputedClasses.items() + items = list(self.ComputedClasses.items()) items.sort() if self.FileName is not None: for filename, classes in items: print("File '%s':" % filename) - class_items = classes.items() + class_items = list(classes.items()) class_items.sort() for classname, xmlclass in class_items: print("%s: %s" % (classname, str(xmlclass))) @@ -1211,7 +1211,7 @@ print("%s: %s" % (classname, str(xmlclass))) def PrintClassNames(self): - classnames = self.XMLClassDefinitions.keys() + classnames = list(self.XMLClassDefinitions.keys()) classnames.sort() for classname in classnames: print(classname) @@ -1319,9 +1319,7 @@ if element_infos["maxOccurs"] == "unbounded" or element_infos["maxOccurs"] > 1: values = self.findall(element_name) if element_infos["elmt_type"]["type"] == SIMPLETYPE: - return map(lambda value: - element_infos["elmt_type"]["extract"](value.text, extract=False), - values) + return [element_infos["elmt_type"]["extract"](value.text, extract=False) for value in values] return values else: value = self.find(element_name) @@ -1375,13 +1373,11 @@ self.remove(element) if value is not None: - element_idx = elements.keys().index(name) + element_idx = list(elements.keys()).index(name) if element_idx > 0: - previous_elements_xpath = "|".join(map( - lambda x: prefix + x + previous_elements_xpath = "|".join([prefix + x if x != "content" - else elements["content"]["elmt_type"]["choices_xpath"].path, - elements.keys()[:element_idx])) + else elements["content"]["elmt_type"]["choices_xpath"].path for x in list(elements.keys())[:element_idx]]) insertion_point = len(self.xpath(previous_elements_xpath, namespaces=factory.NSMAP)) else: @@ -1487,7 +1483,7 @@ children.extend(self.getElementAttributes()) if "base" in classinfos: children.extend(classinfos["base"].getElementInfos(self, name, derived=True)["children"]) - for element_name, element in elements.items(): + for element_name, element in list(elements.items()): if element["minOccurs"] == 0: use = "optional" if element_name == "content" and element["type"] == CHOICE: @@ -1587,7 +1583,7 @@ if element["type"] != CHOICE: initial = GetElementInitialValue(factory, element) if initial is not None: - map(self.append, initial) + list(map(self.append, initial)) return initMethod @@ -1842,7 +1838,7 @@ if targetNamespace is not None: self.RootNSMAP = { name if targetNamespace != uri else None: uri - for name, uri in namespaces.iteritems()} + for name, uri in namespaces.items()} else: self.RootNSMAP = namespaces self.BaseClass = base_class @@ -1945,7 +1941,7 @@ ComputedClasses = factory.CreateClasses() if factory.FileName is not None: ComputedClasses = ComputedClasses[factory.FileName] - BaseClass = [(name, XSDclass) for name, XSDclass in ComputedClasses.items() if XSDclass.IsBaseClass] + BaseClass = [(name, XSDclass) for name, XSDclass in list(ComputedClasses.items()) if XSDclass.IsBaseClass] parser.initMembers( factory.NSMAP,