RSpecVersion.todict() needs to turn values() into a list()
[sfa.git] / sfa / util / xml.py
index ba324c7..3a38ecc 100755 (executable)
@@ -1,10 +1,11 @@
 #!/usr/bin/python 
-from types import StringTypes
 from lxml import etree
-from StringIO import StringIO
 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
+
 # helper functions to help build xpaths
 class XpathFilter:
     @staticmethod
@@ -153,7 +154,7 @@ class XmlElement:
     # are redirected on self.element
     def __getattr__ (self, name):
         if not hasattr(self.element, name):
-            raise AttributeError, name
+            raise AttributeError(name)
         return getattr(self.element, name)
 
 class XML:
@@ -163,7 +164,7 @@ class XML:
         self.namespaces = namespaces
         self.default_namespace = None
         self.schema = None
-        if isinstance(xml, basestring):
+        if isinstance(xml, StringType):
             self.parse_xml(xml)
         if isinstance(xml, XmlElement):
             self.root = xml
@@ -182,7 +183,7 @@ class XML:
             # 'rspec' file doesnt exist. 'rspec' is proably an xml string
             try:
                 tree = etree.parse(StringIO(xml), parser)
-            except Exception, e:
+            except Exception as e:
                 raise InvalidXML(str(e))
         root = tree.getroot()
         self.namespaces = dict(root.nsmap)
@@ -226,7 +227,7 @@ class XML:
                     if isinstance(val, dict):
                         child_element = etree.SubElement(element, key)
                         self.parse_dict(val, key, child_element)
-                    elif isinstance(val, basestring):
+                    elif isinstance(val, StringType):
                         child_element = etree.SubElement(element, key).text = val
 
             elif isinstance(value, int):
@@ -239,7 +240,7 @@ class XML:
         d=d.copy()
         # looks like iteritems won't stand side-effects
         for k in d.keys():
-            if not isinstance(d[k],StringTypes):
+            if not isinstance(d[k], StringType):
                 del d[k]
 
         element.attrib.update(d)