Package: src:pyisy
Version: 3.6.1-1
Severity: serious
Tags: ftbfs forky sid
User: [email protected]
Usertags: aiohttp-3.14

Dear maintainer:

During a rebuild of all packages in unstable, this package failed to build.

Below you will find the last part of the build log (probably the most
relevant part, but not necessarily). If required, the full build log
is available here:

https://people.debian.org/~sanvila/build-logs/202606/

About the archive rebuild: The build was made on virtual machines from AWS,
using sbuild and a reduced chroot with only build-essential packages.

If you cannot reproduce the bug please contact me privately, as I
am willing to provide ssh access to a virtual machine where the bug is
fully reproducible.

If this is really a bug in one of the build-depends, please use
reassign and add an affects on src:pyisy, so that this is still
visible in the BTS web page for this package.

Thanks.

--------------------------------------------------------------------------------
[...]
 debian/rules clean
dh clean --buildsystem=pybuild
   dh_auto_clean -O--buildsystem=pybuild
   dh_autoreconf_clean -O--buildsystem=pybuild
   dh_clean -O--buildsystem=pybuild
 debian/rules binary
dh binary --buildsystem=pybuild
   dh_update_autotools_config -O--buildsystem=pybuild
   dh_autoreconf -O--buildsystem=pybuild
   dh_auto_configure -O--buildsystem=pybuild
   dh_auto_build -O--buildsystem=pybuild
I: pybuild plugin_pyproject:142: Building wheel for python3.14 with "build" 
module
I: pybuild base:385: python3.14 -m build --skip-dependency-check --no-isolation 
--wheel --outdir /<<PKGBUILDDIR>>/.pybuild/cpython3_3.14  

[... snipped ...]

    response_or_exc = await matcher.build_response(
/usr/lib/python3/dist-packages/aioresponses/core.py:202: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aioresponses.core.RequestMatch object at 0x7f7dd28a7b90>
url = URL('http://h/desc'), method = 'get'
request_headers = {'Accept-Encoding': 'gzip, deflate', 'Connection': 
'keep-alive', 'Keep-Alive': '5000'}
status = 200, body = b'<root/>', content_type = 'application/json'
payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only 
argument: 'stream_writer'

/usr/lib/python3/dist-packages/aioresponses/core.py:171: TypeError
________________ test_request_retry404_eventually_returns_none _________________

conn = <pyisy.connection.Connection object at 0x7f7dd235f8b0>

    async def test_request_retry404_eventually_returns_none(conn: Connection) 
-> None:
        """``retry404=True`` from #184 makes 404s fall into the retry loop
        instead of returning immediately. After the retry budget is spent
        the result is still None."""
        url = conn.compile_url(["nodes", "X", "cmd", "DON"])
        with aioresponses() as mocked, patch("pyisy.connection.RETRY_BACKOFF", 
[0, 0, 0, 0, 0]):
            mocked.get(url, status=404, repeat=True)
>           result = await conn.request(url, retry404=True)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_connection_extras.py:459: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pyisy/connection.py:177: in request
    self.req_session.get(
/usr/lib/python3/dist-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
/usr/lib/python3.13/unittest/mock.py:2332: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/aioresponses/core.py:512: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/aioresponses/core.py:456: in match
    response_or_exc = await matcher.build_response(
/usr/lib/python3/dist-packages/aioresponses/core.py:202: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aioresponses.core.RequestMatch object at 0x7f7dd28a7f50>
url = URL('http://h/rest/nodes/X/cmd/DON'), method = 'get'
request_headers = {'Accept-Encoding': 'gzip, deflate', 'Connection': 
'keep-alive', 'Keep-Alive': '5000'}
status = 404, body = b'', content_type = 'application/json', payload = None
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Not Found'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only 
argument: 'stream_writer'

/usr/lib/python3/dist-packages/aioresponses/core.py:171: TypeError
________________ test_test_connection_returns_config_on_success ________________

conn = <pyisy.connection.Connection object at 0x7f7dd235e990>

    async def test_test_connection_returns_config_on_success(conn: Connection) 
-> None:
        url = conn.compile_url(["config"])
        body = "<configuration/>"
        with aioresponses() as mocked:
            mocked.get(url, status=200, body=body)
>           result = await conn.test_connection()
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/test_connection_extras.py:468: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pyisy/connection.py:109: in test_connection
    config = await self.get_config(retries=None)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyisy/connection.py:331: in get_config
    return await self.request(req_url, retries=retries)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pyisy/connection.py:177: in request
    self.req_session.get(
/usr/lib/python3/dist-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
/usr/lib/python3.13/unittest/mock.py:2332: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/aioresponses/core.py:512: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3/dist-packages/aioresponses/core.py:456: in match
    response_or_exc = await matcher.build_response(
/usr/lib/python3/dist-packages/aioresponses/core.py:202: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aioresponses.core.RequestMatch object at 0x7f7dd28a77d0>
url = URL('http://h/rest/config'), method = 'get'
request_headers = {'Accept-Encoding': 'gzip, deflate', 'Connection': 
'keep-alive', 'Keep-Alive': '5000'}
status = 200, body = b'<configuration/>', content_type = 'application/json'
payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only 
argument: 'stream_writer'

/usr/lib/python3/dist-packages/aioresponses/core.py:171: TypeError
=============================== warnings summary ===============================
tests/test_climate_lock.py: 31 warnings
tests/test_connection.py: 11 warnings
tests/test_connection_extras.py: 25 warnings
tests/test_isy.py: 9 warnings
tests/test_isy_extras.py: 20 warnings
tests/test_node_actions.py: 23 warnings
tests/test_nodes_extras.py: 83 warnings
tests/test_program_actions.py: 12 warnings
tests/test_programs_extras.py: 32 warnings
tests/test_update_methods.py: 17 warnings
tests/test_variables_extras.py: 26 warnings
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/pyisy/connection.py:91: 
DeprecationWarning: BasicAuth is deprecated and will be removed in aiohttp 4.0; 
use aiohttp.encode_basic_auth() with headers={'Authorization': ...} instead
    self._auth = aiohttp.BasicAuth(self._username, self._password)

tests/test_connection.py: 5 warnings
tests/test_connection_extras.py: 19 warnings
  /usr/lib/python3.13/copyreg.py:99: DeprecationWarning: BasicAuth is 
deprecated and will be removed in aiohttp 4.0; use aiohttp.encode_basic_auth() 
with headers={'Authorization': ...} instead
    return cls.__new__(cls, *args)

tests/test_isy.py: 1 warning
tests/test_websocket_lifecycle.py: 25 warnings
tests/test_websocket_router.py: 27 warnings
  /<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build/pyisy/events/websocket.py:80: 
DeprecationWarning: BasicAuth is deprecated and will be removed in aiohttp 4.0; 
use aiohttp.encode_basic_auth() with headers={'Authorization': ...} instead
    self._auth = aiohttp.BasicAuth(self._username, self._password)

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
--------------------------- snapshot report summary ----------------------------
2 snapshots passed.
=========================== short test summary info ============================
FAILED tests/test_connection.py::test_request_401_raises_invalid_auth - TypeE...
FAILED tests/test_connection.py::test_request_404_returns_none_without_retry404
FAILED 
tests/test_connection.py::test_request_404_with_ok404_returns_empty_string
FAILED tests/test_connection.py::test_request_200_returns_body - TypeError: C...
FAILED tests/test_connection_extras.py::test_ping_returns_true_on_response - ...
FAILED 
tests/test_connection_extras.py::test_request_503_falls_through_to_retry_and_returns_none
FAILED 
tests/test_connection_extras.py::test_request_empty_xml_response_falls_through_to_retry
FAILED 
tests/test_connection_extras.py::test_request_legacy_reneg_failure_enables_compat_and_retries
FAILED tests/test_connection_extras.py::test_request_non_rest_url_does_not_crash
FAILED 
tests/test_connection_extras.py::test_request_retry404_eventually_returns_none
FAILED 
tests/test_connection_extras.py::test_test_connection_returns_config_on_success
================ 11 failed, 432 passed, 366 warnings in 14.38s =================
E: pybuild pybuild:485: test: plugin pyproject failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.13/build; python3.13 -m pytest tests
dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.14 
3.13" --parallel=2 returned exit code 13
make: *** [debian/rules:4: binary] Error 25
dpkg-buildpackage: error: debian/rules binary subprocess failed with exit 
status 2
--------------------------------------------------------------------------------

Reply via email to