#!/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
return xpath
@staticmethod
- def xpath(filter={}):
+ def xpath(filter=None):
+ if filter is None: filter={}
xpath = ""
if filter:
filter_list = []
def getparent(self):
return XmlElement(self.element.getparent(), self.namespaces)
- def get_instance(self, instance_class=None, fields=[]):
+ def get_instance(self, instance_class=None, fields=None):
"""
Returns an instance (dict) of this xml element. The instance
holds a reference to this xml element.
"""
+ if fields is None: fields=[]
if not instance_class:
instance_class = Element
if not fields and hasattr(instance_class, 'fields'):
instance[field] = self.attrib[field]
return instance
- def add_instance(self, name, instance, fields=[]):
+ def add_instance(self, name, instance, fields=None):
"""
Adds the specifed instance(s) as a child element of this xml
element.
"""
+ if fields is None: fields=[]
if not fields and hasattr(instance, 'keys'):
fields = instance.keys()
elem = self.add_element(name)
# 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:
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
# '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)
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):
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)