ical-sensor-homeassistant icon indicating copy to clipboard operation
ical-sensor-homeassistant copied to clipboard

Detected blocking call to open with args

Open golles opened this issue 1 year ago • 1 comments

I'm on commit: 505e29e8c4308deea169b94073ad14b86db7bba9 (HEAD -> master, tag: 1.7.1, origin/master, origin/HEAD)

2024-09-24 22:19:19.897 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open with args ('/usr/local/lib/python3.12/site-packages/pytz/zoneinfo/Africa/Abidjan', 'rb') inside the event loop by custom integration 'ical' at custom_components/ical/__init__.py, line 138: event_list = icalendar.Calendar.from_ical(text.replace("\x00", "")) (offender: /usr/local/lib/python3.12/site-packages/pytz/__init__.py, line 108: return open(filename, 'rb')), please create a bug report at https://github.com/tybritten/ical-sensor-homeassistant/issues
For developers, please see https://developers.home-assistant.io/docs/asyncio_blocking_operations/#open
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 "/config/custom_components/ical/sensor.py", line 33, in async_setup_entry
    await ical_events.update()
  File "/config/custom_components/ical/__init__.py", line 138, in update
    event_list = icalendar.Calendar.from_ical(text.replace("\x00", ""))

golles avatar Sep 24 '24 20:09 golles

Same issue This doc is relevant i think https://developers.home-assistant.io/blog/2024/05/19/fix_zoneinfo_blocking_io/

Martinvdm avatar Oct 28 '24 18:10 Martinvdm

Is this stil contributed?

Martinvdm avatar Jan 08 '25 18:01 Martinvdm

Yes, sorry haven't had a chance to look at this yet. Pull requests are always welcome

tybritten avatar Jan 08 '25 19:01 tybritten

Yes, sorry haven't had a chance to look at this yet. Pull requests are always welcome

I donot know how to test this in depth as this is an unknown dev-area for me...this however keeps it working and no more error

        if text is not None:
            # Some calendars are for some reason filled with NULL-bytes.
            # They break the parsing, so we get rid of them
            loop = asyncio.get_running_loop()
            event_list = await loop.run_in_executor(None, icalendar.Calendar.from_ical, text.replace("\x00", ""))
            #event_list = icalendar.Calendar.from_ical(text.replace("\x00", ""))

vingerha avatar May 27 '25 06:05 vingerha

I really don't understand how that replace() can be blocking. The original error seems to be related to opening til timezone-file. But maybe that is triggered by icalendar.Calendar.from_ical?

Anyway, if that works - I am sure a PR would be welcome.

Olen avatar May 27 '25 07:05 Olen

The issue is calling the 'open' in pytz which is a blocking-call from the async (for as far as I can tell), as pytz cannot be changed, one needs to add a bit of code to circumvent this. Wrt to a PR, I am not 100% sure if this is all correct. In my dev system I added one calendar which did not threw the error, then I added another which did...and with this 'fix'(?) it still works and no error. I will add a PR but please do test this thoroughly

vingerha avatar May 27 '25 07:05 vingerha

Thanks for raising a PR with a potential fix, I'm not going to test it as I'm no longer using this component, I'm using the built-in https://www.home-assistant.io/integrations/remote_calendar, which works for my calendars. Therefore I'm going to unsubscribe from the issue.

golles avatar May 27 '25 10:05 golles

v 1.7.3 released with the fix

tybritten avatar May 27 '25 19:05 tybritten