This is an automated email from the ASF dual-hosted git repository. astitcher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
The following commit(s) were added to refs/heads/main by this push: new 23c45e12f PROTON-2712: Fix some issues in the python binding type mapping 23c45e12f is described below commit 23c45e12f5547297a6391c8a82318f50c50beb0c Author: Andrew Stitcher <astitc...@apache.org> AuthorDate: Fri Apr 14 18:29:07 2023 -0400 PROTON-2712: Fix some issues in the python binding type mapping --- python/cproton.py | 18 ++++++++++-------- python/proton/_data.py | 14 +++----------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/python/cproton.py b/python/cproton.py index 5d5a0b54e..24281699d 100644 --- a/python/cproton.py +++ b/python/cproton.py @@ -193,19 +193,21 @@ def bytes2py(b): return memoryview(ffi.buffer(b.start, b.size)) +def bytes2pybytes(b): + return bytes(ffi.buffer(b.start, b.size)) + + def bytes2string(b, encoding='utf8'): return ffi.unpack(b.start, b.size).decode(encoding) def py2bytes(py): - if isinstance(py, memoryview): - return len(py), py + if isinstance(py, (bytes, bytearray,memoryview)): + s = ffi.from_buffer(py) + return len(s), s elif isinstance(py, str): s = ffi.from_buffer(py.encode('utf8')) return len(s), s - elif isinstance(py, bytes): - s = ffi.from_buffer(py) - return len(s), s def string2bytes(py, encoding='utf8'): @@ -240,7 +242,7 @@ def msgid2py(msgid): elif t == PN_ULONG: return msgid.u.as_ulong elif t == PN_BINARY: - return ffi.buffer(msgid.u.as_bytes.start, msgid.u.as_bytes.size) + return bytes2py(msgid.u.as_bytes) elif t == PN_STRING: return bytes2string(msgid.u.as_bytes) elif t == PN_UUID: @@ -265,7 +267,7 @@ def py2msgid(py): elif isinstance(py, int): return {'type': PN_ULONG, 'u': {'as_ulong': py}} elif isinstance(py, str): - return {'type': PN_STRING, 'u': {'as_bytes': py2bytes(py)}} + return {'type': PN_STRING, 'u': {'as_bytes': string2bytes(py)}} elif isinstance(py, bytes): return {'type': PN_BINARY, 'u': {'as_bytes': py2bytes(py)}} elif isinstance(py, UUID): @@ -568,7 +570,7 @@ def pn_message_set_id(message, value): def pn_message_get_user_id(message): - return bytes2py(lib.pn_message_get_user_id(message)) + return bytes2pybytes(lib.pn_message_get_user_id(message)) def pn_message_set_user_id(message, value): diff --git a/python/proton/_data.py b/python/proton/_data.py index b6af0b3af..bf627b6d9 100644 --- a/python/proton/_data.py +++ b/python/proton/_data.py @@ -1094,16 +1094,7 @@ class Data: :param mv: A Python memoryview object :raise: :exc:`DataException` if there is a Proton error. """ - self.put_binary(mv.tobytes()) - - def put_buffer(self, buff: Iterable[int]) -> None: - """ - Put a Python buffer object as an AMQP binary value. - - :param buff: A Python buffer object (**CHECK THIS**) - :raise: :exc:`DataException` if there is a Proton error. - """ - self.put_binary(bytes(buff)) + self.put_binary(mv) def put_string(self, s: str) -> None: """ @@ -1589,6 +1580,7 @@ class Data: timestamp: put_timestamp, uuid.UUID: put_uuid, bytes: put_binary, + bytearray: put_binary, unicode: put_string, symbol: put_symbol, list: put_sequence, @@ -1599,7 +1591,7 @@ class Data: AnnotationDict: put_dict, PropertyDict: put_dict, SymbolList: put_sequence, - memoryview: put_memoryview + memoryview: put_binary } get_mappings = { NULL: lambda s: None, --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org