def _delete_link_conversion(self, network_id, link): logging.debug(">> %s", stack()[0][3]) resp_list = {} if network_id is None or link is None: return resp_list dst_links = self._conversion_table.get_link(network_id, link.link_id) for dst_link in dst_links: link_id = dst_link.split("::") if link_id[0] not in self._network_interfaces: continue network_if = self._network_interfaces[link_id[0]] resp = network_if.del_link(link_id[1]) resp_link = None if resp.body is not None: try: resp_link = Link.create_from_packed(resp.body) except KeyError, err: logging.error("DELETE Link Invalid Response Message" + " KeyError: " + str(err)) return None resp_list[dst_link] = resp_link
def create_from_packed(cls, packed): action = packed[cls.ACTION] version = "" prev = None curr = None if action == cls.Action.ADD: version = packed[cls.VERSION] curr = Link.create_from_packed(packed[cls.CURR]) elif action == cls.Action.DELETE: prev = Link.create_from_packed(packed[cls.PREV]) elif action == cls.Action.UPDATE: version = packed[cls.VERSION] prev = Link.create_from_packed(packed[cls.PREV]) curr = Link.create_from_packed(packed[cls.CURR]) return cls(packed[cls.ID], action, version, prev, curr)
def test_create_from_packed(self): packed = self.target.packed_object() result = Link.create_from_packed(packed) self.assertEqual(result.type, 'Link') self.assertEqual(result.version, '1') self.assertEqual(result.link_id, 'LinkId') self.assertEqual(result.src_node, 'SrcNodeId') self.assertEqual(result.src_port, 'SrcPortId') self.assertEqual(result.dst_node, 'DstNodeId') self.assertEqual(result.dst_port, 'DstPortId') self.assertEqual(len(result.attributes), 1) self.assertEqual(result.attributes['Key'], 'Val')
def _update_link_conversion(self, network_id, link_prev, link_curr, attributes): logging.debug(">> %s", stack()[0][3]) resp_list = {} if network_id is None or link_curr is None: return resp_list attributes_list = [] if attributes is None: attributes_list = [] else: attributes_list = attributes # get ignore list link_ignore_attributes = self.__get_ignore_keys(self.attributes_link, attributes_list) for dst_link in self._conversion_table.get_link(network_id, link_curr.link_id): link_id = dst_link.split("::") if link_id[0] not in self._network_interfaces: continue network_if = self._network_interfaces[link_id[0]] # get link link = network_if.get_link(link_id[1]) if link is None: continue # attr copy (curr -> body) updated = False curr_attr = link_curr.attributes for attr_key in curr_attr: if (attr_key in link_ignore_attributes or (attr_key in link.attributes and link.attributes[attr_key] == curr_attr[attr_key])): continue updated = True link.attributes[attr_key] = \ link_curr.attributes[attr_key] # put link if updated: resp = network_if.put_link(link) try: resp_link = Link.create_from_packed(resp.body) resp_list[dst_link] = resp_link except KeyError, err: logging.error("PUT Link Invalid Response Message" + " KeyError: " + str(err))
def create_from_packed(cls, packed): version = None if cls.VERSION in packed: version = packed[cls.VERSION] nodes = {} for node_id, node in packed[cls.NODES].items(): nodes[node_id] = Node.create_from_packed(node) links = {} for link_id, link in packed[cls.LINKS].items(): links[link_id] = Link.create_from_packed(link) return cls(packed[cls.TYPE], version, nodes, links)
def get_links(self): logging.debug("GET Links NetworkID:" + self.network_id) resp = self._get_object_to_remote_object(self.LINKS_PATH) if resp.is_error(Request.Method.GET): return None links = {} try: for link_id, link in resp.body.items(): links[link_id] = Link.create_from_packed(link) except KeyError, err: logging.error("GET Links Invalid Response Message" + " KeyError: " + str(err)) return None
def get_link(self, link_id): logging.debug("GET Link NetworkID:" + self.network_id + " LinkID:" + link_id) path = self.LINK_PATH % link_id resp = self._get_object_to_remote_object(path) if resp.is_error(Request.Method.GET): return None link = None try: link = Link.create_from_packed(resp.body) except KeyError, err: logging.error("GET Link Invalid Response Message" + " KeyError: " + str(err)) return None
def test_create_from_packed_without_version(self): packed = {'type': 'Link', 'link_id': 'LinkId', 'src_node': 'SrcNodeId', 'src_port': 'SrcPortId', 'dst_node': 'DstNodeId', 'dst_port': 'DstPortId', 'attributes': {'Key': 'Val'}} result = Link.create_from_packed(packed) self.assertEqual(result.type, 'Link') self.assertEqual(result.version, None) self.assertEqual(result.link_id, 'LinkId') self.assertEqual(result.src_node, 'SrcNodeId') self.assertEqual(result.src_port, 'SrcPortId') self.assertEqual(result.dst_node, 'DstNodeId') self.assertEqual(result.dst_port, 'DstPortId') self.assertEqual(len(result.attributes), 1) self.assertEqual(result.attributes['Key'], 'Val')
def _add_link_conversion(self, network_id, link): logging.debug(">> %s", stack()[0][3]) resp_list = {} for nw_id in self._conversion_table.get_network(network_id): if nw_id not in self._network_interfaces: continue network_if = self._network_interfaces[nw_id] resp = network_if.put_link(link) resp_list[nw_id] = resp try: resp_link = Link.create_from_packed(resp.body) self._conversion_table.add_entry_link(network_id, link.link_id, nw_id, resp_link.link_id) except KeyError, err: logging.error("PUT Link Invalid Response Message" + " KeyError: " + str(err))
def test_create_from_packed_without_version(self): packed = { 'type': 'Link', 'link_id': 'LinkId', 'src_node': 'SrcNodeId', 'src_port': 'SrcPortId', 'dst_node': 'DstNodeId', 'dst_port': 'DstPortId', 'attributes': { 'Key': 'Val' } } result = Link.create_from_packed(packed) self.assertEqual(result.type, 'Link') self.assertEqual(result.version, None) self.assertEqual(result.link_id, 'LinkId') self.assertEqual(result.src_node, 'SrcNodeId') self.assertEqual(result.src_port, 'SrcPortId') self.assertEqual(result.dst_node, 'DstNodeId') self.assertEqual(result.dst_port, 'DstPortId') self.assertEqual(len(result.attributes), 1) self.assertEqual(result.attributes['Key'], 'Val')