コード例 #1
0
ファイル: task_11_2.py プロジェクト: smithy1208/my_pyneng
def create_network_map(filenames):
    '''
    Функция create_network_map обрабатывает вывод команды show cdp neighbors из нескольких файлов и объединяет его в одну общую топологию.

    один параметр filenames, который ожидает как аргумент список с именами файлов, в которых находится вывод команды show cdp neighbors.

    Функция возвращает словарь, который описывает соединения между устройствами.
    Структура словаря такая же, как в задании 11.1:
    {('R4', 'Fa0/1'): ('R5', 'Fa0/1'),
     ('R4', 'Fa0/2'): ('R6', 'Fa0/0')}
    :param filenames:
    :return: dict
    '''
    result = {}

    # Разбираем первый файл.
    with open(filenames.pop(0)) as f1:
        result = parse_cdp_neighbors(f1.read())
    #print(filenames)
    for file in filenames:
        with open(file) as f:
            for key, value in parse_cdp_neighbors(f.read()).items():
                if not value in result.keys(
                ):  # Если значение не в ключах, то добавляем в словарь
                    result[key] = value

    return result
コード例 #2
0
ファイル: task_11_2.py プロジェクト: mdan4ikx/wh_repo
def create_network_map(filenames):
    neighbors = []
    slovar = {}

    for chek in filenames:
        with open(chek) as files:
            parse_cdp_neighbors(files.read())
    pass

    print(slovar)
コード例 #3
0
def test_function_return_value():
    """
    Function check
    """
    sh_cdp_n_sw1 = (
        "SW1>show cdp neighbors\n\n"
        "Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge\n"
        "                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone\n\n"
        "Device ID    Local Intrfce   Holdtme     Capability       Platform    Port ID\n"
        "R1           Eth 0/1         122           R S I           2811       Eth 0/0\n"
        "R2           Eth 0/2         143           R S I           2811       Eth 0/0\n"
        "R3           Eth 0/3         151           R S I           2811       Eth 0/0\n"
        "R6           Eth 0/5         121           R S I           2811       Eth 0/1"
    )
    correct_return_value = {
        ("SW1", "Eth0/1"): ("R1", "Eth0/0"),
        ("SW1", "Eth0/2"): ("R2", "Eth0/0"),
        ("SW1", "Eth0/3"): ("R3", "Eth0/0"),
        ("SW1", "Eth0/5"): ("R6", "Eth0/1"),
    }

    return_value = task_11_1.parse_cdp_neighbors(sh_cdp_n_sw1)
    assert return_value != None, "The function returns None"
    assert (
        type(return_value) == dict
    ), f"The function should return a dict, instead it returns a {type(return_value).__name__}"
    assert correct_return_value == return_value, "Function returns wrong value"
コード例 #4
0
def create_network_map(filenames):
    filal_dict = {}
    '''
    Функция должна возвращать словарь, который описывает соединения между устройствами.
    '''
    with open(filenames, 'r') as f:
        for file in f:
            with open(file.rstrip(), 'r') as f:
                all_output_lines = f.read()
                current_dict = parse_cdp_neighbors(all_output_lines)
                filal_dict = merge_two_dicts(filal_dict, current_dict)

    duble_flug = True
    # Идея алгоритма:
    # беру список значений словаря и список ключей словаря на каждой итерации цикла while
    # прохожу по спискам на предмет совпадающих элементов (функция find_matched_element)
    #
    # Если совпадение найдено (функция find_matched_element вернула совпадение) -
    # - удаляю значение по ключу
    #
    # На следующей итерации снова формируются списки ключей и значений (обновленного словаря)
    # и процесс повторяется, пока ф-я find_matched_element не выдаст отсутствие совпадений
    while duble_flug is True:
        value_list = list(filal_dict.values())
        key_list = list(filal_dict.keys())

        matching = find_matched_element(value_list, key_list)
        if matching:
            # удаление совпадающего элемента
            filal_dict.pop(matching)
        else:
            # выход из while
            duble_flug = False

    return filal_dict
コード例 #5
0
ファイル: task_11_2.py プロジェクト: 983bot/pyneng
def create_network_map(filenames):
    tplg = {}
    for files in filenames:
        with open(files) as f:
            ngbr = parse_cdp_neighbors(f.read())
            tplg.update({k: v for k, v in ngbr.items() if not (v in tplg)})
    return tplg
コード例 #6
0
def test_function_return_value():
    """
    Проверка работы функции
    """
    sh_cdp_n_sw1 = (
        "SW1>show cdp neighbors\n\n"
        "Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge\n"
        "                  S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone\n\n"
        "Device ID    Local Intrfce   Holdtme     Capability       Platform    Port ID\n"
        "R1           Eth 0/1         122           R S I           2811       Eth 0/0\n"
        "R2           Eth 0/2         143           R S I           2811       Eth 0/0\n"
        "R3           Eth 0/3         151           R S I           2811       Eth 0/0\n"
        "R6           Eth 0/5         121           R S I           2811       Eth 0/1"
    )
    correct_return_value = {
        ("SW1", "Eth0/1"): ("R1", "Eth0/0"),
        ("SW1", "Eth0/2"): ("R2", "Eth0/0"),
        ("SW1", "Eth0/3"): ("R3", "Eth0/0"),
        ("SW1", "Eth0/5"): ("R6", "Eth0/1"),
    }

    return_value = task_11_1.parse_cdp_neighbors(sh_cdp_n_sw1)
    assert return_value != None, "Функция ничего не возвращает"
    assert (
        type(return_value) == dict
    ), f"По заданию функция должна возвращать словарь, а возвращает {type(return_value).__name__}"
    assert (correct_return_value == return_value
            ), "Функция возвращает неправильное значение"
コード例 #7
0
def create_network_map(filenames):
    result = {}
    for i in filenames:
        with open(i) as f:
           a = parse_cdp_neighbors(f.read())
           result.update(a)
    return result
コード例 #8
0
ファイル: task_11_2.py プロジェクト: Bolotin/python_test
def create_network_map(filenames):
    topology_dict = {}
    for filename in filenames:
        with open(filename) as file:
            pprint(filename)
            command_output = file.read()
            pprint(parse_cdp_neighbors(command_output))
コード例 #9
0
def test_function_return_value_different_args():
    """
    Проверка работы функции на другом выводе
    """
    sh_cdp_n_r3 = (
        "R3>show cdp neighbors\n"
        "Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge\n"
        "                  S - Switch, H - Host, I - IGMP, r - Repeater\n\n"
        "Device ID        Local Intrfce     Holdtme    Capability  Platform  Port ID\n"
        "SW1              Eth 0/0            131          S I      WS-C3750- Eth 0/3\n"
        "R4               Eth 0/1            145        R S I      2811      Eth 0/0\n"
        "R5               Eth 0/2            123        R S I      2811      Eth 0/0\n"
    )
    correct_return_value = {
        ("R3", "Eth0/0"): ("SW1", "Eth0/3"),
        ("R3", "Eth0/1"): ("R4", "Eth0/0"),
        ("R3", "Eth0/2"): ("R5", "Eth0/0"),
    }

    return_value = task_11_1.parse_cdp_neighbors(sh_cdp_n_r3)
    assert return_value != None, "Функция ничего не возвращает"
    assert (
        type(return_value) == dict
    ), f"По заданию функция должна возвращать словарь, а возвращает {type(return_value).__name__}"
    assert (correct_return_value == return_value
            ), "Функция возвращает неправильное значение"
コード例 #10
0
def create_network_map(filenames):
    '''
    параметр filenames, который ожидает как аргумент список с именами файлов,
    в которых находится вывод команды show cdp neighbors.
    Функция возвращет словарь, который описывает соединения между устройствами.
    Структура словаря:
    {('R4', 'Fa0/1'): ('R5', 'Fa0/1'),
     ('R4', 'Fa0/2'): ('R6', 'Fa0/0')}
    '''
    topology = {}
    dup = []
    for sh_cdp in filenames:
        with open(sh_cdp, 'r') as f:
            top = task_11_1.parse_cdp_neighbors(f.read())
            topology.update(top)

    for k, v in topology.items():
        if k in topology.values():
            dup.append(k)

    ctop = topology.copy()

    for k, v in topology.items():
        if k in topology.values():
            for i in range(0, len(dup) // 2):
                try:
                    ctop.pop(dup[i])
                except KeyError:
                    k = dup[i]
    return ctop
コード例 #11
0
def create_network_map(filenames):
    result = dict()
    for file in filenames:
        with open(file, 'r') as f:
            for value, key in parse_cdp_neighbors(f.read()).items():
                result[value] = key
    return result
コード例 #12
0
ファイル: task_11_2.py プロジェクト: haskhr/pyneng-answers-en
def create_network_map(filenames):
    network_map = {}

    for filename in filenames:
        with open(filename) as show_command:
            parsed = parse_cdp_neighbors(show_command.read())
            network_map.update(parsed)
    return network_map
コード例 #13
0
def main():
    from draw_network_graph import draw_topology
    from task_11_1 import parse_cdp_neighbors
    list_of_files = [
        'sh_cpd_n_r1.txt', 'sh_cpd_n_r2.txt', 'sh_cpd_n_r3.txt',
        'sh_cpd_n_r1.txt'
    ]
    draw_topology(parse_cdp_neighbors('sw1_sh_cdp_neighbors.txt'))
コード例 #14
0
def draw_topology_multi_devices(*args):
    files = {}
    for arg in args:
        files.update({
            k: v
            for k, v in parse_cdp_neighbors(arg).items() if files.get(v) != k
        })
    return draw_topology(files)
コード例 #15
0
def create_network_map(filenames):
    file = []
    for i in filenames:
        with open(i) as f:
            file.append(f.read())

    dct = parse_cdp_neighbors('\n'.join(file))
    return dct
コード例 #16
0
def create_network_map(filenames):
    net_map = {}
    for filename in filenames:
        with open(filename) as src:
            parsed = parse_cdp_neighbors(src.read())
            for key, value in parsed.items():
                key, value = sorted([key, value])
                net_map[key] = value
    return net_map
コード例 #17
0
def create_network_map(filenames):
    
    network_map = {}
    
    for filename in filenames:
        with open(filename) as command_output:
            parsed = parse_cdp_neighbors(command_output.read())
            network_map.update(parsed)
    return network_map
コード例 #18
0
def create_network_map(filenames):
    network_map = {}
    for infile in filenames:
        with open(infile, "r") as infile:
            parsed = parse_cdp_neighbors(infile.read())
            for key, value in parsed.items():
                if not network_map.get(value) == key:
                    network_map[key] = value
    return network_map
コード例 #19
0
def create_network_map(filenames):
    dict1={}
    for fname in filenames:
        with open(fname) as f:
            b=parse_cdp_neighbors(f.read())
            for k,v in b.items():
                dict1[k]=v
    #print(dict1)
    return dict1
コード例 #20
0
def create_network_map(filenames):
    rmap = {}
    for fname in filenames:
        rlines = open(fname, 'r').readlines()
        #        rmap.update(parse_cdp_neighbors(rlines))
        for kport, port in parse_cdp_neighbors(rlines).items():
            if not port in rmap.keys():
                rmap[kport] = port
    return rmap
コード例 #21
0
def test_function_return_value(sh_cdp_n_sw1):
    correct_return_value = {('SW1', 'Eth0/1'): ('R1', 'Eth0/0'),
                            ('SW1', 'Eth0/2'): ('R2', 'Eth0/0'),
                            ('SW1', 'Eth0/3'): ('R3', 'Eth0/0'),
                            ('SW1', 'Eth0/5'): ('R6', 'Eth0/1')}

    return_value = task_11_1.parse_cdp_neighbors(sh_cdp_n_sw1)
    assert return_value != None, "Функция ничего не возвращает"
    assert type(return_value) == dict, "Функция должна возвращать словарь"
    assert return_value == correct_return_value, "Функция возвращает неправильное значение"
コード例 #22
0
def create_network_map(filenames):
    topol = dict()
    for file in filenames:
        with open(file) as f:
            topol.update(parse_cdp_neighbors(f.read()))
    for item in dict(topol):
        if item[0] in [val[0] for val in topol.values()] and topol[item][0] in [key[0] for key in topol.keys()]:
            topol.pop(item)
    print(topol)
    return topol
コード例 #23
0
def create_network_map(filenames):
    network_map = {}

    for filename in filenames:
        with open(filename) as show_command:
            parsed = parse_cdp_neighbors(show_command.read())
            for key, value in parsed.items():
                if not network_map.get(value) == key:
                    network_map[key] = value
    return network_map
コード例 #24
0
def create_network_map(filenames):
    '''
    Cкрипт, который будет обрабатывать конфигурационный файл config_sw1.txt.
    мя файла передается как аргумент скрипту.
    '''
    network = {}
    for num in filenames:
        with open(num, "r") as f:
            #pprint(parse_cdp_neighbors(f.read()))
            network.update(parse_cdp_neighbors(f.read()))
    return network
コード例 #25
0
def create_network_map(filenames):
    result_dict = {}

    for filename in filenames:
        with open(filename) as f:

            for key, value in parse_cdp_neighbors(f.read()).items():
                if not value in result_dict.keys():
                    result_dict.update({key: value})

    return result_dict
コード例 #26
0
def create_network_map(filenames):
    r = {}
    res = {}
    for f in filenames:
        with open(f, 'r') as ff:
            l = ff.read()
            r = parse_cdp_neighbors(l)
            for k, v in r.items():
                if not res.get(k) and not res.get(v):
                    res[k] = v
    return res
コード例 #27
0
def create_network_map(filenames):
    devs_dict, devs_lst = {}, []
    for config in filenames:
        with open(config) as f:
            devs_dict.update(parse_cdp_neighbors(f.read()))
    for devA, devB in devs_dict.items():
        for devb, deva in devs_dict.items():
            if devA == deva and devB == devb:
                if deva not in devs_lst: devs_lst.append(devb)
    for i in devs_lst:
        del devs_dict[i]
    return devs_dict
コード例 #28
0
def create_network_map(filenames):
    topol = {}
    for filename in filenames:
        with open(filename) as f:
            topol_add = parse_cdp_neighbors(f.read())
            copy = topol_add.copy()
            for key, value in topol_add.items():
                for key2, value2 in topol.items():
                    if key == value2 and value == key2:
                        del copy[key]
            topol.update(copy)
    return topol
コード例 #29
0
def create_network_map(filenames):
    result = {}
    for file in filenames:
        with open(file, "r") as f:
            p_result = parse_cdp_neighbors("".join(f.readlines()))
            for key, value in p_result.items():
                if value in result.keys() and result[value] == key:
                    pass
                else:
                    result.update({key: value})

    return result
コード例 #30
0
ファイル: task_11_2.py プロジェクト: twist9743/python
def create_network_map(filenames):
    topology_dict = {}
    for line in filenames:
        filename_output = line
        with open(filename_output) as f:
            command_output = f.read()
            topology_dict.update(parse_cdp_neighbors(command_output))
            command_output = " "
    right_topology = dict(topology_dict)
    for words in topology_dict:
        if topology_dict[words] in right_topology:
            right_topology.pop(words)
    return right_topology