mirror of
https://github.com/home-assistant/supervisor.git
synced 2026-07-06 05:15:04 +01:00
3a010e9c5d
* apps: avoid blocking is_file() check in restore Restoring an app off a backup called `Path.is_file()` directly on the event loop to check whether the bundle contained an `image.tar`, which triggered a blockbuster BlockingError on `os.stat` in environments where blocking-call detection is enabled. Wrap the check in `self.sys_run_in_executor(...)` so the stat happens off the main thread, matching the pattern already used in `api/backups.py`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * tests: cover restore path where addon image is missing The blocking ``is_file()`` call that the previous commit replaced lived in the ``not instance.exists()`` branch of ``App.restore()`` -- reached only when the local Docker image for the addon is absent. Existing app-restore tests start from ``install_app_ssh`` / ``install_app_example`` and rely on the mocked ``docker images.inspect`` which always reports the image as present, so that branch never executed and blockbuster never had a chance to flag the blocking stat. Add a focused test that uninstalls the app after backup, patches ``DockerApp.exists`` to ``False``, and stubs ``install`` / ``import_image`` so the restore drives through the ``image.tar`` check. Verified that this test raises ``BlockingError: Blocking call to os.stat`` when run against the unpatched code. --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>