Пример #1
0
def graphDSD(database: str):
    metadata_db, index = get_metadata_db(database)
    list_aux = list()
    if metadata_db:
        table_dic: dict = metadata_db.get_tab()
        if len(table_dic) != 0:
            grafo = Graph()
            for key, table in table_dic.items():
                list_fk: list = table.fk.extractForeign()
                if len(list_fk) != 0:
                    for data in list_fk:
                        table_1 = data[1]
                        table_2 = data[3]
                        if table_1 not in list_aux:
                            grafo.add_vertex(str(table_1))
                        if table_2 not in list_aux:
                            grafo.add_vertex(str(table_2))

                        grafo.join(str(table_1), str(table_2))
                        # print(f"{str(table_1)},{str(table_2)}")
            gra = grafo.graficar()
            ruta = f"graphDSD_{database}"
            generate_grapviz(gra, str(ruta))
        else:
            return "Tables empty"
    else:
        return 1
Пример #2
0
def graphDF(database: str, table: str):
    metadata_db, index = get_metadata_db(database)
    if metadata_db:
        table_md: Table = metadata_db.get_table(table)
        if table_md:
            grafo = Graph()
            list_ui = list()
            list_pk = list()
            list_general: list = [x for x in range(table_md.get_nums_colums())]
            pk_list: list = table_md.get_pk_list()
            unique_list: list = table_md.unique.extractUnique()

            for pk in pk_list:
                pk_l = f"pk_{pk}"
                if pk_l not in list_pk:
                    list_pk.append(pk_l)
                grafo.add_vertex(pk_l)
                if pk in list_general:
                    list_general.remove(pk)

            for ui in unique_list:
                for ui_index in ui[2]:
                    ui_l = f"ui_{ui_index}"
                    if ui_l not in list_ui:
                        list_ui.append(ui_l)
                    grafo.add_vertex(ui_l)
                    if ui_index in list_general:
                        list_general.remove(ui_index)

            for general in list_general:
                grafo.add_vertex(general)

            if len(pk_list) == 0:
                hidden_pk = "Hidden_PK"
                grafo.add_vertex(hidden_pk)
                for ui in list_ui:
                    grafo.join(hidden_pk, ui)
                    for normal in list_general:
                        grafo.join(ui, normal)
                        grafo.join(hidden_pk, normal)
            else:
                for pk in list_pk:
                    for ui in list_ui:
                        grafo.join(pk, ui)
                        for normal in list_general:
                            grafo.join(pk, normal)
                for ui in list_ui:
                    for normal in list_general:
                        grafo.join(ui, normal)

                    # print(f"{str(table_1)},{str(table_2)}")
            gra = grafo.graficar()
            ruta = f"graphDF_{database}"
            generate_grapviz(gra, str(ruta))

        else:
            return "Tables empty"
    else:
        return 1
Пример #3
0
def main():
    G = Graph(is_directional=True)

    print("\n\n")
    print("Loading graph...")

    with open('following_followers', 'r') as fp:
        count_line = 0
        user = []
        for line in fp:
            user.append(line)
            count_line += 1
            if count_line == 5:
                count_line = 0
                username = user[0].strip('\n')
                name = user[1].strip('\n')
                avatar = user[1].strip('\n')

                followers = list(user[3].strip('\n').split(','))
                for follower in followers:
                    if follower == 'None':
                        break
                    G.add_vertex([(follower, username)])

                following = list(user[4].strip('\n').split(','))
                for user_following in following:
                    if user_following == 'None':
                        break
                    G.add_vertex([(username, user_following)])
                user = []

    print("Graph loaded!")
    print("\n==========================================\n")
    print("Edges count: ", G.edges_count)
    print("Order: ", G.get_order())
    print("\n==========================================\n")
    print("\n\n")
    print("Ctrl + C to quit")
    while True:
        try:
            user_1 = input('User 1: ')
            user_2 = input('User 2: ')
            print("\n\n")

            if G.get_vertex(user_1):
                if G.get_vertex(user_2):
                    print("Separation degree: ",
                          G.breadth_first_search(user_1, user_2))
                else:
                    print("User 2 '{}' is'n in this graph :<".format(user_2))
            else:
                print("User 1 '{}' is'n in this graph :<".format(user_1))
                if not G.get_vertex(user_2):
                    print("User 2 '{}' is'n in this graph :<".format(user_2))

            print("\n==========================================\n\n")
        except KeyboardInterrupt as e:
            print("\n\n")
            out = input('Do you really want to quit? [Y/n]: ')
            if out != 'n' and out != 'no' and out != 'N' and out != 'NO' and out != 'No' and out != 'nO':
                exit(0)