remove old/python2 references to types like IntType and the like
[sfa.git] / sfa / util / xml.py
index 93d977f..9f43b96 100755 (executable)
@@ -1,10 +1,9 @@
-#!/usr/bin/env python2
+#!/usr/bin/env python3
 from lxml import etree
 from sfa.util.faults import InvalidXML
 from sfa.rspecs.elements.element import Element
 
-from sfa.util.py23 import StringType
-from sfa.util.py23 import StringIO
+from io import StringIO
 
 # helper functions to help build xpaths
 
@@ -29,7 +28,7 @@ class XpathFilter:
         xpath = ""
         if filter:
             filter_list = []
-            for (key, value) in filter.items():
+            for (key, value) in list(filter.items()):
                 if key == 'text':
                     key = 'text()'
                 else:
@@ -116,11 +115,11 @@ class XmlElement:
         if fields is None:
             fields = []
         if not fields and hasattr(instance, 'keys'):
-            fields = instance.keys()
+            fields = list(instance.keys())
         elem = self.add_element(name)
         for field in fields:
             if field in instance and instance[field]:
-                elem.set(field, unicode(instance[field]))
+                elem.set(field, str(instance[field]))
         return elem
 
     def remove_elements(self, name):
@@ -174,7 +173,7 @@ class XML:
         self.namespaces = namespaces
         self.default_namespace = None
         self.schema = None
-        if isinstance(xml, StringType):
+        if isinstance(xml, str):
             self.parse_xml(xml)
         if isinstance(xml, XmlElement):
             self.root = xml
@@ -210,7 +209,7 @@ class XML:
 
         self.root = XmlElement(root, self.namespaces)
         # set schema
-        for key in self.root.attrib.keys():
+        for key in list(self.root.attrib.keys()):
             if key.endswith('schemaLocation'):
                 # schemaLocation should be at the end of the list.
                 # Use list comprehension to filter out empty strings
@@ -231,19 +230,19 @@ class XML:
             element.text = text
 
         # handle repeating fields
-        for (key, value) in d.items():
+        for (key, value) in list(d.items()):
             if isinstance(value, list):
                 value = d.pop(key)
                 for val in value:
                     if isinstance(val, dict):
                         child_element = etree.SubElement(element, key)
                         self.parse_dict(val, key, child_element)
-                    elif isinstance(val, StringType):
+                    elif isinstance(val, str):
                         child_element = etree.SubElement(
                             element, key).text = val
 
             elif isinstance(value, int):
-                d[key] = unicode(d[key])
+                d[key] = str(d[key])
             elif value is None:
                 d.pop(key)
 
@@ -251,8 +250,8 @@ class XML:
         # dcitionary.
         d = d.copy()
         # looks like iteritems won't stand side-effects
-        for k in d.keys():
-            if not isinstance(d[k], StringType):
+        for k in list(d.keys()):
+            if not isinstance(d[k], str):
                 del d[k]
 
         element.attrib.update(d)