GuyKh / ims-custom-component

The Israel Meteorological Service (IMS) integration component for home assistant
MIT License
43 stars 8 forks source link

Detected blocking call to open inside the event loop #89

Closed GuyKh closed 3 months ago

GuyKh commented 5 months ago
2024-06-06 10:21:30.627 WARNING (MainThread) [homeassistant.util.loop] Detected blocking call to open inside the event loop by custom integration 'ims' at custom_components/ims/sensor.py, line 401: self._attr_native_value = data.current_weather.forecast_time.astimezone(timezone('Asia/Jerusalem')) (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/t0mer/ims-custom-component/issues
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 190, in run
    return loop.run_until_complete(setup_and_run_hass(runtime_config))
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 672, in run_until_complete
    self.run_forever()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 639, in run_forever
    self._run_once()
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 1988, 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/config_entries.py", line 742, in async_setup_locked
    await self.async_setup(hass, integration=integration)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 594, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/config/custom_components/ims/__init__.py", line 97, in async_setup_entry
    await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2032, in async_forward_entry_setups
    await asyncio.gather(
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2034, in <genexpr>
    create_eager_task(
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2081, in _async_forward_entry_setup
    await entry.async_setup(self.hass, integration=integration)
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 594, in async_setup
    result = await component.async_setup_entry(hass, self)
  File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 134, in async_setup_entry
    return await component.async_setup_entry(entry)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 196, in async_setup_entry
    return await self._platforms[key].async_setup_entry(config_entry]
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 333, in async_setup_entry
    return await self._async_setup_platform(async_create_setup_awaitable)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 363, in _async_setup_platform
    awaitable = create_eager_task(awaitable, loop=hass.loop)
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/config/custom_components/ims/sensor.py", line 291, in async_setup_entry
    async_add_entities(sensors, update_before_add=True)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 515, in _async_schedule_add_entities_for_entry
    task = self.config_entry.async_create_task(
  File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1134, in async_create_task
    task = hass.async_create_task_internal(
  File "/usr/src/homeassistant/homeassistant/core.py", line 828, in async_create_task_internal
    task = create_eager_task(target, name=name, loop=self.loop)
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 649, in async_add_entities
    await add_func(coros, entities, timeout)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 555, in _async_add_and_update_entities
    tasks = [create_eager_task(coro, loop=self.hass.loop) for coro in coros]
  File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
    return Task(coro, loop=loop, name=name, eager_start=True)
  File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 914, in _async_add_entity
    await entity.add_to_platform_finish()
  File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1354, in add_to_platform_finish
    await self.async_added_to_hass()
  File "/config/custom_components/ims/__init__.py", line 209, in async_added_to_hass
    self._update_from_latest_data()
  File "/config/custom_components/ims/sensor.py", line 401, in _update_from_latest_data
    self._attr_native_value = data.current_weather.forecast_time.astimezone(timezone('Asia/Jerusalem'))
ayavilevich commented 3 months ago

Potentially the same or similar warning I get

2024-07-11 15:54:22.004 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 'ims' at custom_components/ims/sensor.py, line 401: self._attr_native_value = data.current_weather.forecast_time.astimezone(timezone('Asia/Jerusalem')) (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/GuyKh/ims-custom-component/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 190, 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/config_entries.py", line 734, in async_setup_locked
await self.async_setup(hass, integration=integration)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 586, in async_setup
result = await component.async_setup_entry(hass, self)
File "/config/custom_components/ims/__init__.py", line 97, in async_setup_entry
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2059, in async_forward_entry_setups
await self._async_forward_entry_setups_locked(entry, platforms)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2070, in _async_forward_entry_setups_locked
await asyncio.gather(
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2072, in <genexpr>
create_eager_task(
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
return Task(coro, loop=loop, name=name, eager_start=True)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 2152, in _async_forward_entry_setup
await entry.async_setup(self.hass, integration=integration)
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 586, in async_setup
result = await component.async_setup_entry(hass, self)
File "/usr/src/homeassistant/homeassistant/components/sensor/__init__.py", line 130, in async_setup_entry
return await component.async_setup_entry(entry)
File "/usr/src/homeassistant/homeassistant/helpers/entity_component.py", line 195, in async_setup_entry
return await self._platforms[key].async_setup_entry(config_entry)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 331, in async_setup_entry
return await self._async_setup_platform(async_create_setup_awaitable)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 361, in _async_setup_platform
awaitable = create_eager_task(awaitable, loop=hass.loop)
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
return Task(coro, loop=loop, name=name, eager_start=True)
File "/config/custom_components/ims/sensor.py", line 291, in async_setup_entry
async_add_entities(sensors, update_before_add=True)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 513, in _async_schedule_add_entities_for_entry
task = self.config_entry.async_create_task(
File "/usr/src/homeassistant/homeassistant/config_entries.py", line 1126, in async_create_task
task = hass.async_create_task_internal(
File "/usr/src/homeassistant/homeassistant/core.py", line 830, in async_create_task_internal
task = create_eager_task(target, name=name, loop=self.loop)
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
return Task(coro, loop=loop, name=name, eager_start=True)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 647, in async_add_entities
await add_func(coros, entities, timeout)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 553, in _async_add_and_update_entities
tasks = [create_eager_task(coro, loop=self.hass.loop) for coro in coros]
File "/usr/src/homeassistant/homeassistant/util/async_.py", line 37, in create_eager_task
return Task(coro, loop=loop, name=name, eager_start=True)
File "/usr/src/homeassistant/homeassistant/helpers/entity_platform.py", line 912, in _async_add_entity
await entity.add_to_platform_finish()
File "/usr/src/homeassistant/homeassistant/helpers/entity.py", line 1361, in add_to_platform_finish
await self.async_added_to_hass()
File "/config/custom_components/ims/__init__.py", line 209, in async_added_to_hass
self._update_from_latest_data()
File "/config/custom_components/ims/sensor.py", line 401, in _update_from_latest_data
self._attr_native_value = data.current_weather.forecast_time.astimezone(timezone('Asia/Jerusalem'))
ayavilevich commented 3 months ago

Thanks. I looked at the code and added a question as a comment to make there there are no issues with the fix. https://github.com/GuyKh/ims-custom-component/pull/95/commits/fb632712adb20c616d1a046ba56e0b54fde57a2d#r1700561683