from sfa.util.topology import Topology
from sfa.rspecs.version_manager import VersionManager
from sfa.plc.vlink import get_tc_rate
+from sfa.util.sfatime import epochparse
class Aggregate:
slice, slivers = self.get_slice_and_slivers(slice_xrn)
rspec = RSpec(version=rspec_version, user_options=self.user_options)
+ if slice and 'expiration_date' in slice:
+ rspec.set('expires', epochparse(slice['expiration_date']))
rspec.version.add_nodes(self.get_nodes(slice), slivers)
rspec.version.add_links(self.get_links(slice))
dict.__init__(self, self.fields)
self.update(fields)
+ @staticmethod
+ def get(element_class, xml, xpath, namespaces=None):
+ elems = xml.xpath(xpath, namespaces)
+ generic_elems = [element_class(elem.attrib, elem) for elem in elems]
+ return generic_elems
+
+
+ @staticmethod
+ def add(xml, element_class, name, obj):
+ elem = xml.add_element(name)
+ for field in element_class.fields:
+ if field in obj and obj[field]:
+ elem.set(field, obj[field])
+ return elem
class Sliver(Element):
fields = {
'sliver_id': None,
+ 'component_id': None,
'client_id': None,
'name': None,
'tags': [],
from types import StringTypes
import dateutil.parser
import datetime
+import time
from sfa.util.sfalogging import logger
else:
logger.error("Unexpected type in utcparse [%s]"%type(input))
+def epochparse(input):
+ return time.strftime("%Y-%d-%m-T%H:%M:%SZ", time.localtime(input))
class XmlNode:
def __init__(self, node, namespaces):
self.node = node
+ self.text = node.text
self.namespaces = namespaces
self.attrib = node.attrib
+
def xpath(self, xpath, namespaces=None):
if not namespaces:
namespaces = self.namespaces
- return self.node.xpath(xpath, namespaces=namespaces)
+ elems = self.node.xpath(xpath, namespaces=namespaces)
+ return [XmlNode(elem, namespaces) for elem in elems]
def add_element(name, *args, **kwds):
element = etree.SubElement(name, args, kwds)
parent = element.getparent()
parent.remove(element)
+ def remove(element):
+ self.node.remove(element)
+
def set(self, key, value):
self.node.set(key, value)
def unset(self, key):
del self.node.attrib[key]
-
+
+ def iterchildren(self):
+ return self.node.iterchildren()
+
def toxml(self):
return etree.tostring(self.node, encoding='UTF-8', pretty_print=True)