Exemple #1
0
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))
Exemple #2
0
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                
Exemple #3
0
 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"})
Exemple #4
0
 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"
     })
Exemple #5
0
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
Exemple #6
0
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
Exemple #7
0
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
Exemple #8
0
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))