Example #1
0
    def testVariantsSearch(self):
        dataset = self.backend.getDatasets()[0]
        variantSet = dataset.getVariantSets()[0]
        referenceName = '1'

        request = protocol.SearchVariantsRequest()
        request.referenceName = referenceName
        request.start = 0
        request.end = 0
        request.variantSetId = variantSet.getId()

        # Request windows is too small, no results
        path = '/variants/search'
        responseData = self.sendSearchRequest(path, request,
                                              protocol.SearchVariantsResponse)
        self.assertIsNone(responseData.nextPageToken)
        self.assertEqual([], responseData.variants)

        # Larger request window, expect results
        request.end = 2**16
        responseData = self.sendSearchRequest(path, request,
                                              protocol.SearchVariantsResponse)
        self.assertTrue(
            protocol.SearchVariantsResponse.validate(
                responseData.toJsonDict()))
        self.assertGreater(len(responseData.variants), 0)

        # Verify all results are in the correct range, set and reference
        for variant in responseData.variants:
            self.assertGreaterEqual(variant.start, 0)
            self.assertLessEqual(variant.end, 2**16)
            self.assertEqual(variant.variantSetId, variantSet.getId())
            self.assertEqual(variant.referenceName, referenceName)
Example #2
0
    def searchVariants(self,
                       variantSetId,
                       start=None,
                       end=None,
                       referenceName=None,
                       callSetIds=None):
        """
        Returns an iterator over the Variants fulfilling the specified
        conditions from the specified VariantSet.

        :param str variantSetId: The ID of the
            :class:`ga4gh.protocol.VariantSet` of interest.
        :param int start: TODO
        :param int end: TODO
        :param str referenceName: The name of the
            :class:`ga4gh.protocol.Reference` we wish to return variants from.
        :param list callSetIds: TODO
        :return: An iterator over the :class:`ga4gh.protocol.Variant` objects
            defined by the query parameters.
        :rtype: iter
        """
        request = protocol.SearchVariantsRequest()
        request.referenceName = referenceName
        request.start = start
        request.end = end
        request.variantSetId = variantSetId
        request.callSetIds = callSetIds
        request.pageSize = self._pageSize
        return self._runSearchRequest(request, "variants",
                                      protocol.SearchVariantsResponse)
 def testSearchVariants(self):
     variantSetIds = [
         variantSet.id for variantSet in self.getVariantSets(pageSize=1)
     ]
     request = protocol.SearchVariantsRequest()
     request.variantSetId = variantSetIds[0]
     responseStr = self._backend.runSearchVariants(request.toJsonString())
     response = protocol.SearchVariantsResponse.fromJsonString(responseStr)
     self.assertTrue(isinstance(response, protocol.SearchVariantsResponse))
Example #4
0
 def sendVariantsSearch(self):
     response = self.sendVariantSetsSearch()
     variantSets = protocol.SearchVariantSetsResponse().fromJsonString(
         response.data).variantSets
     request = protocol.SearchVariantsRequest()
     request.variantSetId = variantSets[0].id
     request.referenceName = "1"
     request.start = 0
     request.end = 1
     return self.sendPostRequest('/variants/search', request)
Example #5
0
 def testSearchVariants(self):
     request = protocol.SearchVariantsRequest()
     request.referenceName = self.referenceName
     request.start = self.start
     request.end = self.end
     request.variantSetId = self.variantSetId
     request.callSetIds = self.callSetIds
     request.pageSize = self.pageSize
     self.httpClient.searchVariants(
         self.variantSetId, start=self.start, end=self.end,
         referenceName=self.referenceName, callSetIds=self.callSetIds)
     self.httpClient._runSearchRequest.assert_called_once_with(
         request, "variants", protocol.SearchVariantsResponse)
Example #6
0
def _heavyQuery(variantSetId, callSetIds):
    """
    Very heavy query: calls for the specified list of callSetIds
    on chromosome 2 (11 pages, 90 seconds to fetch the entire thing
    on a high-end desktop machine)
    """
    request = protocol.SearchVariantsRequest()
    request.reference_name = '2'
    request.variant_set_id = variantSetId
    for callSetId in callSetIds:
        request.call_set_ids.add(callSetId)
    request.page_size = 100
    request.end = 100000
    return request
Example #7
0
def runDemo():
    httpClient = client.HttpClient("http://server:80/current")
    request = protocol.SearchVariantsRequest()
    request.variantSetIds = ["1kg-phase1"]
    request.referenceName = "2"
    request.start = 33100
    request.end = 34000
    for variant in httpClient.searchVariants(request):
        print(variant.referenceName,
              variant.start,
              variant.end,
              variant.referenceBases,
              variant.alternateBases,
              sep="\t")
Example #8
0
 def getVariants(
         self, variantSetIds, referenceName, start=0, end=2 ** 32,
         pageSize=100, callSetIds=None):
     """
     Returns an iterator over the specified list of variants,
     abstracting out paging details.
     """
     request = protocol.SearchVariantsRequest()
     request.variantSetIds = variantSetIds
     request.referenceName = referenceName
     request.start = start
     request.end = end
     request.callSetIds = callSetIds
     return self.resultIterator(
         request, pageSize, self._backend.searchVariants,
         protocol.SearchVariantsResponse, "variants")
Example #9
0
File: cli.py Project: afirth/server
 def createSearchVariantsRequest(self):
     request = protocol.SearchVariantsRequest()
     request.referenceName = self.args.referenceName
     request.variantName = self.args.variantName
     request.start = self.args.start
     request.end = self.args.end
     if self.usingWorkaroundsFor(client.HttpClient.workaroundGoogle):
         request.maxCalls = self.args.maxCalls
     if self.args.callSetIds == []:
         request.callSetIds = []
     elif self.args.callSetIds == '*':
         # For v0.5.1 the semantics are for the empty list to correspond
         # to all calls. This should be set to None for v0.6
         request.callSetIds = []
     else:
         request.callSetIds = self.args.callSetIds.split(",")
     setCommaSeparatedAttribute(request, self.args, 'variantSetIds')
     return request
Example #10
0
    def testGetVariant(self):
        # get a variant from the search method
        referenceName = '1'
        start = 0
        dataset = self.backend.getDatasets()[0]
        variantSet = dataset.getVariantSets()[0]
        request = protocol.SearchVariantsRequest()
        request.variantSetId = variantSet.getId()
        request.referenceName = referenceName
        request.start = start
        request.end = 2**16
        path = '/variants/search'
        responseData = self.sendSearchRequest(path, request,
                                              protocol.SearchVariantsResponse)
        variants = responseData.variants[:10]

        # get 'the same' variant using the get method
        for variant in variants:
            path = '/variants'
            responseObject = self.sendGetObject(path, variant.id,
                                                protocol.Variant)
            self.assertEqual(responseObject, variant)
Example #11
0
    def searchVariants(self,
                       variantSetId,
                       start=None,
                       end=None,
                       referenceName=None,
                       callSetIds=None):
        """
        Returns an iterator over the Variants fulfilling the specified
        conditions from the specified VariantSet.

        :param str variantSetId: The ID of the
            :class:`ga4gh.protocol.VariantSet` 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 referenceName: The name of the
            :class:`ga4gh.protocol.Reference` we wish to return variants from.
        :param list callSetIds: Only return variant calls which belong to call
            sets with these IDs. If an empty array, returns variants without
            any call objects. If null, returns all variant calls.

        :return: An iterator over the :class:`ga4gh.protocol.Variant` objects
            defined by the query parameters.
        :rtype: iter
        """
        request = protocol.SearchVariantsRequest()
        request.referenceName = referenceName
        request.start = start
        request.end = end
        request.variantSetId = variantSetId
        request.callSetIds = callSetIds
        request.pageSize = self._pageSize
        return self._runSearchRequest(request, "variants",
                                      protocol.SearchVariantsResponse)
Example #12
0
    def testVariantsSearch(self):
        expectedId = self.variantSetIds[0]
        referenceName = '1'

        request = protocol.SearchVariantsRequest()
        request.referenceName = referenceName
        request.start = 0
        request.end = 0
        request.variantSetId = expectedId

        # Request windows is too small, no results
        path = utils.applyVersion('/variants/search')
        response = self.sendJsonPostRequest(path, request.toJsonString())
        self.assertEqual(200, response.status_code)
        responseData = protocol.SearchVariantsResponse.fromJsonString(
            response.data)
        self.assertIsNone(responseData.nextPageToken)
        self.assertEqual([], responseData.variants)

        # Larger request window, expect results
        request.end = 2**16
        path = utils.applyVersion('/variants/search')
        response = self.sendJsonPostRequest(path, request.toJsonString())
        self.assertEqual(200, response.status_code)
        responseData = protocol.SearchVariantsResponse.fromJsonString(
            response.data)
        self.assertTrue(
            protocol.SearchVariantsResponse.validate(
                responseData.toJsonDict()))
        self.assertGreater(len(responseData.variants), 0)

        # Verify all results are in the correct range, set and reference
        for variant in responseData.variants:
            self.assertGreaterEqual(variant.start, 0)
            self.assertLessEqual(variant.end, 2**16)
            self.assertEqual(variant.variantSetId, expectedId)
            self.assertEqual(variant.referenceName, referenceName)
Example #13
0
 def setUp(self):
     self.request = protocol.SearchVariantsRequest()
     self.backend = backend.SimulatedBackend()
     self.dataset = self.backend.getDatasets()[0]
 def setUp(self):
     self.request = protocol.SearchVariantsRequest()
     self.backend = backend.SimulatedBackend()
     self.datasetId = self.backend.getDatasetIds()[0]
     self.dataset = self.backend.getDataset(self.datasetId)
     self.variantSetLocalId = 'variantSet'
Example #15
0
 def setUp(self):
     self.request = protocol.SearchVariantsRequest()
     self.backend = backend.SimulatedBackend()
     self.datasetId = self.backend.getDatasetIds()[0]
     self.variantSetId = "{}:variantSetId".format(self.datasetId)
 def setUp(self):
     self.request = protocol.SearchVariantsRequest()
     self.backend = backend.Backend(datarepo.SimulatedDataRepository())
     self.dataset = self.backend.getDataRepository().getDatasets()[0]