iMicknl / python-overkiz-api

Async Python wrapper to interact with internal Somfy TaHoma API, or other OverKiz API's.
MIT License
46 stars 29 forks source link

Tests are failing with aiohttp 3.10.1 #1323

Closed mweinelt closed 1 week ago

mweinelt commented 1 month ago

Hi!

We upgraded aiohttp from 3.9.x to 3.10.1 and started seeing the following test fail on pyoverkiz 1.13.14:

Full log

ERROR tests/test_client.py::TestOverkizClient::test_get_api_type_cloud - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_api_type_local - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_devices_basic - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_fetch_events_basic[events.json-16] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_fetch_events_basic[local_events.json-3] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_fetch_events_simple_cast - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_fetch_events_casting[events.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_fetch_events_casting[local_events.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_3_gateways.json-37-3] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_cozytouch.json-12-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_cozytouch_v2.json-5-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_cozytouch_2.json-15-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_cozytouch_3.json-15-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_hi_kumo.json-3-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_hi_kumo_2.json-3-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_hi_kumo_8_gateways.json-16-8] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_nexity.json-18-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_nexity_2.json-17-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_rexel.json-18-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_1.json-1-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_3.json-39-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_climate.json-19-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_oceania.json-3-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_pro.json-12-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_hue_and_low_speed.json-40-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_siren_io.json-11-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_siren_rtd.json-31-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_tahoma_be.json-15-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_local.json-3-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_local_tahoma.json-8-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup[setup_local_with_climate.json-33-1] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_3_gateways.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_cozytouch.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_cozytouch_v2.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_cozytouch_2.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_cozytouch_3.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_cozytouch_4.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_hi_kumo.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_hi_kumo_2.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_hi_kumo_8_gateways.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_nexity.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_nexity_2.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_rexel.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_1.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_3.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_climate.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_oceania.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_pro.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_hue_and_low_speed.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_siren_io.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_siren_rtd.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_tahoma_be.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_local.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_local_tahoma.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_diagnostic_data[setup_local_with_climate.json] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/503-empty.html-ServiceUnavailableException-503] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/503-maintenance.html-MaintenanceException-503] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/access-denied-to-gateway.json-AccessDeniedToGatewayException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/bad-credentials.json-BadCredentialsException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/missing-authorization-token.json-MissingAuthorizationTokenException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/no-registered-event-listener.json-NoRegisteredEventListenerException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/too-many-concurrent-requests.json-TooManyConcurrentRequestsException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/too-many-executions.json-TooManyExecutionsException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[cloud/too-many-requests.json-TooManyRequestsException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-bad-parameters.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-bus-error.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-malformed-action-group.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-malformed-fetch-id.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-missing-execution-id.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-missing-parameters.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-no-registered-event-listener.json-NoRegisteredEventListenerException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-no-such-device.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-unknown-object.json-UnknownObjectException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/400-unspecified-error.json-OverkizException-400] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/401-missing-authorization-token.json-MissingAuthorizationTokenException-401] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_check_response_exception_handling[local/401-not-authenticated.json-NotAuthenticatedException-401] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup_options - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup_option[setup-options-developerMode.json-developerMode-1234-5678-1234-Option] - RuntimeError: no running event loop
ERROR tests/test_client.py::TestOverkizClient::test_get_setup_option[setup-options-empty.json-test-None] - RuntimeError: no running event loop

The tests all fail in the same way:

__________ ERROR at setup of TestOverkizClient.test_get_setup_options __________

self = <tests.test_client.TestOverkizClient object at 0x7ffff4d8d8e0>

    @fixture
    def client(self):
>       return OverkizClient("username", "password", SUPPORTED_SERVERS["somfy_europe"])

tests/test_client.py:24: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
pyoverkiz/client.py:147: in __init__
    self.session = session if session else ClientSession()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <aiohttp.client.ClientSession object at 0x7ffff4bdbef0>, base_url = None

    def __init__(
        self,
        base_url: Optional[StrOrURL] = None,
        *,
        connector: Optional[BaseConnector] = None,
        loop: Optional[asyncio.AbstractEventLoop] = None,
        cookies: Optional[LooseCookies] = None,
        headers: Optional[LooseHeaders] = None,
        skip_auto_headers: Optional[Iterable[str]] = None,
        auth: Optional[BasicAuth] = None,
        json_serialize: JSONEncoder = json.dumps,
        request_class: Type[ClientRequest] = ClientRequest,
        response_class: Type[ClientResponse] = ClientResponse,
        ws_response_class: Type[ClientWebSocketResponse] = ClientWebSocketResponse,
        version: HttpVersion = http.HttpVersion11,
        cookie_jar: Optional[AbstractCookieJar] = None,
        connector_owner: bool = True,
        raise_for_status: Union[
            bool, Callable[[ClientResponse], Awaitable[None]]
        ] = False,
        read_timeout: Union[float, _SENTINEL] = sentinel,
        conn_timeout: Optional[float] = None,
        timeout: Union[object, ClientTimeout] = sentinel,
        auto_decompress: bool = True,
        trust_env: bool = False,
        requote_redirect_url: bool = True,
        trace_configs: Optional[List[TraceConfig]] = None,
        read_bufsize: int = 2**16,
        max_line_size: int = 8190,
        max_field_size: int = 8190,
        fallback_charset_resolver: _CharsetResolver = lambda r, b: "utf-8",
    ) -> None:
        # We initialise _connector to None immediately, as it's referenced in __del__()
        # and could cause issues if an exception occurs during initialisation.
        self._connector: Optional[BaseConnector] = None

        if loop is None:
            if connector is not None:
                loop = connector._loop

>       loop = loop or asyncio.get_running_loop()
E       RuntimeError: no running event loop
iMicknl commented 1 month ago

Thanks @mweinelt! I will have a look and release a new version in the coming days.

iMicknl commented 1 week ago

Thanks for reporting. Fixed in v1.14.0