diff --git a/capnp/lib/capnp.pyx b/capnp/lib/capnp.pyx index b69e0926d..ae8c4f1e4 100644 --- a/capnp/lib/capnp.pyx +++ b/capnp/lib/capnp.pyx @@ -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 diff --git a/setup.py b/setup.py index 60c5ab7fe..ea4bc830a 100644 --- a/setup.py +++ b/setup.py @@ -222,6 +222,7 @@ def run(self): # noqa: C901 "*.capnp", "helpers/*.pxd", "helpers/*.h", + "includes/*.h", "includes/*.pxd", "lib/*.pxd", "lib/*.py", diff --git a/test/test_blob_to_dict_base64.py b/test/test_blob_to_dict_base64.py index c6f7a03b8..5e70f7ebf 100644 --- a/test/test_blob_to_dict_base64.py +++ b/test/test_blob_to_dict_base64.py @@ -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