The converters are designed to be pluggable: see ListConverter.
-Usage:
+Usage:
c = AnyConverter() or
c = ListConverter(AnyOtherConverter())
c.convert(root.getroot())
"""
+from myslice.settings import logger
+
+try:
+ # Much faster and lighter library (C implementation)
+ from xml.etree import cElementTree as ElementTree
+except ImportError:
+ from xml.etree import ElementTree
+
+from xml.etree.ElementTree import QName
-from xml.etree import ElementTree
-from xml.etree.ElementTree import Element
import dateutil.parser
from wsag_model import Agreement
def convert(self, xmlroot):
result = []
- for item in xmlroot.find("items"): # loop through "items" children
+ # Converter for the old xml structure
+ # for item in xmlroot.find("items"): # loop through "items" children
+ # inner = self.innerconverter.convert(item)
+ # result.append(inner)
+ # return result
+
+ for item in xmlroot: # loop through children
inner = self.innerconverter.convert(item)
result.append(inner)
return result
result.enabled = xmlroot.find("enabled").text
return result
+
class ViolationConverter(Converter):
"""Converter for a violation.
Input:
<violation>
- <uuid>ce0e148f-dfac-4492-bb26-ad2e9a6965ec</uuid>
- <contract_uuid>agreement04</contract_uuid>
- <service_scope></service_scope>
- <metric_name>Performance</metric_name>
- <datetime>2014-01-14T11:28:22Z</datetime>
- <actual_value>0.09555700123360344</actual_value>
+ <uuid>1d94627e-c318-41ba-9c45-42c95b67cc32</uuid>
+ <contract_uuid>26e5d5b6-f5a1-4eb3-bc91-606e8f24fb09</contract_uuid>
+ <service_name>servicename1</service_name>
+ <service_scope>test1</service_scope>
+ <metric_name>UpTime</metric_name>
+ <datetime>2014-07-17T09:32:00+02:00</datetime>
+ <actual_value>0.0</actual_value>
</violation>
Output:
result = Violation()
result.uuid = xmlroot.find("uuid").text
result.contract_uuid = xmlroot.find("contract_uuid").text
+ result.service_name = xmlroot.find("service_name").text
result.service_scope = xmlroot.find("service_scope").text
result.metric_name = xmlroot.find("metric_name").text
result.actual_value = xmlroot.find("actual_value").text
dt_str = xmlroot.find("datetime").text
result.datetime = dateutil.parser.parse(dt_str)
+
return result
"""Converter for an ws-agreement agreement or template.
"""
super(AgreementConverter, self).__init__()
- self._namespaces = {
+ self._namespaces = {
"wsag": "http://www.ggf.org/namespaces/ws-agreement",
"sla": "http://sla.atos.eu",
- "xifi": "http://sla.xifi.eu"
}
self.agreement_tags = (
"{{{}}}Agreement".format(self._namespaces["wsag"]),
:param Element xmlroot: root element of xml to convert.
:rtype: wsag_model.Agreement
"""
+ # for name, value in xmlroot.attrib.items():
+ # logger.debug('SLA xmlconverter: {} = {}'.format(name, value))
+
if xmlroot.tag in self.agreement_tags:
result = Agreement()
- result.agreement_id = xmlroot.attrib["AgreementId"]
+ agreementId = str(QName(self._namespaces["wsag"], "AgreementId"))
+ result.agreement_id = xmlroot.attrib[agreementId]
elif xmlroot.tag in self.template_tags:
result = Template()
- result.template_id = xmlroot.attrib["TemplateId"]
+ templateId = str(QName(self._namespaces["wsag"], "TemplateId"))
+ result.template_id = xmlroot.attrib[templateId]
else:
raise ValueError("Not valid root element name: " + xmlroot.tag)
nss = self._namespaces
for element in elements:
servicename = _get_attribute(element, "ServiceName")
- for var in element.findall("wsag:Variables/wsag:Variable", nss):
+ for var in element.findall("wsag:VariableSet/wsag:Variable", nss):
key, value = self._parse_property(var, servicename)
result[key] = value
return name, result
def _parse_guarantees(self, elements):
-
result = {}
for element in elements:
key, value = self._parse_guarantee(element)
isns = (attrname[0] == '{')
#
- # Handle qnamed request:
+ # Handle qnamed request:
# attrname = {uri}name
#
if isns: