def parse_systems(lines): """Return orderect dict containing (name, attributes) pairs for systems.""" headers = [ "Name", "Pwr Tx", "Loss", "Loss (+)", "Rx thr.", "Ant. G.", "Ant. Type" ] return create_odict_from_items("system", "name", lib.parse_table(lines, headers))
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 test_parse_table(self): table = """header1 header2 header3 val1a val2a val3a val1b val2b val3b""" table2 = [s.strip() for s in table.splitlines()] res = list(lib.parse_table(table2, ["header1", "header2", "header3"])) self.assertEqual(len(res), 2) self.assertEqual(res[0], {"header1": "val1a", "header2": "val2a", "header3": "val3a"}) self.assertEqual(res[1], {"header1": "val1b", "header2": "val2b", "header3": "val3b"})
def test_parse_table(self): table = """header1 header2 header3 val1a val2a val3a val1b val2b val3b""" table2 = [s.strip() for s in table.splitlines()] res = list(lib.parse_table(table2, ["header1", "header2", "header3"])) self.assertEqual(len(res), 2) self.assertEqual(res[0], { "header1": "val1a", "header2": "val2a", "header3": "val3a" }) self.assertEqual(res[1], { "header1": "val1b", "header2": "val2b", "header3": "val3b" })
def parse_active_units(lines): """Return ordered dict containing (name, attributes) pairs for units.""" headers = ["Name", "Location", "Elevation"] units = create_odict_from_items("unit", "name", lib.parse_table(lines, headers)) if units: for name, unit in units.iteritems(): unit.location = unit.location.replace("°", "d") coords = get_lat_lon_from_string(unit.location) units[name].location_coords = list(coords) elevation = int(float(re.match("([\d.]+)", unit.elevation).group(1))) units[name].elevation = elevation unit1 = units.itervalues().next() reference = get_reference(unit1.location_coords) for name, unit in units.iteritems(): units[name].location_meters = \ list(get_position_from_reference(unit.location_coords, reference)) return units
def parse_active_units(lines): """Return ordered dict containing (name, attributes) pairs for units.""" headers = ["Name", "Location", "Elevation"] units = create_odict_from_items("unit", "name", lib.parse_table(lines, headers)) if units: for name, unit in units.iteritems(): unit.location = unit.location.replace("°", "d") coords = get_lat_lon_from_string(unit.location) units[name].location_coords = list(coords) elevation = int( float(re.match("([\d.]+)", unit.elevation).group(1))) units[name].elevation = elevation unit1 = units.itervalues().next() reference = get_reference(unit1.location_coords) for name, unit in units.iteritems(): units[name].location_meters = \ list(get_position_from_reference(unit.location_coords, reference)) return units
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_systems(lines): """Return orderect dict containing (name, attributes) pairs for systems.""" headers = ["Name", "Pwr Tx", "Loss", "Loss (+)", "Rx thr.", "Ant. G.", "Ant. Type"] return create_odict_from_items("system", "name", lib.parse_table(lines, headers))