def advanced_search(query, record_type, sandbox): """ 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() # config.get_config(_id=query, sandbox=sandbox) # config.write_config() # elif record_type == 'read-rdf': # config = ConfigManager() # rdf_graph = config.read_config() # print rdf_graph if 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 try: json_file.write(str(data)) except (NameError, TypeError): 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 try: json_file.write(str(data)) except (NameError, TypeError): 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'): if sandbox: search_type(args=['-a', '-s']) else: search_type(args=['-a']) break elif new_instance in ('exit', 'EXIT', 'Exit'): exit(1) else: print('You did not pick an appropriate answer.')