* Refactor integration startup time tracking to reduce overhead
- Use monotonic time for watching integration startup time as it avoids incorrect values if time moves backwards because of ntp during startup and reduces many time conversions since we want durations in seconds and not local time
- Use loop scheduling instead of a task
- Moves all the dispatcher logic into the new _WatchPendingSetups
* websocket as well
* tweaks
* simplify logic
* preserve logic
* preserve logic
* lint
* adjust
* Avoid creating tasks for checking integrations platforms
This is a followup to #110743 to avoid creating a task to check
if the integration platform exists. We created tasks because
we needed to await async_get_integrations but since its always
called from EVENT_COMPONENT_LOADED firing, we can use the
async_get_loaded_integration version which does not need
to be awaited. This eliminates one task for every loaded
component
* there is no more race risk
* reduce
* coro or callback
* reduce
* tweak
* race safe
* fix type
* fixes
* use built-in helper to make it smaller
* use built-in helper to make it smaller
* use built-in helper to make it smaller
* add coverage to ensure exceptions are logged
* improve readability a bit
* platforms
* Improve performance of async_get_integration_with_requirements
- Migrate to the future pattern instead of using asyncio.Event
- Use sets in a few places to avoid linear searching
- Check the cache when processing deps so we do not
create tasks to process requirements for deps that
have already been processed
* name
* add concurrency test
* Update homeassistant/requirements.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/requirements.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/requirements.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Update homeassistant/requirements.py
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* reset_mock
---------
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* WIP test
* WIP
* WIP Reauth flow. Test fail otherways OK.
* Minor adjustments to tests
* Merge
* Merge
* Next level...
* Cleanup according to review
* It works!
* Simplify setup
* Remove default
* Remove files from PR
* Add back test_init
* Add back test_sensor
* Adjust error message
---------
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
reverts #110751 and replaces it with a change to wait for the
assist_pipeline.async_pipeline_from_audio_stream to be called
which will actually solve the problem and unblock #110743
* Add toggle service to climate
* Fix mqtt test
* Add comments
* Fix rebase
* Remove not needed properties
* Fix toggle service
* Fix test
* Test
* Mod mqtt test
---------
Co-authored-by: G Johansson <goran.johansson@shiftit.se>
* Fix recorder ws_info blocking the event loop
Fixes
```
2024-02-15 06:37:55.423 WARNING (MainThread) [asyncio] Executing <Task pending name=websocket_api.async:ws_info coro=<_handle_async_response() running at /usr/src/homeassistant/homeassistant/components/websocket_api/decorators.py:26> wait_for=<_GatheringFuture pending cb=[Task.task_wakeup()] created at /usr/local/lib/python3.12/asyncio/tasks.py:712> cb=[set.remove()] created at /usr/src/homeassistant/homeassistant/core.py:653> took 0.332 seconds
```
* no instance did not actually work
current_average_demand and maximum_demand_current_month are missing a state class, which gives errors in the statistics tab in HA.
So adding them to the sensor.
* Move late import of config flows in loader to load time
There does not seem to be any reason to import the
generated flows late. Import them at load time
with the rest of the generated files
* tests
* Update wallbox plugin version
Closes#110566
* Fix unit tests failing
* Fix import order
---------
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
* Add some myuplink tests
* Update fixtures for api endpoints
* Adjust according to review
* Update snapshot file
* Remove unneded fixtures and improve typing
* More cleanup
* One last session scope removed
* Fix typing
---------
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>