def create_odict_from_items(name, key, dictlst): """Construct an ordered dictionary from a list of dictionaries.""" def _generator(): for delement in dictlst: dvalues = dict((k, v) for (k, v) in delement.iteritems()) yield (delement[key], lib.Struct(name, **dvalues)) return odict(_generator())
def parse_active_nets(lines, units): """Return an orderd dict with nets, each containing a list of links.""" nets_lines = list(lib.split_iter_of_consecutive(lines[1:], lambda s: not s.strip(), 2)) nets = odict() for net_lines in lib.strip_iter_items(nets_lines): info = lib.strip_list(net_lines) name = info[0].strip() block = list(lib.iter_block(lib.strip_list(info[1:]), r"Net members:", r"\s.*Quality =")) table, quality_line = block[:-2], block[-1] max_quality = int(re.search("Quality = (\d+)", quality_line).group(1)) grid_field = re.match("Net members:\s*(.*?)\s*Role:", table[0]).group(1) grid_fields = ["Net members:", grid_field, "Role:", "System:", "Antenna:"] rows = list(lib.parse_table(table, grid_fields, lambda s: not s.startswith('#'))) net_members = create_odict_from_items("net_member", "net_members", rows) links = [] for link in get_net_links(rows, grid_field, units): peers = (link["node1"].net_members, link["node2"].net_members) link = lib.Struct("Link", peers=peers, quality=link["quality"], distance=link["distance"]) links.append(link) nets[name] = lib.Struct("Network", name=name, net_members=net_members, links=links, max_quality=max_quality) return nets
def parse_active_nets(lines, units): """Return an orderd dict with nets, each containing a list of links.""" nets_lines = list( lib.split_iter_of_consecutive(lines[1:], lambda s: not s.strip(), 2)) nets = odict() for net_lines in lib.strip_iter_items(nets_lines): info = lib.strip_list(net_lines) name = info[0].strip() block = list( lib.iter_block(lib.strip_list(info[1:]), r"Net members:", r"\s.*Quality =")) table, quality_line = block[:-2], block[-1] max_quality = int(re.search("Quality = (\d+)", quality_line).group(1)) grid_field = re.match("Net members:\s*(.*?)\s*Role:", table[0]).group(1) grid_fields = [ "Net members:", grid_field, "Role:", "System:", "Antenna:" ] rows = list( lib.parse_table(table, grid_fields, lambda s: not s.startswith('#'))) net_members = create_odict_from_items("net_member", "net_members", rows) links = [] for link in get_net_links(rows, grid_field, units): peers = (link["node1"].net_members, link["node2"].net_members) link = lib.Struct("Link", peers=peers, quality=link["quality"], distance=link["distance"]) links.append(link) nets[name] = lib.Struct("Network", name=name, net_members=net_members, links=links, max_quality=max_quality) return nets
def setUp(self): self.odict = odict.odict([("key1", "value1"), ("key2", "value2")])