alandtse / alexa_media_player

This is a custom component to allow control of Amazon Alexa devices in Home Assistant using the unofficial Alexa API.
Apache License 2.0
1.44k stars 277 forks source link

2024.9 blocks integration load #2492

Open Petro31 opened 2 weeks ago

Petro31 commented 2 weeks ago

IMPORTANT: Please search the issues, including closed issues, and the FAQ before opening a new issue. The template is mandatory; failure to use it will result in issue closure.

Describe the bug

2024.9 causes this error to appear. Haven't investigated, just documenting for now. Causes entire integration to fail to load, however HA believes it loads.

To Reproduce

  1. Install beta

Expected behavior

Integration loads.

Screenshots

System details

Debug Logs (alexa_media & alexapy) Please provide logs.

2024-08-28 16:17:20.339 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to load_verify_locations with args (<ssl.SSLContext object at 0x7fe134eecf50>, '/usr/local/lib/python3.12/site-packages/certifi/cacert.pem', None, None) inside the event loop by custom integration 'alexa_media' at custom_components/alexa_media/__init__.py, line 340: AlexaLogin( (offender: /usr/local/lib/python3.12/ssl.py, line 708: context.load_verify_locations(cafile, capath, cadata)), please create a bug report at https://github.com/alandtse/alexa_media_player/issues
For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#load_verify_locations
Traceback (most recent call last):
  File "<frozen runpy>", line 198, in _run_module_as_main
  File "<frozen runpy>", line 88, in _run_code
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 223, in <module>
    sys.exit(main())
  File "/usr/src/homeassistant/homeassistant/__main__.py", line 209, in main
    exit_code = runner.run(runtime_conf)
  File "/usr/src/homeassistant/homeassistant/runner.py", line 189, in run
    return loop.run_until_complete(setup_and_run_hass(runtime_config))
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 674, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 641, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1990, in _run_once
    handle._run()
  File "/usr/local/lib/python3.12/asyncio/events.py", line 88, in _run
    self._context.run(self._callback, *self._args)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 165, in async_setup_component
    result = await _async_setup_component(hass, domain, config)
  File "/usr/src/homeassistant/homeassistant/setup.py", line 461, in _async_setup_component
    await asyncio.gather(
  File "/usr/src/homeassistant/homeassistant/setup.py", line 463, in <genexpr>
    create_eager_task(
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 45, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 752, in async_setup_locked
    await self.async_setup(hass, integration=integration)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 604, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/config/custom_components/alexa_media/__init__.py", line 340, in async_setup_entry
    AlexaLogin(

Additional context

danielbrunt57 commented 2 weeks ago

No comment! Other integrations are also triggering the same WARNING...

jleinenbach commented 2 weeks ago

ChatGPT says that there's no easy way to fix these warnings and gave me this instead:

Plan for Reducing Blocking Calls in Home Assistant

This plan outlines a careful approach to reducing blocking calls in the Home Assistant environment, particularly focusing on the AlexaLogin and HTTP2EchoClient classes. The steps include identifying and isolating blocking operations, refactoring initialization processes, and thorough testing to ensure stability.

1. Analyze and Identify Blocking Calls

2. Isolate Blocking Sections

3. Refactor the Initialization Process

4. Test the Refactored Code

5. Iterate and Optimize

Conclusion

This plan carefully balances the need to reduce blocking operations with the requirement to maintain system stability. By methodically isolating and handling blocking calls, while thoroughly testing and optimizing, we can achieve a more responsive and efficient Home Assistant environment.