This is an automated email from the ASF dual-hosted git repository.
chaokunyang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/fory.git
The following commit(s) were added to refs/heads/main by this push:
new 297b7b280 feat(python): add buffer index accessors (#3223)
297b7b280 is described below
commit 297b7b280148b045ae9cf6c22006466aed8162dc
Author: Shawn Yang <[email protected]>
AuthorDate: Tue Jan 27 20:16:53 2026 +0800
feat(python): add buffer index accessors (#3223)
## Why?
Buffer index access is currently exposed as Python properties. This
change standardizes access through explicit getters/setters to make call
sites uniform across Cython and Python and avoid property usage.
## What does this PR do?
- Add `get_reader_index`/`set_reader_index` and
`get_writer_index`/`set_writer_index` on `Buffer`.
- Replace `reader_index`/`writer_index` property usage across Python and
Cython code paths.
- Update Python tests and helpers to use the new accessors.
## Related issues
None.
## Does this PR introduce any user-facing change?
Yes. Python `Buffer` index access now uses explicit get/set methods
instead of properties.
- [x] Does this PR introduce any public API change?
- [ ] Does this PR introduce any binary protocol compatibility change?
## Benchmark
Not run (not requested).
---
python/pyfory/_fory.py | 34 +++++++++++++------------
python/pyfory/buffer.pxd | 8 ++++++
python/pyfory/buffer.pyx | 28 ++++++++++-----------
python/pyfory/collection.pxi | 14 +++++++----
python/pyfory/collection.py | 2 +-
python/pyfory/format/encoder.py | 2 +-
python/pyfory/meta/typedef_encoder.py | 4 +--
python/pyfory/serialization.pyx | 40 ++++++++++++++++--------------
python/pyfory/struct.py | 2 +-
python/pyfory/tests/test_buffer.py | 22 ++++++++--------
python/pyfory/tests/test_cross_language.py | 14 +++++------
python/pyfory/tests/test_serializer.py | 16 ++++++------
python/pyfory/tests/xlang_test_main.py | 8 +++---
13 files changed, 104 insertions(+), 90 deletions(-)
diff --git a/python/pyfory/_fory.py b/python/pyfory/_fory.py
index bc68c437d..a301a2d86 100644
--- a/python/pyfory/_fory.py
+++ b/python/pyfory/_fory.py
@@ -472,12 +472,12 @@ class Fory:
self.buffer_callback = buffer_callback
self._unsupported_callback = unsupported_callback
if buffer is None:
- self.buffer.writer_index = 0
+ self.buffer.set_writer_index(0)
buffer = self.buffer
- mask_index = buffer.writer_index
+ mask_index = buffer.get_writer_index()
# 1byte used for bit mask
buffer.grow(1)
- buffer.writer_index = mask_index + 1
+ buffer.set_writer_index(mask_index + 1)
if obj is None:
set_bit(buffer, mask_index, 0)
else:
@@ -504,7 +504,7 @@ class Fory:
if buffer is not self.buffer:
return buffer
else:
- return buffer.to_bytes(0, buffer.writer_index)
+ return buffer.to_bytes(0, buffer.get_writer_index())
def write_ref(self, buffer, obj, typeinfo=None):
cls = type(obj)
@@ -611,8 +611,8 @@ class Fory:
buffer = Buffer(buffer)
if unsupported_objects is not None:
self._unsupported_objects = iter(unsupported_objects)
- reader_index = buffer.reader_index
- buffer.reader_index = reader_index + 1
+ reader_index = buffer.get_reader_index()
+ buffer.set_reader_index(reader_index + 1)
if get_bit(buffer, reader_index, 0):
return None
is_target_x_lang = get_bit(buffer, reader_index, 1)
@@ -698,38 +698,40 @@ class Fory:
size = buffer_object.total_bytes()
# writer length.
buffer.write_varuint32(size)
- writer_index = buffer.writer_index
+ writer_index = buffer.get_writer_index()
buffer.ensure(writer_index + size)
- buf = buffer.slice(buffer.writer_index, size)
+ buf = buffer.slice(writer_index, size)
buffer_object.write_to(buf)
- buffer.writer_index += size
+ buffer.set_writer_index(writer_index + size)
return
if self.buffer_callback(buffer_object):
buffer.write_bool(True)
size = buffer_object.total_bytes()
# writer length.
buffer.write_varuint32(size)
- writer_index = buffer.writer_index
+ writer_index = buffer.get_writer_index()
buffer.ensure(writer_index + size)
- buf = buffer.slice(buffer.writer_index, size)
+ buf = buffer.slice(writer_index, size)
buffer_object.write_to(buf)
- buffer.writer_index += size
+ buffer.set_writer_index(writer_index + size)
else:
buffer.write_bool(False)
def read_buffer_object(self, buffer) -> Buffer:
if not self.is_peer_out_of_band_enabled:
size = buffer.read_varuint32()
- buf = buffer.slice(buffer.reader_index, size)
- buffer.reader_index += size
+ reader_index = buffer.get_reader_index()
+ buf = buffer.slice(reader_index, size)
+ buffer.set_reader_index(reader_index + size)
return buf
in_band = buffer.read_bool()
if not in_band:
assert self._buffers is not None
return next(self._buffers)
size = buffer.read_varuint32()
- buf = buffer.slice(buffer.reader_index, size)
- buffer.reader_index += size
+ reader_index = buffer.get_reader_index()
+ buf = buffer.slice(reader_index, size)
+ buffer.set_reader_index(reader_index + size)
return buf
def handle_unsupported_write(self, buffer, obj):
diff --git a/python/pyfory/buffer.pxd b/python/pyfory/buffer.pxd
index e2ab43986..856cb6a51 100644
--- a/python/pyfory/buffer.pxd
+++ b/python/pyfory/buffer.pxd
@@ -52,6 +52,14 @@ cdef class Buffer:
cpdef inline reserve(self, int32_t new_size)
+ cpdef inline int32_t get_reader_index(self)
+
+ cpdef inline void set_reader_index(self, int32_t value)
+
+ cpdef inline int32_t get_writer_index(self)
+
+ cpdef inline void set_writer_index(self, int32_t value)
+
cpdef inline int32_t size(self)
cpdef inline grow(self, int32_t needed_size)
diff --git a/python/pyfory/buffer.pyx b/python/pyfory/buffer.pyx
index cccf976ea..16d1f80bd 100644
--- a/python/pyfory/buffer.pyx
+++ b/python/pyfory/buffer.pyx
@@ -102,23 +102,21 @@ cdef class Buffer:
self._error.reset()
raise_fory_error(code, message)
- property reader_index:
- def __get__(self):
- return self.c_buffer.reader_index()
+ cpdef inline int32_t get_reader_index(self):
+ return <int32_t>self.c_buffer.reader_index()
- def __set__(self, int32_t value):
- if value < 0:
- raise ValueError("reader_index must be >= 0")
- self.c_buffer.ReaderIndex(<uint32_t>value)
+ cpdef inline void set_reader_index(self, int32_t value):
+ if value < 0:
+ raise ValueError("reader_index must be >= 0")
+ self.c_buffer.ReaderIndex(<uint32_t>value)
- property writer_index:
- def __get__(self):
- return self.c_buffer.writer_index()
+ cpdef inline int32_t get_writer_index(self):
+ return <int32_t>self.c_buffer.writer_index()
- def __set__(self, int32_t value):
- if value < 0:
- raise ValueError("writer_index must be >= 0")
- self.c_buffer.WriterIndex(<uint32_t>value)
+ cpdef inline void set_writer_index(self, int32_t value):
+ if value < 0:
+ raise ValueError("writer_index must be >= 0")
+ self.c_buffer.WriterIndex(<uint32_t>value)
cpdef c_bool own_data(self):
return self.c_buffer.own_data()
@@ -625,7 +623,7 @@ cdef class Buffer:
def __repr__(self):
return "Buffer(reader_index={}, writer_index={}, size={})".format(
- self.reader_index, self.writer_index, self.size()
+ self.get_reader_index(), self.get_writer_index(), self.size()
)
diff --git a/python/pyfory/collection.pxi b/python/pyfory/collection.pxi
index e88a487f9..9096ddb51 100644
--- a/python/pyfory/collection.pxi
+++ b/python/pyfory/collection.pxi
@@ -199,12 +199,14 @@ cdef class CollectionSerializer(Serializer):
self._add_element(collection_, i, buffer.read_varint64())
cdef inline _write_bool(self, Buffer buffer, value):
+ cdef int32_t writer_index
value_type = type(value)
if value_type is list or value_type is tuple:
size = sizeof(bool) * Py_SIZE(value)
buffer.grow(<int32_t>size)
- Fory_PyBooleanSequenceWriteToBuffer(value, &buffer.c_buffer,
buffer.writer_index)
- buffer.writer_index += size
+ writer_index = buffer.get_writer_index()
+ Fory_PyBooleanSequenceWriteToBuffer(value, &buffer.c_buffer,
writer_index)
+ buffer.set_writer_index(writer_index + size)
else:
for s in value:
buffer.write_bool(s)
@@ -214,12 +216,14 @@ cdef class CollectionSerializer(Serializer):
self._add_element(collection_, i, buffer.read_bool())
cdef inline _write_float(self, Buffer buffer, value):
+ cdef int32_t writer_index
value_type = type(value)
if value_type is list or value_type is tuple:
size = sizeof(double) * Py_SIZE(value)
buffer.grow(<int32_t>size)
- Fory_PyFloatSequenceWriteToBuffer(value, &buffer.c_buffer,
buffer.writer_index)
- buffer.writer_index += size
+ writer_index = buffer.get_writer_index()
+ Fory_PyFloatSequenceWriteToBuffer(value, &buffer.c_buffer,
writer_index)
+ buffer.set_writer_index(writer_index + size)
else:
for s in value:
buffer.write_double(s)
@@ -795,7 +799,7 @@ cdef class MapSerializer(Serializer):
key_cls = type(key)
value_cls = type(value)
buffer.write_int16(-1)
- chunk_size_offset = buffer.writer_index - 1
+ chunk_size_offset = buffer.get_writer_index() - 1
chunk_header = 0
if key_serializer is not None:
chunk_header |= KEY_DECL_TYPE
diff --git a/python/pyfory/collection.py b/python/pyfory/collection.py
index ac4efd6c5..72eca0f8d 100644
--- a/python/pyfory/collection.py
+++ b/python/pyfory/collection.py
@@ -450,7 +450,7 @@ class MapSerializer(Serializer):
key_cls = type(key)
value_cls = type(value)
buffer.write_int16(-1)
- chunk_size_offset = buffer.writer_index - 1
+ chunk_size_offset = buffer.get_writer_index() - 1
chunk_header = 0
if key_serializer is not None:
diff --git a/python/pyfory/format/encoder.py b/python/pyfory/format/encoder.py
index 4e1d318df..4537c3a80 100644
--- a/python/pyfory/format/encoder.py
+++ b/python/pyfory/format/encoder.py
@@ -34,7 +34,7 @@ class Encoder:
buffer.write_int64(self.schema_hash)
row_bytes = row.to_bytes()
buffer.write_bytes(row_bytes)
- return buffer.to_bytes(0, buffer.writer_index)
+ return buffer.to_bytes(0, buffer.get_writer_index())
def decode(self, binary: bytes):
buf = pyfory.Buffer(binary, 0, len(binary))
diff --git a/python/pyfory/meta/typedef_encoder.py
b/python/pyfory/meta/typedef_encoder.py
index aeb28070b..0c57b289d 100644
--- a/python/pyfory/meta/typedef_encoder.py
+++ b/python/pyfory/meta/typedef_encoder.py
@@ -98,7 +98,7 @@ def encode_typedef(type_resolver, cls):
write_fields_info(type_resolver, buffer, field_infos)
# Get the encoded binary (only the written portion, not the full buffer)
- binary = buffer.to_bytes(0, buffer.writer_index)
+ binary = buffer.to_bytes(0, buffer.get_writer_index())
# Compress if beneficial
compressed_binary = type_resolver.get_meta_compressor().compress(binary)
@@ -139,7 +139,7 @@ def prepend_header(buffer: bytes, is_compressed: bool,
has_fields_meta: bool):
result.write_varuint32(meta_size - META_SIZE_MASKS)
result.write_bytes(buffer)
- return result.to_bytes(0, result.writer_index)
+ return result.to_bytes(0, result.get_writer_index())
def write_namespace(buffer: Buffer, namespace: str):
diff --git a/python/pyfory/serialization.pyx b/python/pyfory/serialization.pyx
index 9fa7420e3..7eaaa0584 100644
--- a/python/pyfory/serialization.pyx
+++ b/python/pyfory/serialization.pyx
@@ -363,7 +363,7 @@ cdef class MetaStringResolver:
hashcode = ((v1 * 31 + v2) >> 8 << 8) | encoding
enum_str_ptr = self._c_hash_to_small_metastring_bytes[hashcode]
if enum_str_ptr == NULL:
- reader_index = buffer.reader_index
+ reader_index = buffer.get_reader_index()
str_bytes = buffer.get_bytes(reader_index - length, length)
enum_str = MetaStringBytes(str_bytes, hashcode=hashcode)
self._enum_str_set.add(enum_str)
@@ -371,9 +371,9 @@ cdef class MetaStringResolver:
self._c_hash_to_small_metastring_bytes[hashcode] = enum_str_ptr
else:
hashcode = buffer.read_int64()
- reader_index = buffer.reader_index
+ reader_index = buffer.get_reader_index()
buffer.check_bound(reader_index, length)
- buffer.reader_index = reader_index + length
+ buffer.set_reader_index(reader_index + length)
enum_str_ptr = self._c_hash_to_metastr_bytes[hashcode]
if enum_str_ptr == NULL:
str_bytes = buffer.get_bytes(reader_index, length)
@@ -1222,12 +1222,12 @@ cdef class Fory:
self.buffer_callback = buffer_callback
self._unsupported_callback = unsupported_callback
if buffer is None:
- self.buffer.writer_index = 0
+ self.buffer.set_writer_index(0)
buffer = self.buffer
- cdef int32_t mask_index = buffer.writer_index
+ cdef int32_t mask_index = buffer.get_writer_index()
# 1byte used for bit mask
buffer.grow(1)
- buffer.writer_index = mask_index + 1
+ buffer.set_writer_index(mask_index + 1)
if obj is None:
set_bit(buffer, mask_index, 0)
else:
@@ -1254,7 +1254,7 @@ cdef class Fory:
if buffer is not self.buffer:
return buffer
else:
- return buffer.to_bytes(0, buffer.writer_index)
+ return buffer.to_bytes(0, buffer.get_writer_index())
cpdef inline write_ref(
self, Buffer buffer, obj, TypeInfo typeinfo=None):
@@ -1369,8 +1369,8 @@ cdef class Fory:
self.depth += 1
if unsupported_objects is not None:
self._unsupported_objects = iter(unsupported_objects)
- cdef int32_t reader_index = buffer.reader_index
- buffer.reader_index = reader_index + 1
+ cdef int32_t reader_index = buffer.get_reader_index()
+ buffer.set_reader_index(reader_index + 1)
if get_bit(buffer, reader_index, 0):
return None
cdef c_bool is_target_x_lang = get_bit(buffer, reader_index, 1)
@@ -1500,22 +1500,22 @@ cdef class Fory:
size = buffer_object.total_bytes()
# writer length.
buffer.write_varuint32(size)
- writer_index = buffer.writer_index
+ writer_index = buffer.get_writer_index()
buffer.ensure(writer_index + size)
- buf = buffer.slice(buffer.writer_index, size)
+ buf = buffer.slice(writer_index, size)
buffer_object.write_to(buf)
- buffer.writer_index += size
+ buffer.set_writer_index(writer_index + size)
return
if self.buffer_callback(buffer_object):
buffer.write_bool(True)
size = buffer_object.total_bytes()
# writer length.
buffer.write_varuint32(size)
- writer_index = buffer.writer_index
+ writer_index = buffer.get_writer_index()
buffer.ensure(writer_index + size)
- buf = buffer.slice(buffer.writer_index, size)
+ buf = buffer.slice(writer_index, size)
buffer_object.write_to(buf)
- buffer.writer_index += size
+ buffer.set_writer_index(writer_index + size)
else:
buffer.write_bool(False)
@@ -1525,16 +1525,18 @@ cdef class Fory:
cdef Buffer buf
if not self.is_peer_out_of_band_enabled:
size = buffer.read_varuint32()
- buf = buffer.slice(buffer.reader_index, size)
- buffer.reader_index += size
+ reader_index = buffer.get_reader_index()
+ buf = buffer.slice(reader_index, size)
+ buffer.set_reader_index(reader_index + size)
return buf
in_band = buffer.read_bool()
if not in_band:
assert self._buffers is not None
return next(self._buffers)
size = buffer.read_varuint32()
- buf = buffer.slice(buffer.reader_index, size)
- buffer.reader_index += size
+ reader_index = buffer.get_reader_index()
+ buf = buffer.slice(reader_index, size)
+ buffer.set_reader_index(reader_index + size)
return buf
cpdef handle_unsupported_write(self, buffer, obj):
diff --git a/python/pyfory/struct.py b/python/pyfory/struct.py
index 9ad711259..dc641a373 100644
--- a/python/pyfory/struct.py
+++ b/python/pyfory/struct.py
@@ -1073,7 +1073,7 @@ class DataClassSerializer(Serializer):
if ref_id == -3:
field_value = None
else:
- buffer.reader_index -= 1
+ buffer.set_reader_index(buffer.get_reader_index() - 1)
# dynamic=True: don't pass serializer, read type info from
buffer
# dynamic=False: pass serializer, use declared type
field_value = self.fory.xread_ref(buffer, serializer=None
if is_dynamic else serializer)
diff --git a/python/pyfory/tests/test_buffer.py
b/python/pyfory/tests/test_buffer.py
index a80d26564..58814db9a 100644
--- a/python/pyfory/tests/test_buffer.py
+++ b/python/pyfory/tests/test_buffer.py
@@ -43,8 +43,8 @@ def test_buffer():
binary = b"b" * 100
buffer.write_bytes(binary)
buffer.write_bytes_and_size(binary)
- print(f"buffer size {buffer.size()}, writer_index {buffer.writer_index}")
- new_buffer = Buffer(buffer.get_bytes(0, buffer.writer_index))
+ print(f"buffer size {buffer.size()}, writer_index
{buffer.get_writer_index()}")
+ new_buffer = Buffer(buffer.get_bytes(0, buffer.get_writer_index()))
assert new_buffer.read_bool() is True
assert new_buffer.read_int8() == -1
assert new_buffer.read_int8() == 2**7 - 1
@@ -120,19 +120,19 @@ def test_write_varint32():
def check_varuint32(buf: Buffer, value: int, bytes_written: int):
- assert buf.writer_index == buf.reader_index
+ assert buf.get_writer_index() == buf.get_reader_index()
actual_bytes_written = buf.write_varuint32(value)
assert actual_bytes_written == bytes_written
varint = buf.read_varuint32()
- assert buf.writer_index == buf.reader_index
+ assert buf.get_writer_index() == buf.get_reader_index()
assert value == varint
def check_varint32(buf: Buffer, value: int):
- assert buf.writer_index == buf.reader_index
+ assert buf.get_writer_index() == buf.get_reader_index()
buf.write_varint32(value)
varint = buf.read_varint32()
- assert buf.writer_index == buf.reader_index
+ assert buf.get_writer_index() == buf.get_reader_index()
assert value == varint
@@ -210,15 +210,15 @@ def test_write_varuint64():
def check_varuint64(buf: Buffer, value: int, bytes_written: int):
- reader_index = buf.reader_index
- assert buf.writer_index == buf.reader_index
+ reader_index = buf.get_reader_index()
+ assert buf.get_writer_index() == buf.get_reader_index()
actual_bytes_written = buf.write_varuint64(value)
assert actual_bytes_written == bytes_written
varint = buf.read_varuint64()
- assert buf.writer_index == buf.reader_index
+ assert buf.get_writer_index() == buf.get_reader_index()
assert value == varint
# test slow read branch in `read_varint64`
- assert buf.slice(reader_index, buf.reader_index -
reader_index).read_varuint64() == value
+ assert buf.slice(reader_index, buf.get_reader_index() -
reader_index).read_varuint64() == value
def test_write_buffer():
@@ -226,7 +226,7 @@ def test_write_buffer():
buf.write(b"")
buf.write(b"123")
buf.write(Buffer.allocate(32))
- assert buf.writer_index == 35
+ assert buf.get_writer_index() == 35
assert buf.read(0) == b""
assert buf.read(3) == b"123"
diff --git a/python/pyfory/tests/test_cross_language.py
b/python/pyfory/tests/test_cross_language.py
index a44f0fa7a..c9901e9f1 100644
--- a/python/pyfory/tests/test_cross_language.py
+++ b/python/pyfory/tests/test_cross_language.py
@@ -284,7 +284,7 @@ def test_buffer(data_file_path):
buffer.write_int32(len(binary))
buffer.write_bytes(binary)
with open(data_file_path, "wb+") as f:
- f.write(buffer.get_bytes(0, buffer.writer_index))
+ f.write(buffer.get_bytes(0, buffer.get_writer_index()))
@cross_language_test
@@ -360,7 +360,7 @@ def test_cross_language_serializer(data_file_path):
for obj in objects:
fory.serialize(obj, buffer=new_buf)
with open(data_file_path, "wb+") as f:
- f.write(new_buf.get_bytes(0, new_buf.writer_index))
+ f.write(new_buf.get_bytes(0, new_buf.get_writer_index()))
@cross_language_test
@@ -391,7 +391,7 @@ def test_cross_language_reference(data_file_path):
new_buf = pyfory.Buffer.allocate(32)
fory.serialize(new_list, buffer=new_buf)
with open(data_file_path, "wb+") as f:
- f.write(new_buf.get_bytes(0, new_buf.writer_index))
+ f.write(new_buf.get_bytes(0, new_buf.get_writer_index()))
@dataclass
@@ -661,7 +661,7 @@ def test_register_serializer(data_file_path):
assert fory.deserialize(fory.serialize(new_obj)) == new_obj, new_obj
print(f"test_register_serializer: {new_obj}")
with open(data_file_path, "wb+") as f:
- f.write(new_buf.get_bytes(0, new_buf.writer_index))
+ f.write(new_buf.get_bytes(0, new_buf.get_writer_index()))
@cross_language_test
@@ -675,9 +675,9 @@ def test_oob_buffer(in_band_file_path,
out_of_band_file_path):
buffers = []
for i in range(n_buffers):
length = out_of_band_buffer.read_int32()
- reader_index = out_of_band_buffer.reader_index
+ reader_index = out_of_band_buffer.get_reader_index()
buffers.append(out_of_band_buffer.slice(reader_index, length))
- out_of_band_buffer.reader_index += length
+
out_of_band_buffer.set_reader_index(out_of_band_buffer.get_reader_index() +
length)
new_obj = fory.deserialize(in_band_bytes, buffers)
obj = [bytes(bytearray([0, 1])) for _ in range(10)]
assert new_obj == obj, (obj, new_obj)
@@ -707,7 +707,7 @@ def test_oob_buffer(in_band_file_path,
out_of_band_file_path):
out_of_band_buffer.write_int32(buffer_object.total_bytes())
buffer_object.write_to(out_of_band_buffer)
with open(out_of_band_file_path, "wb+") as f:
- f.write(out_of_band_buffer.to_bytes(0,
out_of_band_buffer.writer_index))
+ f.write(out_of_band_buffer.to_bytes(0,
out_of_band_buffer.get_writer_index()))
@cross_language_test
diff --git a/python/pyfory/tests/test_serializer.py
b/python/pyfory/tests/test_serializer.py
index c49b45730..119739bc8 100644
--- a/python/pyfory/tests/test_serializer.py
+++ b/python/pyfory/tests/test_serializer.py
@@ -212,12 +212,12 @@ def test_tmp_ref(language):
# address of released tmp object.
fory = Fory(language=language, ref=True)
buffer = Buffer.allocate(128)
- writer_index = buffer.writer_index
+ writer_index = buffer.get_writer_index()
x = 1
fory.serialize([x], buffer)
fory.serialize([x], buffer)
fory.serialize([x], buffer)
- assert buffer.writer_index > writer_index + 15
+ assert buffer.get_writer_index() > writer_index + 15
l1 = fory.deserialize(buffer)
l2 = fory.deserialize(buffer)
@@ -320,15 +320,15 @@ def test_pickle():
pickler.dump(b"abc")
buf.write_int32(-1)
pickler.dump("abcd")
- assert buf.writer_index - 4 == len(pickle.dumps(b"abc")) +
len(pickle.dumps("abcd"))
- print(f"writer_index {buf.writer_index}")
+ assert buf.get_writer_index() - 4 == len(pickle.dumps(b"abc")) +
len(pickle.dumps("abcd"))
+ print(f"writer_index {buf.get_writer_index()}")
bytes_io_ = io.BytesIO(buf)
unpickler = pickle.Unpickler(bytes_io_)
assert unpickler.load() == b"abc"
bytes_io_.seek(bytes_io_.tell() + 4)
assert unpickler.load() == "abcd"
- print(f"reader_index {buf.reader_index} {bytes_io_.tell()}")
+ print(f"reader_index {buf.get_reader_index()} {bytes_io_.tell()}")
if pa:
pa_buf = pa.BufferReader(buf)
@@ -336,13 +336,13 @@ def test_pickle():
assert unpickler.load() == b"abc"
pa_buf.seek(pa_buf.tell() + 4)
assert unpickler.load() == "abcd"
- print(f"reader_index {buf.reader_index} {pa_buf.tell()}
{buf.reader_index}")
+ print(f"reader_index {buf.get_reader_index()} {pa_buf.tell()}
{buf.get_reader_index()}")
unpickler = pickle.Unpickler(buf)
assert unpickler.load() == b"abc"
- buf.reader_index = buf.reader_index + 4
+ buf.set_reader_index(buf.get_reader_index() + 4)
assert unpickler.load() == "abcd"
- print(f"reader_index {buf.reader_index}")
+ print(f"reader_index {buf.get_reader_index()}")
@dataclass
diff --git a/python/pyfory/tests/xlang_test_main.py
b/python/pyfory/tests/xlang_test_main.py
index 3b3160db8..c267b641f 100644
--- a/python/pyfory/tests/xlang_test_main.py
+++ b/python/pyfory/tests/xlang_test_main.py
@@ -342,7 +342,7 @@ def test_string_serializer():
fory.serialize(s, buffer=new_buffer)
with open(data_file, "wb") as f:
- f.write(new_buffer.get_bytes(0, new_buffer.writer_index))
+ f.write(new_buffer.get_bytes(0, new_buffer.get_writer_index()))
def test_simple_struct():
@@ -498,7 +498,7 @@ def test_consistent_named():
fory.serialize(my_ext, buffer=new_buffer)
with open(data_file, "wb") as f:
- f.write(new_buffer.get_bytes(0, new_buffer.writer_index))
+ f.write(new_buffer.get_bytes(0, new_buffer.get_writer_index()))
def test_struct_version_check():
@@ -565,7 +565,7 @@ def test_polymorphic_list():
fory.serialize(holder, buffer=new_buffer)
with open(data_file, "wb") as f:
- f.write(new_buffer.get_bytes(0, new_buffer.writer_index))
+ f.write(new_buffer.get_bytes(0, new_buffer.get_writer_index()))
def test_polymorphic_map():
@@ -612,7 +612,7 @@ def test_polymorphic_map():
fory.serialize(holder, buffer=new_buffer)
with open(data_file, "wb") as f:
- f.write(new_buffer.get_bytes(0, new_buffer.writer_index))
+ f.write(new_buffer.get_bytes(0, new_buffer.get_writer_index()))
def test_one_string_field_schema():
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]