diff --git a/panda/src/express/datagram.I b/panda/src/express/datagram.I index 3bd7812969..499bfab48b 100644 --- a/panda/src/express/datagram.I +++ b/panda/src/express/datagram.I @@ -316,6 +316,18 @@ get_message() const { } } +/** + * Returns the datagram's data as a bytes object. + */ +INLINE vector_uchar Datagram:: +__bytes__() const { + if (!_data.empty()) { + return vector_uchar(_data.v()); + } else { + return vector_uchar(); + } +} + /** * Returns a pointer to the beginning of the datagram's data. */ diff --git a/panda/src/express/datagram.h b/panda/src/express/datagram.h index 9250ac89d3..00a46ef36f 100644 --- a/panda/src/express/datagram.h +++ b/panda/src/express/datagram.h @@ -84,6 +84,7 @@ PUBLISHED: void assign(const void *data, size_t size); INLINE string get_message() const; + INLINE vector_uchar __bytes__() const; INLINE const void *get_data() const; INLINE size_t get_length() const; diff --git a/tests/putil/test_datagram.py b/tests/putil/test_datagram.py index 4a34bc88a2..ceadff67b8 100644 --- a/tests/putil/test_datagram.py +++ b/tests/putil/test_datagram.py @@ -76,6 +76,16 @@ def datagram_large(): return dg, readback_function +def test_datagram_bytes(): + """Tests that we can put and get a bytes object on Datagram.""" + dg = core.Datagram(b'abc\x00') + dg.append_data(b'\xff123') + assert bytes(dg) == b'abc\x00\xff123' + + dgi = core.DatagramIterator(dg) + dgi.get_remaining_bytes() == b'abc\x00\xff123' + + def test_iterator(datagram_small): """This tests Datagram/DatagramIterator, and sort of serves as a self-check of the test fixtures too."""