Beispiel #1
0
def basic_search(query):
    """ Function for initializing a search for an orcid id.

    Parameters
    ----------
    :param query: string
        Query built from user input.

    Returns
    -------
    :returns: no return.
    """

    # Initialize and populate all variables and dictionaries
    search_obj = OrcidSearchResults(sandbox)
    search_obj.basic_search(query)
    actual_total = search_obj.actual_total_results
    total_results = search_obj.total_results
    # orcid_id = search_obj.orcid_id

    # Print results
    search_obj.print_basic()

    # Print total results if actual results are above 100
    if total_results < actual_total:
        print 'Actual Total Results: {}'.format(actual_total)
        print('')

    # Ask user if they would like to search again.
    while True:
        new_instance = click.prompt('Would you like to search again [y/N]?', default='N', show_default=False)
        print('')

        if new_instance in ('y', 'Y', 'yes', 'YES', 'Yes'):
            search_type(args = ['-b'])
            break
        elif new_instance in ('n', 'N', 'no', 'NO', 'No'):
            exit(1)
        else:
            print('You did not pick an appropriate answer.')
Beispiel #2
0
def advanced_search(query, record_type):
    """ Function for initializing an advanced search for an orcid id.  Utilizes OrcidSearchResults() class
        from search.py

    Parameters
    ----------
    :param query: string
        Orcid ID inputted by user
    :param record_type: string
        User selected record_type that they want to display.  Must have corresponding put-code

    Returns
    -------
    :returns: no return.
        Will write to file for a 'activities' record, or print record to screen for all other records.
        Will prompt user to see if they would like to write customer records to file.

        A large amount of information can be gathered for a 'activities' record_type.  The only option
        allowed at this time is for the JSON output to be written to a JSON file.
    """
    search_obj = OrcidSearchResults(sandbox)

    # Will be 'not None' only if record type is other than 'activities'
    if record_type == 'write-rdf':
        config = ConfigManager(orcid_id=query, sandbox=sandbox)
        config.write_config()
    elif record_type == 'read-rdf':
        config = ConfigManager(orcid_id=query, sandbox=sandbox)
        rdf_graph = config.read_config()
        print rdf_graph
    elif record_type is not None:
        put_code = click.prompt('Please enter the put-code (must match record type)')
        results = search_obj.advanced_search(query, record_type, put_code)
        print('')
        print(json.dumps(results, sort_keys=True, indent=4, ensure_ascii=False))

        # Ask user if they would like to send this information to file
        while True:
            send_to_file = click.prompt('Would you like to send this output to a file [y/N]?', default='N', show_default=False)

            if send_to_file in ('y', 'Y', 'yes', 'YES', 'Yes'):
                with io.open(query + '_' + record_type + '_' + put_code + '.json', 'w', encoding='utf8') \
                        as json_file:
                    data = json.dumps(results, json_file, sort_keys=True, indent=4, ensure_ascii=False)
                    # unicode(data) auto-decodes data to unicode if str
                    json_file.write(unicode(data))
                break
            elif send_to_file in ('n', 'N', 'no', 'NO', 'No'):
                break
            else:
                print('You did not pick an appropriate answer.')
    else:
        # When 'activities' (option 1 - summary) is selected, prints to file
        results = search_obj.advanced_search(query)

        home_path = expanduser("~")
        dir_path = home_path + "/.sc/"
        filename = query + '.json'
        if os.path.exists(dir_path):
            config_path = dir_path + filename
        else:
            os.mkdir(home_path + "/.sc/")
            config_path = dir_path + filename

        with io.open(config_path, 'w', encoding='utf8') as json_file:
            data = json.dumps(results, json_file, sort_keys=True, indent=4, ensure_ascii=False)
            # unicode(data) auto-decodes data to unicode if str
            json_file.write(unicode(data))

    # Ask user if they would like to go back to the advanced search selection menu
    while True:
        new_instance = click.prompt('Back to \'Selection\' menu [y/EXIT]?', default='EXIT', show_default=False)
        print('')

        if new_instance in ('y', 'Y', 'yes', 'YES', 'Yes'):
            search_type(args = ['-a'])
            break
        elif new_instance in ('exit', 'EXIT', 'Exit'):
            exit(1)
        else:
            print('You did not pick an appropriate answer.')
Beispiel #3
0
def basic_search_config(query):
    """ Function for initializing a search for an orcid id, and then creates a RDF
        configuration file automatically.

    Parameters
    ----------
    :param query: string
        Query built from user input.

    Returns
    -------
    :returns: no return.
    """

    # Initialize and populate all variables and dictionaries
    search_obj = OrcidSearchResults(sandbox)
    search_obj.basic_search(query)
    actual_total = search_obj.actual_total_results
    total_results = search_obj.total_results
    # orcid_id = search_obj.orcid_id

    # Print results
    search_obj.print_basic_alt()

    # Print total results if actual results are above 100
    if total_results < actual_total:
        print 'Actual Total Results: {}'.format(actual_total)
        print('')

    # Get list of Orcid ID's from results
    id_list = search_obj.orcid_id

    # Write config if only one result was found
    if total_results == 1:
        orcid_id = id_list[0]
        config = ConfigManager(orcid_id=orcid_id, sandbox=sandbox)
        config.write_config()

    # If no results are found
    elif total_results == 0:
        print("No results where found. Please try again.\n")
        search_type(args = ['-c'])

    # Allow user to select Orcid profile if multiple results are found
    else:
        id_dict = dict()
        # Get list of Orcid ID's and correspond count with ID
        for i, id in enumerate(id_list):
            id_dict[i + 1] = id

        selected = None
        while not selected:
            try:
                selected = click.prompt('Select the result # of the record (Type "N" for another search, "Exit" to abort)')
                print("")
                orcid_id = id_dict[int(selected)]
                config = ConfigManager(orcid_id=orcid_id, sandbox=sandbox)
                config.write_config()
            except (KeyError):
                print('That is not a valid selection.  Please try again.\n')
                selected = None
            except (ValueError):
                if selected in ('N', 'n'):
                    search_type(args = ['-c'])
                elif selected in ('exit', 'Exit', 'EXIT'):
                    exit()
                else:
                    print('That is not a valid selection.  Please try again.\n')
                    selected = None