def runListReferenceBases(self, id_, requestArgs): """ Runs a listReferenceBases request for the specified ID and request arguments. """ compoundId = datamodel.ReferenceCompoundId.parse(id_) referenceSet = self.getDataRepository().getReferenceSet( compoundId.reference_set_id) reference = referenceSet.getReference(id_) start = _parseIntegerArgument(requestArgs, 'start', 0) end = _parseIntegerArgument(requestArgs, 'end', reference.getLength()) if end == 0: # assume meant "get all" end = reference.getLength() if 'pageToken' in requestArgs: pageTokenStr = requestArgs['pageToken'] if pageTokenStr != "": start = _parsePageToken(pageTokenStr, 1)[0] chunkSize = self._maxResponseLength nextPageToken = None if start + chunkSize < end: end = start + chunkSize nextPageToken = str(start + chunkSize) sequence = reference.getBases(start, end) # build response response = protocol.ListReferenceBasesResponse() response.offset = start response.sequence = sequence if nextPageToken is not None: response.next_page_token = nextPageToken return protocol.toJson(response)
def runListReferenceBases(self, id_, requestArgs): """ Runs a listReferenceBases request for the specified ID and request arguments. """ compoundId = datamodel.ReferenceCompoundId.parse(id_) referenceSet = self.getReferenceSet(compoundId.referenceSetId) reference = referenceSet.getReference(id_) start = _parseIntegerArgument(requestArgs, 'start', 0) end = _parseIntegerArgument(requestArgs, 'end', reference.getLength()) if 'pageToken' in requestArgs: pageTokenStr = requestArgs['pageToken'] start = _parsePageToken(pageTokenStr, 1)[0] chunkSize = self._maxResponseLength nextPageToken = None if start + chunkSize < end: end = start + chunkSize nextPageToken = str(start + chunkSize) sequence = reference.getBases(start, end) # build response response = protocol.ListReferenceBasesResponse() response.offset = start response.sequence = sequence response.nextPageToken = nextPageToken return response.toJsonString()
def runListReferenceBases(self, id_, requestArgs): """ Runs a listReferenceBases request for the specified ID and request arguments. """ # parse arguments reference = _safeMapQuery(self._referenceIdMap, id_, exceptions.ObjectWithIdNotFoundException) start = 0 end = datamodel.PysamDatamodelMixin.fastaMax if 'start' in requestArgs: startString = requestArgs['start'] try: start = int(startString) except ValueError: raise exceptions.BadRequestIntegerException( 'start', startString) if 'end' in requestArgs: endString = requestArgs['end'] try: end = int(endString) except ValueError: raise exceptions.BadRequestIntegerException('end', endString) if 'pageToken' in requestArgs: pageTokenStr = requestArgs['pageToken'] start = _parsePageToken(pageTokenStr, 1)[0] chunkSize = self._maxResponseLength # get reference bases gbEnd = min(start + chunkSize, end) sequence = reference.getBases(start, gbEnd) # determine nextPageToken if len(sequence) == chunkSize: nextPageToken = start + chunkSize elif len(sequence) > chunkSize: raise exceptions.ServerError() # should never happen else: nextPageToken = None # build response response = protocol.ListReferenceBasesResponse() response.offset = start response.sequence = sequence response.nextPageToken = nextPageToken return response.toJsonString()
def runListReferenceBases(self, requestJson): """ Runs a listReferenceBases request for the specified ID and request arguments. """ # In the case when an empty post request is made to the endpoint # we instantiate an empty ListReferenceBasesRequest. if not requestJson: request = protocol.ListReferenceBasesRequest() else: try: request = protocol.fromJson(requestJson, protocol.ListReferenceBasesRequest) except protocol.json_format.ParseError: raise exceptions.InvalidJsonException(requestJson) compoundId = datamodel.ReferenceCompoundId.parse(request.reference_id) referenceSet = self.getDataRepository().getReferenceSet( compoundId.reference_set_id) reference = referenceSet.getReference(request.reference_id) start = request.start end = request.end if end == 0: # assume meant "get all" end = reference.getLength() if request.page_token: pageTokenStr = request.page_token start = paging._parsePageToken(pageTokenStr, 1)[0] chunkSize = self._maxResponseLength nextPageToken = None if start + chunkSize < end: end = start + chunkSize nextPageToken = str(start + chunkSize) sequence = reference.getBases(start, end) # build response response = protocol.ListReferenceBasesResponse() response.offset = start response.sequence = sequence if nextPageToken: response.next_page_token = nextPageToken return protocol.toJson(response)