def _napalm_lldp_converter(hostname: str(), cmd_output: json) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    if "get_lldp_neighbors_detail" in cmd_output.keys():
        for interface_name, facts in cmd_output.get(
                "get_lldp_neighbors_detail", NOT_SET).items():

            for neighbors in facts:

                lldp_neighbors_lst.lldp_neighbors_lst.append(
                    LLDP(local_name=hostname,
                         local_port=_mapping_interface_name(interface_name),
                         neighbor_mgmt_ip=NOT_SET,
                         neighbor_name=neighbors.get('remote_system_name',
                                                     NOT_SET),
                         neighbor_port=_mapping_interface_name(
                             neighbors.get('remote_port', NOT_SET)),
                         neighbor_os=neighbors.get('remote_system_description',
                                                   NOT_SET),
                         neighbor_type=_mapping_sys_capabilities(
                             neighbors.get('remote_system_capab', NOT_SET))))

    return lldp_neighbors_lst
def _juniper_lldp_converter(hostname: str(), cmd_output: dict) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    if "lldp-neighbors-information" in cmd_output.keys():
        if "lldp-neighbor-information" in cmd_output.get(
                "lldp-neighbors-information")[0].keys():
            for neighbors in cmd_output.get("lldp-neighbors-information")[
                    0].get("lldp-neighbor-information"):

                lldp_neighbors_lst.lldp_neighbors_lst.append(
                    LLDP(local_name=hostname,
                         local_port=_mapping_interface_name(
                             neighbors.get("lldp-local-port-id")[0].get(
                                 "data")),
                         neighbor_mgmt_ip=NOT_SET,
                         neighbor_name=neighbors.get("lldp-remote-system-name")
                         [0].get("data"),
                         neighbor_port=_mapping_interface_name(
                             neighbors.get("lldp-remote-port-id")[0].get(
                                 "data")),
                         neighbor_os=NOT_SET,
                         neighbor_type=NOT_SET))

    return lldp_neighbors_lst
def _nexus_lldp_converter(hostname: str(), cmd_output: json) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    if "TABLE_nbor_detail" in cmd_output.keys():

        for lldp_neighbor in cmd_output.get('TABLE_nbor_detail', NOT_SET).get(
                "ROW_nbor_detail", NOT_SET):

            neighbor_type_lst = list()

            for sys_capability in lldp_neighbor.get("system_capability",
                                                    NOT_SET):
                neighbor_type_lst.append(
                    _mapping_sys_capabilities(sys_capability))

            lldp_neighbors_lst.lldp_neighbors_lst.append(
                LLDP(local_name=hostname,
                     local_port=_mapping_interface_name(
                         lldp_neighbor.get("l_port_id", NOT_SET)),
                     neighbor_mgmt_ip=lldp_neighbor.get("mgmt_addr", NOT_SET),
                     neighbor_name=lldp_neighbor.get("sys_name", NOT_SET),
                     neighbor_port=_mapping_interface_name(
                         lldp_neighbor.get("port_id", NOT_SET)),
                     neighbor_os=lldp_neighbor.get("sys_desc", NOT_SET),
                     neighbor_type=neighbor_type_lst))

    return lldp_neighbors_lst
def _cumulus_lldp_converter(hostname: str(), cmd_output: json) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    if "lldp" in cmd_output.keys():
        if "interface" in cmd_output.get('lldp')[0].keys():
            for lldp_neighbor in cmd_output.get('lldp')[0].get("interface"):

                if lldp_neighbor.get("via", NOT_SET) == "LLDP":

                    neighbor_type_lst = list()

                    if lldp_neighbor.get("chassis",
                                         NOT_SET)[0].get("descr",
                                                         NOT_SET) == NOT_SET:
                        neighbor_os = NOT_SET
                    else:
                        neighbor_os = lldp_neighbor.get(
                            "chassis",
                            NOT_SET)[0].get("descr",
                                            NOT_SET)[0].get("value", NOT_SET)

                    for capability in lldp_neighbor.get(
                            "chassis", NOT_SET)[0].get("capability", NOT_SET):
                        neighbor_type_lst.append(
                            capability.get("type", NOT_SET))

                    lldp_neighbors_lst.lldp_neighbors_lst.append(
                        LLDP(local_name=hostname,
                             local_port=_mapping_interface_name(
                                 lldp_neighbor.get("name", NOT_SET)),
                             neighbor_mgmt_ip=lldp_neighbor.get(
                                 "chassis",
                                 NOT_SET)[0].get("mgmt-ip", NOT_SET)[0].get(
                                     "value", NOT_SET),
                             neighbor_name=lldp_neighbor.get(
                                 "chassis",
                                 NOT_SET)[0].get("name", NOT_SET)[0].get(
                                     "value", NOT_SET),
                             neighbor_port=_mapping_interface_name(
                                 lldp_neighbor.get("port", NOT_SET)[0].get(
                                     "id", NOT_SET)[0].get("value", NOT_SET)),
                             neighbor_os=neighbor_os,
                             neighbor_type=neighbor_type_lst))

    return lldp_neighbors_lst
def _arista_lldp_converter(hostname: str(), cmd_output: json) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    if "lldpNeighbors" in cmd_output.keys():

        for interface_name, facts in cmd_output.get("lldpNeighbors",
                                                    NOT_SET).items():
            if len(facts.get("lldpNeighborInfo")) > 0:
                for data in facts.get("lldpNeighborInfo", NOT_SET):

                    neighbor_type_lst = list()
                    for sys_capability in data.get("systemCapabilities",
                                                   NOT_SET):
                        neighbor_type_lst.append(
                            (str(sys_capability).capitalize()))

                    neighbor_mgmt_ip = str()
                    for address in data.get("managementAddresses", NOT_SET):
                        if address.get("addressType", NOT_SET) == "ipv4":
                            neighbor_mgmt_ip = address.get("address", NOT_SET)

                    lldp_neighbors_lst.lldp_neighbors_lst.append(
                        LLDP(
                            local_name=hostname,
                            local_port=_mapping_interface_name(interface_name),
                            neighbor_mgmt_ip=neighbor_mgmt_ip,
                            neighbor_name=data.get("systemName", NOT_SET),
                            neighbor_port=_mapping_interface_name(
                                data.get("neighborInterfaceInfo",
                                         NOT_SET).get("interfaceDescription",
                                                      NOT_SET)),
                            neighbor_os=data.get("systemDescription", NOT_SET),
                            neighbor_type=neighbor_type_lst))

    return lldp_neighbors_lst
def create_an_lldp_object_manually(context) -> None:
    """
    Create a LLDP object manually

    :param context:
    :return None:
    """

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    lldp_neighbors_lst.lldp_neighbors_lst.append(
        LLDP(local_name="leaf04",
             local_port="et-0/0/0",
             neighbor_port="et-0/0/0",
             neighbor_name="router-core-01"))

    lldp_neighbors_lst.lldp_neighbors_lst.append(
        LLDP(local_name="leaf04",
             local_port="et-1/3/2",
             neighbor_port="1/33",
             neighbor_name="router-no-core-01"))

    context.object_01 = lldp_neighbors_lst
def _compare_lldp(host_keys, hostname, lldp_host_data, lldp_yaml_data: json):

    verity_lldp = ListLLDP(list())

    if LLDP_DATA_HOST_KEY in host_keys:

        for lldp_neighbor in lldp_yaml_data.get(hostname, NOT_SET):
            lldp_obj = LLDP(local_name=hostname,
                            local_port=_mapping_interface_name(
                                lldp_neighbor.get("local_port", NOT_SET)),
                            neighbor_name=lldp_neighbor.get(
                                "neighbor_name", NOT_SET),
                            neighbor_port=_mapping_interface_name(
                                lldp_neighbor.get("neighbor_port", NOT_SET)))

            verity_lldp.lldp_neighbors_lst.append(lldp_obj)

        return verity_lldp == lldp_host_data

    else:
        print(
            f"[{HEADER_GET}] {hostname} is not present in {PATH_TO_VERITY_FILES}/{TEST_TO_EXC_LLDP_KEY}."
        )
        return False
def _extreme_vsp_lldp_converter(hostname: str(), cmd_output: list) -> ListLLDP:

    if cmd_output is None or cmd_output == "":
        return None

    lldp_neighbors_lst = ListLLDP(lldp_neighbors_lst=list())

    for lldp_neighbor in cmd_output:

        neighbor_type_lst = list()
        for sys_capability in lldp_neighbor[4]:
            neighbor_type_lst.append(
                _mapping_sys_capabilities(str(sys_capability).capitalize()))

        lldp_neighbors_lst.lldp_neighbors_lst.append(
            LLDP(local_name=hostname,
                 local_port=_mapping_interface_name(lldp_neighbor[0]),
                 neighbor_mgmt_ip=lldp_neighbor[7],
                 neighbor_name=lldp_neighbor[3],
                 neighbor_port=_mapping_interface_name(lldp_neighbor[2]),
                 neighbor_os=lldp_neighbor[6],
                 neighbor_type=neighbor_type_lst))

    return lldp_neighbors_lst