Source: python-autobahn Version: 17.10.1+dfsg1-7 Severity: serious Justification: FTBFS Tags: bookworm sid ftbfs User: lu...@debian.org Usertags: ftbfs-20211220 ftbfs-bookworm
Hi, During a rebuild of all packages in sid, your package failed to build on amd64. Relevant part (hopefully): > make[1]: Entering directory '/<<PKGBUILDDIR>>' > make[1]: pyversions: No such file or directory > py3versions: no X-Python3-Version in control file, using supported versions > set -e ; set -x ; for i in 3.10 3.9 ; do \ > rm -rf build ; \ > PYTHONPATH=. python$i -m pytest autobahn ; \ > done > + rm -rf build > + PYTHONPATH=. python3.10 -m pytest autobahn > ============================= test session starts > ============================== > platform linux -- Python 3.10.1, pytest-6.2.5, py-1.10.0, pluggy-0.13.0 > rootdir: /<<PKGBUILDDIR>>, configfile: setup.cfg > collected 169 items > > autobahn/asyncio/test/test_asyncio_rawsocket.py ssssssss [ > 4%] > autobahn/rawsocket/test/test_rawsocket_url.py ................. [ > 14%] > autobahn/test/test_util.py .. [ > 15%] > autobahn/wamp/test/test_auth.py ......... [ > 21%] > autobahn/wamp/test/test_cryptosign.py ... [ > 23%] > autobahn/wamp/test/test_exception.py .. [ > 24%] > autobahn/wamp/test/test_message.py ..................................... [ > 46%] > .......................... [ > 61%] > autobahn/wamp/test/test_protocol_peer.py .. [ > 62%] > autobahn/wamp/test/test_runner.py ..... [ > 65%] > autobahn/wamp/test/test_serializer.py .F.F [ > 68%] > autobahn/wamp/test/test_uri_pattern.py ................ [ > 77%] > autobahn/websocket/test/test_protocol.py ......... [ > 82%] > autobahn/websocket/test/test_websocket_url.py .......................... [ > 98%] > ... > [100%] > > =================================== FAILURES > =================================== > ________________________ TestSerializer.test_crosstrip > _________________________ > > self = <autobahn.wamp.serializer.MsgPackSerializer object at 0x7f05673a70a0> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > isBinary = True > > def unserialize(self, payload, isBinary=None): > """ > Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize` > """ > if isBinary is not None: > if isBinary != self._serializer.BINARY: > raise ProtocolError("invalid serialization of WAMP message > (binary {0}, but expected {1})".format(isBinary, self._serializer.BINARY)) > > try: > > raw_msgs = self._serializer.unserialize(payload) > > autobahn/wamp/serializer.py:104: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <autobahn.wamp.serializer.MsgPackObjectSerializer object at > 0x7f05673a7160> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > > def unserialize(self, payload): > """ > Implements > :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize` > """ > > if self._batched: > msgs = [] > N = len(payload) > i = 0 > while i < N: > # read message length prefix > if i + 4 > N: > raise Exception("batch format error [1]") > l = struct.unpack("!L", payload[i:i + 4])[0] > > # read message data > if i + 4 + l > N: > raise Exception("batch format error [2]") > data = payload[i + 4:i + 4 + l] > > # append parsed raw message > msgs.append(umsgpack.unpackb(data)) > > # advance until everything consumed > i = i + 4 + l > > if i != N: > raise Exception("batch format error [3]") > return msgs > > else: > > unpacked = umsgpack.unpackb(payload) > > autobahn/wamp/serializer.py:348: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > s = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80', options = {} > > def _unpackb3(s, **options): > """ > Deserialize MessagePack bytes into a Python object. > > Args: > s: a 'bytes' or 'bytearray' containing serialized MessagePack > bytes > > Kwargs: > ext_handlers (dict): dictionary of Ext handlers, mapping integer > Ext > type to a callable that unpacks an instance > of > Ext into an object > use_ordered_dict (bool): unpack maps into OrderedDict, instead of > unordered dict (default False) > allow_invalid_utf8 (bool): unpack invalid strings into instances > of > InvalidString, for access to the bytes > (default False) > > Returns: > A Python object. > > Raises: > TypeError: > Packed data type is neither 'bytes' nor 'bytearray'. > InsufficientDataException(UnpackException): > Insufficient data to unpack the serialized object. > InvalidStringException(UnpackException): > Invalid UTF-8 string encountered during unpacking. > ReservedCodeException(UnpackException): > Reserved code encountered during unpacking. > UnhashableKeyException(UnpackException): > Unhashable key encountered during map unpacking. > The serialized map cannot be deserialized into a Python > dictionary. > DuplicateKeyException(UnpackException): > Duplicate key encountered during map unpacking. > > Example: > >>> umsgpack.unpackb(b'\x82\xa7compact\xc3\xa6schema\x00') > {'compact': True, 'schema': 0} > >>> > """ > if not isinstance(s, (bytes, bytearray)): > raise TypeError("packed data must be type 'bytes' or 'bytearray'") > > return _unpack(io.BytesIO(s), options) > > /usr/lib/python3/dist-packages/umsgpack.py:867: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > fp = <_io.BytesIO object at 0x7f0567336d90>, options = {} > > def _unpack(fp, options): > code = _read_except(fp, 1) > > return _unpack_dispatch_table[code](code, fp, options) > > /usr/lib/python3/dist-packages/umsgpack.py:693: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > code = b'\x93', fp = <_io.BytesIO object at 0x7f0567336d90>, options = {} > > def _unpack_array(code, fp, options): > if (ord(code) & 0xf0) == 0x90: > length = (ord(code) & ~0xf0) > elif code == b'\xdc': > length = struct.unpack(">H", _read_except(fp, 2))[0] > elif code == b'\xdd': > length = struct.unpack(">I", _read_except(fp, 4))[0] > else: > raise Exception("logic error, not array: 0x%02x" % ord(code)) > > > return [_unpack(fp, options) for i in xrange(length)] > > /usr/lib/python3/dist-packages/umsgpack.py:652: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > .0 = <range_iterator object at 0x7f05673a56e0> > > > return [_unpack(fp, options) for i in xrange(length)] > > /usr/lib/python3/dist-packages/umsgpack.py:652: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > fp = <_io.BytesIO object at 0x7f0567336d90>, options = {} > > def _unpack(fp, options): > code = _read_except(fp, 1) > > return _unpack_dispatch_table[code](code, fp, options) > > /usr/lib/python3/dist-packages/umsgpack.py:693: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > code = b'\x81', fp = <_io.BytesIO object at 0x7f0567336d90>, options = {} > > def _unpack_map(code, fp, options): > if (ord(code) & 0xf0) == 0x80: > length = (ord(code) & ~0xf0) > elif code == b'\xde': > length = struct.unpack(">H", _read_except(fp, 2))[0] > elif code == b'\xdf': > length = struct.unpack(">I", _read_except(fp, 4))[0] > else: > raise Exception("logic error, not map: 0x%02x" % ord(code)) > > d = {} if not options.get('use_ordered_dict') else > collections.OrderedDict() > for _ in xrange(length): > # Unpack key > k = _unpack(fp, options) > > if isinstance(k, list): > # Attempt to convert list into a hashable tuple > k = _deep_list_to_tuple(k) > > elif not isinstance(k, collections.Hashable): > E AttributeError: module 'collections' has no attribute 'Hashable' > > /usr/lib/python3/dist-packages/umsgpack.py:677: AttributeError > > During handling of the above exception, another exception occurred: > > self = <autobahn.wamp.test.test_serializer.TestSerializer > testMethod=test_crosstrip> > > def test_crosstrip(self): > """ > Test cross-tripping over 2 serializers (as is done by WAMP routers). > """ > for ser1 in self._test_serializers: > > for contains_binary, msg in self._test_messages: > > if not must_skip(ser1, contains_binary): > # serialize message > payload, binary = ser1.serialize(msg) > > # unserialize message again > msg1 = ser1.unserialize(payload, binary) > msg1 = msg1[0] > > for ser2 in self._test_serializers: > > if not must_skip(ser2, contains_binary): > # serialize message > payload, binary = ser2.serialize(msg1) > > # unserialize message again > > msg2 = ser2.unserialize(payload, binary) > > autobahn/wamp/test/test_serializer.py:201: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <autobahn.wamp.serializer.MsgPackSerializer object at 0x7f05673a70a0> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > isBinary = True > > def unserialize(self, payload, isBinary=None): > """ > Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize` > """ > if isBinary is not None: > if isBinary != self._serializer.BINARY: > raise ProtocolError("invalid serialization of WAMP message > (binary {0}, but expected {1})".format(isBinary, self._serializer.BINARY)) > > try: > raw_msgs = self._serializer.unserialize(payload) > except Exception as e: > > raise ProtocolError("invalid serialization of WAMP message > > ({0})".format(e)) > E autobahn.wamp.exception.ProtocolError: invalid serialization of > WAMP message (module 'collections' has no attribute 'Hashable') > > autobahn/wamp/serializer.py:106: ProtocolError > ----------------------------- Captured stdout call > ----------------------------- > Testing WAMP serializers ['json', 'json.batched', 'msgpack', > 'msgpack.batched', 'cbor', 'cbor.batched', 'ubjson', 'ubjson.batched'] with > 59 WAMP test messages > ________________________ TestSerializer.test_roundtrip > _________________________ > > self = <autobahn.wamp.serializer.MsgPackSerializer object at 0x7f0567364e20> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > isBinary = True > > def unserialize(self, payload, isBinary=None): > """ > Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize` > """ > if isBinary is not None: > if isBinary != self._serializer.BINARY: > raise ProtocolError("invalid serialization of WAMP message > (binary {0}, but expected {1})".format(isBinary, self._serializer.BINARY)) > > try: > > raw_msgs = self._serializer.unserialize(payload) > > autobahn/wamp/serializer.py:104: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <autobahn.wamp.serializer.MsgPackObjectSerializer object at > 0x7f0567364d90> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > > def unserialize(self, payload): > """ > Implements > :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize` > """ > > if self._batched: > msgs = [] > N = len(payload) > i = 0 > while i < N: > # read message length prefix > if i + 4 > N: > raise Exception("batch format error [1]") > l = struct.unpack("!L", payload[i:i + 4])[0] > > # read message data > if i + 4 + l > N: > raise Exception("batch format error [2]") > data = payload[i + 4:i + 4 + l] > > # append parsed raw message > msgs.append(umsgpack.unpackb(data)) > > # advance until everything consumed > i = i + 4 + l > > if i != N: > raise Exception("batch format error [3]") > return msgs > > else: > > unpacked = umsgpack.unpackb(payload) > > autobahn/wamp/serializer.py:348: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > s = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80', options = {} > > def _unpackb3(s, **options): > """ > Deserialize MessagePack bytes into a Python object. > > Args: > s: a 'bytes' or 'bytearray' containing serialized MessagePack > bytes > > Kwargs: > ext_handlers (dict): dictionary of Ext handlers, mapping integer > Ext > type to a callable that unpacks an instance > of > Ext into an object > use_ordered_dict (bool): unpack maps into OrderedDict, instead of > unordered dict (default False) > allow_invalid_utf8 (bool): unpack invalid strings into instances > of > InvalidString, for access to the bytes > (default False) > > Returns: > A Python object. > > Raises: > TypeError: > Packed data type is neither 'bytes' nor 'bytearray'. > InsufficientDataException(UnpackException): > Insufficient data to unpack the serialized object. > InvalidStringException(UnpackException): > Invalid UTF-8 string encountered during unpacking. > ReservedCodeException(UnpackException): > Reserved code encountered during unpacking. > UnhashableKeyException(UnpackException): > Unhashable key encountered during map unpacking. > The serialized map cannot be deserialized into a Python > dictionary. > DuplicateKeyException(UnpackException): > Duplicate key encountered during map unpacking. > > Example: > >>> umsgpack.unpackb(b'\x82\xa7compact\xc3\xa6schema\x00') > {'compact': True, 'schema': 0} > >>> > """ > if not isinstance(s, (bytes, bytearray)): > raise TypeError("packed data must be type 'bytes' or 'bytearray'") > > return _unpack(io.BytesIO(s), options) > > /usr/lib/python3/dist-packages/umsgpack.py:867: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > fp = <_io.BytesIO object at 0x7f056700e7f0>, options = {} > > def _unpack(fp, options): > code = _read_except(fp, 1) > > return _unpack_dispatch_table[code](code, fp, options) > > /usr/lib/python3/dist-packages/umsgpack.py:693: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > code = b'\x93', fp = <_io.BytesIO object at 0x7f056700e7f0>, options = {} > > def _unpack_array(code, fp, options): > if (ord(code) & 0xf0) == 0x90: > length = (ord(code) & ~0xf0) > elif code == b'\xdc': > length = struct.unpack(">H", _read_except(fp, 2))[0] > elif code == b'\xdd': > length = struct.unpack(">I", _read_except(fp, 4))[0] > else: > raise Exception("logic error, not array: 0x%02x" % ord(code)) > > > return [_unpack(fp, options) for i in xrange(length)] > > /usr/lib/python3/dist-packages/umsgpack.py:652: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > .0 = <range_iterator object at 0x7f0567367600> > > > return [_unpack(fp, options) for i in xrange(length)] > > /usr/lib/python3/dist-packages/umsgpack.py:652: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > fp = <_io.BytesIO object at 0x7f056700e7f0>, options = {} > > def _unpack(fp, options): > code = _read_except(fp, 1) > > return _unpack_dispatch_table[code](code, fp, options) > > /usr/lib/python3/dist-packages/umsgpack.py:693: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > code = b'\x81', fp = <_io.BytesIO object at 0x7f056700e7f0>, options = {} > > def _unpack_map(code, fp, options): > if (ord(code) & 0xf0) == 0x80: > length = (ord(code) & ~0xf0) > elif code == b'\xde': > length = struct.unpack(">H", _read_except(fp, 2))[0] > elif code == b'\xdf': > length = struct.unpack(">I", _read_except(fp, 4))[0] > else: > raise Exception("logic error, not map: 0x%02x" % ord(code)) > > d = {} if not options.get('use_ordered_dict') else > collections.OrderedDict() > for _ in xrange(length): > # Unpack key > k = _unpack(fp, options) > > if isinstance(k, list): > # Attempt to convert list into a hashable tuple > k = _deep_list_to_tuple(k) > > elif not isinstance(k, collections.Hashable): > E AttributeError: module 'collections' has no attribute 'Hashable' > > /usr/lib/python3/dist-packages/umsgpack.py:677: AttributeError > > During handling of the above exception, another exception occurred: > > self = <autobahn.wamp.test.test_serializer.TestSerializer > testMethod=test_roundtrip> > > def test_roundtrip(self): > """ > Test round-tripping over each serializer. > """ > for ser in self._test_serializers: > > for contains_binary, msg in self._test_messages: > > if not must_skip(ser, contains_binary): > # serialize message > payload, binary = ser.serialize(msg) > > # unserialize message again > > msg2 = ser.unserialize(payload, binary) > > autobahn/wamp/test/test_serializer.py:173: > _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ > _ > > self = <autobahn.wamp.serializer.MsgPackSerializer object at 0x7f0567364e20> > payload = b'\x93\x01\xa6realm1\x81\xa5roles\x81\xaasubscriber\x80' > isBinary = True > > def unserialize(self, payload, isBinary=None): > """ > Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize` > """ > if isBinary is not None: > if isBinary != self._serializer.BINARY: > raise ProtocolError("invalid serialization of WAMP message > (binary {0}, but expected {1})".format(isBinary, self._serializer.BINARY)) > > try: > raw_msgs = self._serializer.unserialize(payload) > except Exception as e: > > raise ProtocolError("invalid serialization of WAMP message > > ({0})".format(e)) > E autobahn.wamp.exception.ProtocolError: invalid serialization of > WAMP message (module 'collections' has no attribute 'Hashable') > > autobahn/wamp/serializer.py:106: ProtocolError > ----------------------------- Captured stdout call > ----------------------------- > Testing WAMP serializers ['json', 'json.batched', 'msgpack', > 'msgpack.batched', 'cbor', 'cbor.batched', 'ubjson', 'ubjson.batched'] with > 59 WAMP test messages > =============================== warnings summary > =============================== > autobahn/util.py:709 > /<<PKGBUILDDIR>>/autobahn/util.py:709: DeprecationWarning: invalid escape > sequence '\.' > return [re.compile('^' + wc.replace('.', '\.').replace('*', '.*') + '$') > for wc in wildcards] > > autobahn/wamp/uri.py:211 > /<<PKGBUILDDIR>>/autobahn/wamp/uri.py:211: DeprecationWarning: invalid > escape sequence '\-' > pl.append("([a-z0-9][a-z0-9_\-]*)") > > autobahn/wamp/uri.py:220 > /<<PKGBUILDDIR>>/autobahn/wamp/uri.py:220: DeprecationWarning: invalid > escape sequence '\.' > p = "^" + "\.".join(pl) + "$" > > autobahn/wamp/test/test_auth.py:92 > /<<PKGBUILDDIR>>/autobahn/wamp/test/test_auth.py:92: DeprecationWarning: > invalid escape sequence '\d' > pat = re.compile(u"\d{6}") > > autobahn/wamp/test/test_auth.py:99 > /<<PKGBUILDDIR>>/autobahn/wamp/test/test_auth.py:99: DeprecationWarning: > invalid escape sequence '\d' > pat = re.compile(u"\d{6}") > > <unknown>:92 > <unknown>:92: DeprecationWarning: invalid escape sequence '\d' > > <unknown>:99 > <unknown>:99: DeprecationWarning: invalid escape sequence '\d' > > autobahn/wamp/test/test_runner.py:171 > /<<PKGBUILDDIR>>/autobahn/wamp/test/test_runner.py:171: DeprecationWarning: > invalid escape sequence '\.' > 'argument\. Did you mean to use "wss:"\?$') > > autobahn/wamp/test/test_runner.py:203 > /<<PKGBUILDDIR>>/autobahn/wamp/test/test_runner.py:203: DeprecationWarning: > invalid escape sequence '\.' > 'argument\. Did you mean to use "wss:"\?$') > > <unknown>:171 > <unknown>:171: DeprecationWarning: invalid escape sequence '\.' > > <unknown>:203 > <unknown>:203: DeprecationWarning: invalid escape sequence '\.' > > autobahn/wamp/test/test_runner.py::TestApplicationRunner::test_conflict_SSLContext_with_ws_url > autobahn/wamp/test/test_runner.py::TestApplicationRunner::test_conflict_SSL_True_with_ws_url > /<<PKGBUILDDIR>>/autobahn/asyncio/websocket.py:286: DeprecationWarning: > There is no current event loop > self.loop = loop or asyncio.get_event_loop() > > autobahn/websocket/test/test_protocol.py: 39 warnings > /usr/lib/python3/dist-packages/txaio/aio.py:323: DeprecationWarning: There > is no current event loop > return asyncio.get_event_loop() > > -- Docs: https://docs.pytest.org/en/stable/warnings.html > =========================== short test summary info > ============================ > FAILED autobahn/wamp/test/test_serializer.py::TestSerializer::test_crosstrip > FAILED autobahn/wamp/test/test_serializer.py::TestSerializer::test_roundtrip > ============ 2 failed, 159 passed, 8 skipped, 52 warnings in 0.84s > ============= > make[1]: *** [debian/rules:22: override_dh_auto_test] Error 1 The full build log is available from: http://qa-logs.debian.net/2021/12/20/python-autobahn_17.10.1+dfsg1-7_unstable.log A list of current common problems and possible solutions is available at http://wiki.debian.org/qa.debian.org/FTBFS . You're welcome to contribute! If you reassign this bug to another package, please marking it as 'affects'-ing this package. See https://www.debian.org/Bugs/server-control#affects If you fail to reproduce this, please provide a build log and diff it with mine so that we can identify if something relevant changed in the meantime.