Skip to main content

Making http path registration async safe with `async_register_static_paths`

· One min read

hass.http.register_static_path is deprecated because it does blocking I/O in the event loop, instead call await hass.http.async_register_static_paths([StaticPathConfig(url_path, path, cache_headers)])

The arguments to async_register_static_paths are the same as register_static_path except they are wrapped in the StaticPathConfig dataclass and an Iterable of them is accepted to allow registering multiple paths at once to avoid multiple executor jobs.

For example, if your integration called hass.http.register_static_path("/integrations/photos", "/config/photos", True), it should now call await hass.http.async_register_static_paths([StaticPathConfig("/integrations/photos", "/config/photos", True)])

The StaticPathConfig dataclass should be imported from homeassistant.components.http

hass.http.register_static_path will be removed in 2025.7

Example

from pathlib import Path
from homeassistant.components.http import StaticPathConfig

should_cache = False
files_path = Path(__file__).parent / "static"
files2_path = Path(__file__).parent / "static2"

await hass.http.async_register_static_paths([
StaticPathConfig("/api/my_integration/static", str(files_path), should_cache),
StaticPathConfig("/api/my_integration/static2", str(files2_path), should_cache)
])