Make message.to_dict() return bytes for DATA type field (#386)

* change to_dict return bytes for DATA type

* reformat

* reformat

* add includes .h

---------

Co-authored-by: Brian Xu <brian.xu1@bytedance.com>
This commit is contained in:
Brian Xu
2025-10-01 00:48:10 +10:00
committed by GitHub
parent a99ca72902
commit c14fd7036a
3 changed files with 9 additions and 1 deletions

View File

@@ -1060,6 +1060,12 @@ cdef _to_dict(msg, bint verbose, bint ordered, bint encode_bytes_as_base64=False
# encode the message as base64 and return utf-8 string
return base64.b64encode(msg).decode('utf-8')
if msg_type is memoryview:
if encode_bytes_as_base64:
return base64.b64encode(bytes(msg)).decode('utf-8')
else:
return bytes(msg)
return msg

View File

@@ -222,6 +222,7 @@ setup(
"*.capnp",
"helpers/*.pxd",
"helpers/*.h",
"includes/*.h",
"includes/*.pxd",
"lib/*.pxd",
"lib/*.py",

View File

@@ -1,5 +1,6 @@
import os
import capnp
import base64
import pytest
this_dir = os.path.dirname(__file__)
@@ -14,7 +15,7 @@ def test_blob_to_dict(blob_schema):
blob_value = b"hello world"
blob = blob_schema.BlobTest(blob=blob_value)
blob_dict = blob.to_dict(encode_bytes_as_base64=True)
assert blob_dict["blob"].tobytes() == blob_value
assert base64.b64decode(blob_dict["blob"]) == blob_value
msg = blob_schema.BlobTest.new_message()
msg.from_dict(blob_dict)
assert blob.blob == blob_value