Commit 86fb05d3 authored by Robert's avatar Robert Committed by Wouter van Oortmerssen

Python: CreateByteVector function in builder. (#4453)

parent 5e473918
...@@ -421,6 +421,27 @@ class Builder(object): ...@@ -421,6 +421,27 @@ class Builder(object):
return self.EndVector(len(x)) return self.EndVector(len(x))
def CreateByteVector(self, x):
"""CreateString writes a byte vector."""
self.assertNotNested()
## @cond FLATBUFFERS_INTERNAL
self.nested = True
## @endcond
if not isinstance(x, compat.binary_types):
raise TypeError("non-byte vector passed to CreateByteVector")
self.Prep(N.UOffsetTFlags.bytewidth, len(x)*N.Uint8Flags.bytewidth)
l = UOffsetTFlags.py_type(len(x))
## @cond FLATBUFFERS_INTERNAL
self.head = UOffsetTFlags.py_type(self.Head() - l)
## @endcond
self.Bytes[self.Head():self.Head()+l] = x
return self.EndVector(len(x))
## @cond FLATBUFFERS_INTERNAL ## @cond FLATBUFFERS_INTERNAL
def assertNested(self): def assertNested(self):
""" """
......
...@@ -459,6 +459,17 @@ class TestByteLayout(unittest.TestCase): ...@@ -459,6 +459,17 @@ class TestByteLayout(unittest.TestCase):
self.assertBuilderEquals(b, [4, 0, 0, 0, 4, 5, 6, 7, 0, 0, 0, 0, self.assertBuilderEquals(b, [4, 0, 0, 0, 4, 5, 6, 7, 0, 0, 0, 0,
3, 0, 0, 0, 1, 2, 3, 0]) 3, 0, 0, 0, 1, 2, 3, 0])
def test_create_byte_vector(self):
b = flatbuffers.Builder(0)
b.CreateByteVector(b"")
# 0-byte pad:
self.assertBuilderEquals(b, [0, 0, 0, 0])
b = flatbuffers.Builder(0)
b.CreateByteVector(b"\x01\x02\x03")
# 1-byte pad:
self.assertBuilderEquals(b, [3, 0, 0, 0, 1, 2, 3, 0])
def test_empty_vtable(self): def test_empty_vtable(self):
b = flatbuffers.Builder(0) b = flatbuffers.Builder(0)
b.StartObject(0) b.StartObject(0)
...@@ -1226,6 +1237,13 @@ class TestExceptions(unittest.TestCase): ...@@ -1226,6 +1237,13 @@ class TestExceptions(unittest.TestCase):
assertRaises(self, lambda: b.CreateString(s), assertRaises(self, lambda: b.CreateString(s),
flatbuffers.builder.IsNestedError) flatbuffers.builder.IsNestedError)
def test_create_byte_vector_is_nested_error(self):
b = flatbuffers.Builder(0)
b.StartObject(0)
s = b'test1'
assertRaises(self, lambda: b.CreateByteVector(s),
flatbuffers.builder.IsNestedError)
def test_finished_bytes_error(self): def test_finished_bytes_error(self):
b = flatbuffers.Builder(0) b = flatbuffers.Builder(0)
assertRaises(self, lambda: b.Output(), assertRaises(self, lambda: b.Output(),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment