from lxml import etree
from StringIO import StringIO
-def merge_rspecs(rspecs):
- """
- Merge merge a set of RSpecs into 1 RSpec, and return the result.
- rspecs must be a valid RSpec string or list of rspec strings.
- """
- if not rspecs or not isinstance(rspecs, list):
- return rspecs
-
- rspec = None
- for tmp_rspec in rspecs:
- try:
- tree = etree.parse(StringIO(tmp_rspec))
- except etree.XMLSyntaxError:
- # consider failing silently here
- message = str(agg_rspec) + ": " + str(sys.exc_info()[1])
- raise InvalidRSpec(message)
-
- root = tree.getroot()
- if root.get("type") in ["SFA"]:
- if rspec == None:
- rspec = root
- else:
- for network in root.iterfind("./network"):
- rspec.append(deepcopy(network))
- for request in root.iterfind("./request"):
- rspec.append(deepcopy(request))
- return etree.tostring(rspec, xml_declaration=True, pretty_print=True)
-
-
+from sfa.util.sfalogging import sfa_logger
class RSpec:
except Exception, e:
# logging.debug("%s: web file not found" % xsdURI)
# logging.debug("Using local file %s" % self.xsd")
- print e
- print "Can't find %s on the web. Continuing." % xsdURI
+ sfa_logger.log_exc("rspec.parseXSD: can't find %s on the web. Continuing." % xsdURI)
if not schemaDom:
if os.path.exists(xsdURI):
# logging.debug("using local copy.")
- print "Using local %s" % xsdURI
+ sfa_logger.debug("rspec.parseXSD: Using local %s" % xsdURI)
schemaDom = minidom.parse(xsdURI)
else:
- raise Exception("Can't find xsd locally")
+ raise Exception("rspec.parseXSD: can't find xsd locally")
self.schemaDict = self.toDict(schemaDom.childNodes[0])