示例#1
0
 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)
示例#2
0
文件: client.py 项目: ljishen/server
 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)
示例#3
0
    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)
示例#4
0
    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)