Пример #1
0
    def testMultiple(self):
        buf = io.BytesIO()
        chunked.Write(buf, b"foo")
        chunked.Write(buf, b"bar")
        chunked.Write(buf, b"quux")

        buf.seek(0, io.SEEK_SET)
        self.assertEqual(list(chunked.ReadAll(buf)), [b"foo", b"bar", b"quux"])
Пример #2
0
    def testMultipleEmptyChunks(self):
        buf = io.BytesIO()
        chunked.Write(buf, b"")
        chunked.Write(buf, b"")
        chunked.Write(buf, b"")

        buf.seek(0, io.SEEK_SET)
        self.assertEqual(chunked.Read(buf), b"")
        self.assertEqual(chunked.Read(buf), b"")
        self.assertEqual(chunked.Read(buf), b"")
        self.assertIsNone(chunked.Read(buf))
Пример #3
0
def Serialize(
    stream,
    chunk_size=DEFAULT_CHUNK_SIZE,
):
    """Serializes a stream of data to the stream of chunks.

  Args:
    stream: A stream of data to serialize.
    chunk_size: An (optional) approximate size of a chunk in bytes. Every non-
      final chunk will be slightly bigger than the specified number, but this
      should be negligible.

  Yields:
    Serialized chunks (in the gzchunked format).
  """
    while True:
        buf = io.BytesIO()
        buf_entry_count = 0

        with gzip.GzipFile(fileobj=buf, mode="wb") as filedesc:
            for data in stream:
                chunked.Write(filedesc, data)  # pytype: disable=wrong-arg-types
                buf_entry_count += 1

                if len(buf.getvalue()) >= chunk_size:
                    break

        if buf_entry_count == 0:
            break

        yield buf.getvalue()
Пример #4
0
    def testContentTooShort(self):
        buf = io.BytesIO()
        chunked.Write(buf, b"foobarbaz")

        buf = io.BytesIO(buf.getvalue()[:-2])
        with self.assertRaises(ValueError):
            chunked.Read(buf)
Пример #5
0
    def testSingleChunk(self):
        buf = io.BytesIO()
        chunked.Write(buf, b"foo")

        buf.seek(0, io.SEEK_SET)
        self.assertEqual(chunked.Read(buf), b"foo")
        self.assertIsNone(chunked.Read(buf))
Пример #6
0
  def testMalformedInputWithoutMaxChunkSizeSet(self):
    buf1 = io.BytesIO()
    chunked.Write(buf1, b"foobarbaz")

    buf2 = io.BytesIO(buf1.getvalue()[:-2])
    with self.assertRaises(chunked.ChunkTruncatedError):
      chunked.Read(buf2)
Пример #7
0
    def testMalformedInputUnseekable(self):
        class UnseekableBytesIO(io.BytesIO):
            def seekable(self) -> bool:
                return False

        buf = io.BytesIO()
        chunked.Write(buf, b"foobarbaz")

        buf = UnseekableBytesIO(buf.getvalue()[:-2])
        with self.assertRaisesRegex(ValueError, "Malformed input"):
            chunked.Read(buf)
Пример #8
0
    def testSingle(self):
        buf = io.BytesIO()
        chunked.Write(buf, b"foo")

        buf.seek(0, io.SEEK_SET)
        self.assertEqual(list(chunked.ReadAll(buf)), [b"foo"])