def testSearchVariantAnnotations(self): request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = self.variantAnnotationSetId request.pageSize = self.pageSize request.referenceName = self.referenceName request.referenceId = self.referenceId request.effects = [] request.start = self.start request.end = self.end self.httpClient.searchVariantAnnotations( self.variantAnnotationSetId, referenceName=self.referenceName, start=self.start, end=self.end, effects=[], referenceId=self.referenceId) self.httpClient._runSearchRequest.assert_called_once_with( request, "variantannotations", protocol.SearchVariantAnnotationsResponse) with self.assertRaises(exceptions.BadRequestException): self.httpClient.searchVariantAnnotations( self.variantAnnotationSetId, referenceName=self.referenceName, start=self.start, end=self.end, effects=[{"term": "just a term"}, {"id": "an id"}], referenceId=self.referenceId)
def searchVariantAnnotations(self, variantAnnotationSetId, referenceName=None, referenceId=None, start=None, end=None, effects=[]): """ Returns an iterator over the Annotations fulfilling the specified conditions from the specified AnnotationSet. """ request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSetId request.referenceName = referenceName request.referenceId = referenceId request.start = start request.end = end request.effects = effects for effect in request.effects: if 'id' not in effect: raise exceptions.BadRequestException( "Each ontology term should have an id set") request.pageSize = self._pageSize return self._runSearchRequest( request, "variantannotations", protocol.SearchVariantAnnotationsResponse)
def search_variant_annotations(self, variant_annotation_set_id, reference_name="", reference_id="", start=0, end=0, effects=[]): """ Returns an iterator over the Variant Annotations fulfilling the specified conditions from the specified VariantSet. :param str variant_annotation_set_id: The ID of the :class:`ga4gh.protocol.VariantAnnotationSet` of interest. :param int start: Required. The beginning of the window (0-based, inclusive) for which overlapping variants should be returned. Genomic positions are non-negative integers less than reference length. Requests spanning the join of circular genomes are represented as two requests one on each side of the join (position 0). :param int end: Required. The end of the window (0-based, exclusive) for which overlapping variants should be returned. :param str reference_name: The name of the :class:`ga4gh.protocol.Reference` we wish to return variants from. :return: An iterator over the :class:`ga4gh.protocol.VariantAnnotation` objects defined by the query parameters. :rtype: iter """ request = protocol.SearchVariantAnnotationsRequest() request.variant_annotation_set_id = variant_annotation_set_id request.reference_name = reference_name request.reference_id = reference_id request.start = start request.end = end for effect in effects: request.effects.add().CopyFrom(protocol.OntologyTerm(**effect)) for effect in request.effects: if not effect.id: raise exceptions.BadRequestException( "Each ontology term should have an id set") request.page_size = pb.int(self._page_size) return self._run_search_request( request, "variantannotations", protocol.SearchVariantAnnotationsResponse)
def testVariantAnnotationsSearch(self): dataset = self.dataRepo.getDatasets()[0] variantAnnotationSet = dataset.getVariantAnnotationSets()[0] self.assertIsNotNone(variantAnnotationSet) request = protocol.SearchVariantAnnotationsRequest() path = '/variantannotations/search' request.start = 0 request.end = 1000000 request.pageSize = 1 request.referenceName = "1" request.effects = None request.variantAnnotationSetId = variantAnnotationSet.getId() response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationSetsResponse. \ fromJsonString(response.data) self.assertIsNotNone(responseData.nextPageToken, "Expected more than one page of results") request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 10 request.referenceName = "1" request.effects = [{"id": "ThisIsNotAnEffect"}] response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) self.assertEquals(len(responseData.variantAnnotations), 0, "There should be no results for a nonsense effect") request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 10 request.referenceName = "1" response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) self.assertGreater(len(responseData.variantAnnotations), 0) for ann in responseData.variantAnnotations: self.assertGreater(len(ann.transcriptEffects), 0, ("When no effects are requested ensure " "some transcript effects are still present")) request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 5 request.referenceName = "1" request.effects = [{"id": "SO:0001627"}, {"id": "B4DID"}] response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) responseLength = len(responseData.variantAnnotations) self.assertGreater(responseLength, 0, "There should be some results for a known effect") for ann in responseData.variantAnnotations: effectPresent = False for effect in ann.transcriptEffects: for featureType in effect.effects: if featureType.id in map(lambda e: e['id'], request.effects): effectPresent = True self.assertEquals(True, effectPresent, "The ontology term should appear at least once") request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 5 request.referenceName = "1" request.effects = [{"id": "B4DID"}, {"id": "SO:0001627"}] response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) self.assertEqual(len(responseData.variantAnnotations), responseLength, "Order shall not affect results") for ann in responseData.variantAnnotations: effectPresent = False for effect in ann.transcriptEffects: for featureType in effect.effects: if featureType.id in map(lambda e: e['id'], request.effects): effectPresent = True self.assertEquals(True, effectPresent, "The ontology term should appear at least once") request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 5 request.referenceName = "1" request.effects = [{"id": "SO:0001627"}] response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) self.assertGreater( len(responseData.variantAnnotations), 0, "There should be some results for a good effect ID") for ann in responseData.variantAnnotations: effectPresent = False for effect in ann.transcriptEffects: for featureType in effect.effects: if featureType.id in map(lambda e: e['id'], request.effects): effectPresent = True self.assertEquals(True, effectPresent, "The ontology term should appear at least once") request = protocol.SearchVariantAnnotationsRequest() request.variantAnnotationSetId = variantAnnotationSet.getId() request.start = 0 request.end = 10 request.referenceName = "1" request.effects = [{"id": "SO:0001627"}, {"id": "SO:0001791"}] response = self.sendJsonPostRequest(path, request.toJsonString()) responseData = protocol.SearchVariantAnnotationsResponse. \ fromJsonString(response.data) self.assertGreater(len(responseData.variantAnnotations), 0)