def testCreatingAlreadyExistingGeneset(self): """ Testing that if we try to create an already created geneset and annotations have not changed, fail gracefully. """ selected_go_term = self.go_terms[2] geneset_response = load_to_tribe( self.main_config_file, selected_go_term, self.tribe_token, prefer_update=True) self.assertEqual(geneset_response['title'], 'GO-BP-0000005:premier league') self.assertEqual(geneset_response['tip_item_count'], 1) # Do not change the annotations, just try to save to Tribe again response = load_to_tribe( self.main_config_file, selected_go_term, self.tribe_token, prefer_update=True) self.assertEqual(response['status_code'], 409) self.assertEqual( response['content'], 'There is already a geneset with the slug ' '"go0000005-h**o-sapiens" and annotations {\'A0A024R214\': []} ' 'saved in Tribe. A new geneset has not been saved.')
def testCreateNewKEGGVersion(self): """ Test adding one gene to an existing KEGG set """ selected_kegg_term = self.kegg_sets[1] geneset_response = load_to_tribe(self.main_config_file, selected_kegg_term, self.tribe_token, prefer_update=True) self.assertEqual( geneset_response['title'], 'KEGG-Pathway-hsa00020: Citrate cycle ' '(TCA cycle) - H**o sapiens (human)') self.assertEqual(geneset_response['tip_item_count'], 10) # Adding random gene 5432 selected_kegg_term['annotations'] = { 1431: [], 1737: [], 1738: [], 1743: [], 2271: [], 3417: [], 3418: [], 3419: [], 3420: [], 3421: [], 5432: [] } version_response = load_to_tribe(self.main_config_file, selected_kegg_term, self.tribe_token, prefer_update=True) self.assertEqual(len(version_response['annotations']), 11)
def testLoadGOToTribe(self): geneset_response = load_to_tribe(self.main_config_file, self.go_terms[0], self.tribe_token) self.assertEqual(geneset_response['title'], 'GO-BP-0000006:la liga') self.assertEqual(geneset_response['tip_item_count'], 3)
def testLoadKEGGToTribe(self): geneset_response = load_to_tribe(self.main_config_file, self.kegg_sets[0], self.tribe_token) self.assertEqual( geneset_response['title'], 'KEGG-Pathway-hsa00010: Glycolysis / ' 'Gluconeogenesis - H**o sapiens (human)') self.assertEqual(geneset_response['tip_item_count'], 10)
def testCreateNewDOVersion(self): """ Test adding one term and removing one term from an existing DO term """ selected_do_term = self.do_terms[1] geneset_response = load_to_tribe( self.main_config_file, selected_do_term, self.tribe_token, prefer_update=True) self.assertEqual(geneset_response['title'], 'DO-0014667:disease of metabolism') self.assertEqual(geneset_response['tip_item_count'], 6) # Remove gene 5468, add random gene 4321 selected_do_term['annotations'] = { 4160: [], 8431: [], 51738: [], 5443: [], 6492: [], 4321: []} version_response = load_to_tribe( self.main_config_file, selected_do_term, self.tribe_token, prefer_update=True) self.assertEqual(len(version_response['annotations']), 6)
def testCreateNewGOVersion(self): """ Test removing one gene from an existing GO term """ selected_go_term = self.go_terms[1] geneset_response = load_to_tribe( self.main_config_file, selected_go_term, self.tribe_token, prefer_update=True) self.assertEqual(geneset_response['title'], 'GO-BP-0000007:european team') self.assertEqual(geneset_response['tip_item_count'], 4) # Remove gene 'A0A024R1V6' selected_go_term['annotations'] = { 'A0A024R214': [], 'A0A024QZP7': [], 'A0A024R216': []} version_response = load_to_tribe( self.main_config_file, selected_go_term, self.tribe_token, prefer_update=True) self.assertEqual(len(version_response['annotations']), 3)
def testLoadDOToTribe(self): geneset_response = load_to_tribe(self.main_config_file, self.do_terms[0], self.tribe_token) self.assertEqual(geneset_response['title'], 'DO-374:nutrition disease') self.assertEqual(geneset_response['tip_item_count'], 6)
def main(ini_file_path): if not os.path.isfile(ini_file_path): logger.error('Main INI configuration file not found in this path: ' + ini_file_path) sys.exit(1) main_config_file = SafeConfigParser() main_config_file.read(ini_file_path) if not main_config_file.has_option('download_folder', 'BASE_DOWNLOAD_FOLDER'): logger.error('Main configuration file must have a "download_folder" ' 'section, which must contain a "BASE_DOWNLOAD_FOLDER" ' 'parameter where download folders will be created for ' 'each species. Common annotation files for all species' ' will also be saved here.') sys.exit(1) download_folder = main_config_file.get('download_folder', 'BASE_DOWNLOAD_FOLDER') secrets_file = None if main_config_file.has_option('main', 'SECRETS_FILE'): secrets_file = main_config_file.get('main', 'SECRETS_FILE') process_to = main_config_file.get('main', 'PROCESS_TO') if main_config_file.has_option('Tribe parameters', 'TRIBE_PUBLIC'): tribe_public = main_config_file.getboolean('Tribe parameters', 'TRIBE_PUBLIC') else: tribe_public = False if main_config_file.has_option('Tribe parameters', 'PREFER_UPDATE'): prefer_update = main_config_file.getboolean('Tribe parameters', 'PREFER_UPDATE') else: prefer_update = False if main_config_file.has_option('Tribe parameters', 'TRIBE_URL'): tribe_url = main_config_file.get('Tribe parameters', 'TRIBE_URL') else: tribe_url = False species_dir = main_config_file.get('species files', 'SPECIES_DIR') species_files = main_config_file.get('species files', 'SPECIES_FILES') # Make a list of the locations of all species files: species_files = [filename.strip() for filename in species_files.split(',')] for species_file in species_files: # Build full species_file path species_file = os.path.join(species_dir, species_file) all_org_genesets = process_all_organism_genesets( species_file, download_folder, secrets_file) if process_to == 'Tribe': if not tribe_url: logger.error('"Tribe parameters" section needs "TRIBE_URL" ' 'option to be able to save to Tribe.') sys.exit(1) tribe_token, creator_username = get_oauth_token( tribe_url, secrets_file) if prefer_update: genesets_to_save = get_all_changed_genesets( species_file, all_org_genesets, tribe_token, creator_username) if genesets_to_save == []: logger.info( 'Annotations have not changed in any gene sets' ' for species_file %s.', species_file) else: genesets_to_save = all_org_genesets logger.info('Starting to save %s gene sets to Tribe', len(genesets_to_save)) for geneset in genesets_to_save: geneset['public'] = tribe_public load_to_tribe(ini_file_path, geneset, tribe_token, creator_username, prefer_update=prefer_update) logger.info('Finished saving gene sets to Tribe') elif process_to == 'JSON file': json_filepath = main_config_file.get('main', 'JSON_FILE') with open(json_filepath, "w") as outfile: json.dump(all_org_genesets, outfile, indent=2)