Skip to content
Snippets Groups Projects
Select Git revision
  • 4b5970c299b43df85c9b955856e47924fd306dd9
  • main default protected
2 results

enhancement.py

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    update_graph.py 3.99 KiB
    1# -*- coding: utf-8 -*-
    """
    Functions to update a graph representing citations between multiple ACS/Nature journals
    
    """
    
    __authors__ = "Donna Löding, Alina Molkentin, Xinyi Tang, Judith Große, Malte Schokolowski"
    __email__ = "cis-project2021@zbh.uni-hamburg.de"
    __status__ = "Production"
    #__copyright__ = ""
    #__credits__ = ["", "", "", ""]
    #__license__ = ""
    #__version__ = ""
    #__maintainer__ = ""
    
    
    import sys
    
    sys.path.append("../../")
    
    from input.publication import Publication
    from verarbeitung.get_pub_from_input import get_pub
    from .Knoten_Vergleich import doi_listen_vergleichen
    from .delete_nodes_edges import delete_nodes_and_edges
    from .connect_new_input import connect_old_and_new_input
    from .update_depth import update_depth
    from .import_from_json import input_from_json
    
    
    def get_old_input_dois(old_obj_input_list):
        '''
            :param old_obj_input_list:  list of publications retrieved from old json file
            :type old_obj_input_list:   List[Publication]
    
            function to return pub dois for old publications of group input retrieved from json file
        '''
    
        # new list to save doi_url for each old publication of group input
        old_input_dois = []
        for pub in old_obj_input_list:
            if (pub.group == 0):
                old_input_dois.append(pub.doi_url)
        return old_input_dois
    
    def get_new_input_dois(new_input, test_var):
        '''
            :param new_input:   input list of doi from UI
            :type new_input:    list of strings
    
            :param test_var:    variable to differenciate between test and url call
            :type test_var:     boolean
    
            function to return pub dois for input urls
        '''
    
        # new list to save doi_url for each new input url
        new_input_dois = []
        for new_node in new_input:
            # retrieves information and adds to new list if successful 
            pub = get_pub(new_node, test_var)
            if (type(pub) != Publication):
                print(pub)
                continue
    
            new_input_dois.append(pub.doi_url)
        return(new_input_dois)
    
    
    def update_graph(new_doi_input_list, json_file, search_depth, search_height, test_var = False):
        '''
            :param new_doi_input_list:  input list of doi from UI
            :type new_doi_input_list:   List[String]
    
            :param old_obj_input_list:  list of publications retrieved from old json file
            :type old_obj_input_list:   List[Publication]
    
            :param old_edges_list:      list of links between publications retrieved from old json file
            :type old_edges_list:       List[List[String,String]]
    
            :param test_var:            variable to differenciate between test and url call
            :type test_var:             boolean
    
            function to compare old and new input, start node/edge removal and to return updated sets of nodes and edges
        '''
    
        # gets information from previous cunstruction call
        old_obj_input_list , old_edges_list = input_from_json(json_file)
    
        # one global list to save the process of removing unneeded publications and one to save valid edges
        global processed_list, valid_edges
        processed_list = old_obj_input_list
        valid_edges = old_edges_list
    
    
        # get dois from lists to compare for differences
        old_doi_input_list = get_old_input_dois(old_obj_input_list)
        new_doi_input_list = get_new_input_dois(new_doi_input_list, test_var)
    
        # retrieve which publications are already known, removed, inserted
        common_nodes, inserted_nodes, deleted_nodes = doi_listen_vergleichen(old_doi_input_list, new_doi_input_list)
    
        # deletes publications and edges from node_list if publications can no longer be reached
        if (len(deleted_nodes) > 0):
            delete_nodes_and_edges(processed_list, common_nodes, valid_edges)
        
        old_search_depth, old_search_height = update_depth(processed_list, valid_edges, search_depth, search_height, test_var)
        
        if (len(inserted_nodes) > 0):
            connect_old_and_new_input(processed_list, valid_edges, inserted_nodes, old_search_depth, old_search_height, search_depth, search_height, test_var)
    
        return(processed_list, valid_edges)