Пример #1
0
 def runSearchRequest(self, requestStr, requestClass, responseClass,
                      objectGenerator):
     """
     Runs the specified request. The request is a string containing
     a JSON representation of an instance of the specified requestClass.
     We return a string representation of an instance of the specified
     responseClass in JSON format. Objects are filled into the page list
     using the specified object generator, which must return
     (object, nextPageToken) pairs, and be able to resume iteration from
     any point using the nextPageToken attribute of the request object.
     """
     self.startProfile()
     try:
         request = protocol.fromJson(requestStr, requestClass)
     except protocol.json_format.ParseError:
         raise exceptions.InvalidJsonException(requestStr)
     # TODO How do we detect when the page size is not set?
     if not request.page_size:
         request.page_size = self._defaultPageSize
     if request.page_size < 0:
         raise exceptions.BadPageSizeException(request.page_size)
     responseBuilder = protocol.SearchResponseBuilder(
         responseClass, request.page_size, self._maxResponseLength)
     nextPageToken = None
     for obj, nextPageToken in objectGenerator(request):
         responseBuilder.addValue(obj)
         if responseBuilder.isFull():
             break
     responseBuilder.setNextPageToken(nextPageToken)
     responseString = responseBuilder.getSerializedResponse()
     self.endProfile()
     return responseString
Пример #2
0
 def testPageSizeExactFill(self):
     responseClass = protocol.SearchVariantsResponse
     valueClass = protocol.Variant
     for pageSize in range(1, 10):
         builder = protocol.SearchResponseBuilder(responseClass, pageSize,
                                                  2**32)
         self.assertEqual(builder.getPageSize(), pageSize)
         while not builder.isFull():
             builder.addValue(self.getTypicalInstance(valueClass))
         instance = responseClass.fromJsonString(builder.getJsonString())
         valueList = getattr(instance, responseClass.getValueListName())
         self.assertEqual(len(valueList), pageSize)
Пример #3
0
 def testNextPageToken(self):
     responseClass = protocol.SearchVariantsResponse
     builder = protocol.SearchResponseBuilder(responseClass, 100, 2**32)
     # If not set, pageToken should be None
     self.assertIsNone(builder.getNextPageToken())
     instance = responseClass.fromJsonString(builder.getJsonString())
     self.assertIsNone(instance.nextPageToken)
     # page tokens can be None or any string.
     for nextPageToken in [None, "", "string"]:
         builder.setNextPageToken(nextPageToken)
         self.assertEqual(nextPageToken, builder.getNextPageToken())
         instance = responseClass.fromJsonString(builder.getJsonString())
         self.assertEqual(nextPageToken, instance.nextPageToken)
Пример #4
0
 def testNextPageToken(self):
     responseClass = protocol.SearchVariantsResponse
     builder = protocol.SearchResponseBuilder(responseClass, 100, 2**32)
     # If not set, pageToken should be empty string
     self.assertIsNone(builder.getNextPageToken())
     instance = protocol.fromJson(builder.getSerializedResponse(),
                                  responseClass)
     self.assertEqual(instance.next_page_token, "")
     # page tokens can be any string.
     for nextPageToken in ["", "string"]:
         builder.setNextPageToken(nextPageToken)
         self.assertEqual(nextPageToken, builder.getNextPageToken())
         instance = protocol.fromJson(builder.getSerializedResponse(),
                                      responseClass)
         self.assertEqual(nextPageToken, instance.next_page_token)
Пример #5
0
 def testMaxResponseLengthOverridesPageSize(self):
     responseClass = protocol.SearchVariantsResponse
     valueClass = protocol.Variant
     typicalValue = self.getTypicalInstance(valueClass)
     typicalValueLength = len(typicalValue.toJsonString())
     for numValues in range(1, 10):
         maxResponseLength = numValues * typicalValueLength
         builder = protocol.SearchResponseBuilder(responseClass, 1000,
                                                  maxResponseLength)
         self.assertEqual(maxResponseLength, builder.getMaxResponseLength())
         while not builder.isFull():
             builder.addValue(typicalValue)
         instance = responseClass.fromJsonString(builder.getJsonString())
         valueList = getattr(instance, responseClass.getValueListName())
         self.assertEqual(len(valueList), numValues)
Пример #6
0
 def testIntegrity(self):
     # Verifies that the values we put in are exactly what we get
     # back across all subclasses of SearchResponse
     for class_ in [
             responseClass for _, _, responseClass in protocol.postMethods
     ]:
         instance = class_()
         valueList = getattr(instance, getValueListName(class_))
         valueList.add()
         builder = protocol.SearchResponseBuilder(class_, len(valueList),
                                                  2**32)
         for value in valueList:
             builder.addValue(value)
         builder.setNextPageToken(instance.next_page_token)
         otherInstance = protocol.fromJson(builder.getSerializedResponse(),
                                           class_)
         self.assertEqual(instance, otherInstance)
Пример #7
0
 def testIntegrity(self):
     # Verifies that the values we put in are exactly what we get
     # back across all subclasses of SearchResponse
     for class_ in protocol.getProtocolClasses(protocol.SearchResponse):
         instances = [
             self.getTypicalInstance(class_),
             self.getRandomInstance(class_)
         ]
         for instance in instances:
             valueList = getattr(instance, class_.getValueListName())
             builder = protocol.SearchResponseBuilder(
                 class_, len(valueList), 2**32)
             for value in valueList:
                 builder.addValue(value)
             builder.setNextPageToken(instance.nextPageToken)
             otherInstance = class_.fromJsonString(builder.getJsonString())
             self.assertEqual(instance, otherInstance)
Пример #8
0
 def testMaxBufferSizeOverridesPageSize(self):
     responseClass = protocol.SearchVariantsResponse
     typicalValue = protocol.Variant()
     # We have to put some values in here or it will have zero length.
     typicalValue.start = 1
     typicalValue.end = 2
     typicalValue.reference_bases = "AAAAAAAA"
     typicalValueLength = typicalValue.ByteSize()
     for numValues in range(1, 10):
         maxBufferSize = numValues * typicalValueLength
         builder = protocol.SearchResponseBuilder(responseClass, 1000,
                                                  maxBufferSize)
         self.assertEqual(maxBufferSize, builder.getMaxBufferSize())
         while not builder.isFull():
             builder.addValue(typicalValue)
         instance = protocol.fromJson(builder.getSerializedResponse(),
                                      responseClass)
         valueList = getattr(instance, getValueListName(responseClass))
         self.assertEqual(len(valueList), numValues)
Пример #9
0
 def testPageSizeOverflow(self):
     # Verifies that the page size behaviour is correct when we keep
     # filling after full is True.
     responseClass = protocol.SearchVariantsResponse
     valueClass = protocol.Variant
     for pageSize in range(1, 10):
         builder = protocol.SearchResponseBuilder(responseClass, pageSize,
                                                  2**32)
         self.assertEqual(builder.getPageSize(), pageSize)
         self.assertFalse(builder.isFull())
         for listLength in range(1, 2 * pageSize):
             builder.addValue(self.getTypicalInstance(valueClass))
             instance = responseClass.fromJsonString(
                 builder.getJsonString())
             valueList = getattr(instance, responseClass.getValueListName())
             self.assertEqual(len(valueList), listLength)
             if listLength < pageSize:
                 self.assertFalse(builder.isFull())
             else:
                 self.assertTrue(builder.isFull())