Detected blocking call to open with args
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", ""))
Same issue This doc is relevant i think https://developers.home-assistant.io/blog/2024/05/19/fix_zoneinfo_blocking_io/
Is this stil contributed?
Yes, sorry haven't had a chance to look at this yet. Pull requests are always welcome
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", ""))
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.
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
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.
v 1.7.3 released with the fix