def fetch_reads_refs_from_sampleset(ref, ws_url, srv_wiz_url): """ From the given object ref, return a list of all reads objects that are a part of that object. E.g., if ref is a ReadsSet, return a list of all PairedEndLibrary or SingleEndLibrary refs that are a member of that ReadsSet. This is returned as a list of dictionaries as follows: { "ref": reads object reference, "condition": condition string associated with that reads object, "name": reads object name (needed for saving an AlignmentSet) } The only one required is "ref", all other keys may or may not be present, based on the reads object or object type in initial ref variable. E.g. a RNASeqSampleSet might have condition info for each reads object, but a single PairedEndLibrary may not have that info. If ref is already a Reads library, just returns a list with ref as a single element. """ obj_type = get_object_type(ref, ws_url) refs = list() if "KBaseSets.ReadsSet" in obj_type or "KBaseRNASeq.RNASeqSampleSet" in obj_type: print("Looking up reads references in ReadsSet object") set_client = SetAPI(srv_wiz_url) reads_set = set_client.get_reads_set_v1({ "ref": ref, "include_item_info": 0, "include_set_item_ref_paths": 1 }) print("Got results from ReadsSet object") pprint(reads_set) ref_list = [r["ref_path"] for r in reads_set["data"]["items"]] reads_names = get_object_names(ref_list, ws_url) for reads in reads_set["data"]["items"]: ref = reads["ref_path"] refs.append({ "ref": ref, "condition": reads["label"], "name": reads_names[ref] }) elif ("KBaseAssembly.SingleEndLibrary" in obj_type or "KBaseFile.SingleEndLibrary" in obj_type or "KBaseAssembly.PairedEndLibrary" in obj_type or "KBaseFile.PairedEndLibrary" in obj_type): refs.append({ "ref": ref, "name": get_object_names([ref], ws_url)[ref] }) else: raise ValueError("Unable to fetch reads reference from object {} " "which is a {}".format(ref, obj_type)) return refs
def fetch_reads_refs_from_sampleset(ref, ws_url, callback_url, params): """ From the given object ref, return a list of all reads objects that are a part of that object. E.g., if ref is a ReadsSet, return a list of all PairedEndLibrary or SingleEndLibrary refs that are a member of that ReadsSet. This is returned as a list of dictionaries as follows: { "ref": reads object reference, "condition": condition string associated with that reads object } The only one required is "ref", all other keys may or may not be present, based on the reads object or object type in initial ref variable. E.g. a RNASeqSampleSet might have condition info for each reads object, but a single PairedEndLibrary may not have that info. If ref is already a Reads library, just returns a list with ref as a single element. """ obj_type = get_object_type(ref, ws_url) ws = Workspace(ws_url) refs = list() refs_for_ws_info = list() if "KBaseSets.ReadsSet" in obj_type: print("Looking up reads references in ReadsSet object") set_client = SetAPI(callback_url) reads_set = set_client.get_reads_set_v1({ "ref": ref, "include_item_info": 0 }) for reads in reads_set["data"]["items"]: refs.append({"ref": reads["ref"], "condition": reads["label"]}) refs_for_ws_info.append({'ref': reads['ref']}) elif "KBaseRNASeq.RNASeqSampleSet" in obj_type: print("Looking up reads references in RNASeqSampleSet object") sample_set = ws.get_objects2({"objects": [{ "ref": ref }]})["data"][0]["data"] for i in range(len(sample_set["sample_ids"])): refs.append({ "ref": sample_set["sample_ids"][i], "condition": sample_set["condition"][i] }) refs_for_ws_info.append({'ref': sample_set['sample_ids'][i]}) elif ("KBaseAssembly.SingleEndLibrary" in obj_type or "KBaseFile.SingleEndLibrary" in obj_type or "KBaseFile.SingleEndLibrary-2.0" in obj_type or "KBaseFile.SingleEndLibrary-2.1" in obj_type or "KBaseAssembly.PairedEndLibrary" in obj_type or "KBaseFile.PairedEndLibrary" in obj_type or "KBaseFile.PairedEndLibrary-2.0" in obj_type or "KBaseFile.PairedEndLibrary-2.1" in obj_type): refs.append({"ref": ref}) refs_for_ws_info.append({'ref': ref}) else: raise ValueError("Unable to fetch reads reference from object {} " "which is a {}".format(ref, obj_type)) # get object info so we can name things properly infos = ws.get_object_info3({'objects': refs_for_ws_info})['infos'] name_ext = '_alignment' if ('alignment_suffix' in params and params['alignment_suffix'] is not None): ext = params['alignment_suffix'].replace(' ', '') if ext: name_ext = ext unique_names = get_unique_names(infos) for k in range(0, len(refs)): refs[k]['info'] = infos[k] name = unique_names[k] + name_ext refs[k]['alignment_output_name'] = name return refs