From 14e4216e290d27057c8580cba9076fd87c040fb3 Mon Sep 17 00:00:00 2001 From: Allen Porter Date: Tue, 21 Dec 2021 23:40:43 -0800 Subject: [PATCH] Put access to ffmpeg hass.data behind a method (#62570) * Put access to ffmpeg hass.data behind a method Move all callers of `hass.data[DATA_FFMPEG]` to a new function that returns the FFMpegManager. * Update homeassistant/components/ffmpeg/__init__.py Co-authored-by: Martin Hjelmare * Remove unnecessary async_ prefix Co-authored-by: Martin Hjelmare --- homeassistant/components/amcrest/camera.py | 4 ++-- homeassistant/components/arlo/camera.py | 4 ++-- homeassistant/components/canary/camera.py | 4 ++-- homeassistant/components/ezviz/camera.py | 4 ++-- homeassistant/components/ffmpeg/__init__.py | 8 ++++++++ homeassistant/components/ffmpeg_motion/binary_sensor.py | 4 ++-- homeassistant/components/ffmpeg_noise/binary_sensor.py | 4 ++-- homeassistant/components/homekit/type_cameras.py | 4 ++-- homeassistant/components/logi_circle/camera.py | 4 ++-- homeassistant/components/onvif/camera.py | 4 ++-- homeassistant/components/xiaomi/camera.py | 4 ++-- homeassistant/components/yi/camera.py | 4 ++-- 12 files changed, 30 insertions(+), 22 deletions(-) diff --git a/homeassistant/components/amcrest/camera.py b/homeassistant/components/amcrest/camera.py index e250b8ef59b..28485796420 100644 --- a/homeassistant/components/amcrest/camera.py +++ b/homeassistant/components/amcrest/camera.py @@ -15,7 +15,7 @@ import voluptuous as vol from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera from homeassistant.components.camera.const import DOMAIN as CAMERA_DOMAIN -from homeassistant.components.ffmpeg import DATA_FFMPEG, FFmpegManager +from homeassistant.components.ffmpeg import FFmpegManager, get_ffmpeg_manager from homeassistant.const import ATTR_ENTITY_ID, CONF_NAME, STATE_OFF, STATE_ON from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry @@ -136,7 +136,7 @@ async def async_setup_platform( name = discovery_info[CONF_NAME] device = hass.data[DATA_AMCREST][DEVICES][name] - entity = AmcrestCam(name, device, hass.data[DATA_FFMPEG]) + entity = AmcrestCam(name, device, get_ffmpeg_manager(hass)) # 2021.9.0 introduced unique id's for the camera entity, but these were not # unique for different resolution streams. If any cameras were configured diff --git a/homeassistant/components/arlo/camera.py b/homeassistant/components/arlo/camera.py index 146970a8610..d60a82db770 100644 --- a/homeassistant/components/arlo/camera.py +++ b/homeassistant/components/arlo/camera.py @@ -7,7 +7,7 @@ from haffmpeg.camera import CameraMjpeg import voluptuous as vol from homeassistant.components.camera import PLATFORM_SCHEMA, Camera -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.const import ATTR_BATTERY_LEVEL from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream import homeassistant.helpers.config_validation as cv @@ -59,7 +59,7 @@ class ArloCam(Camera): self._camera = camera self._attr_name = camera.name self._motion_status = False - self._ffmpeg = hass.data[DATA_FFMPEG] + self._ffmpeg = get_ffmpeg_manager(hass) self._ffmpeg_arguments = device_info.get(CONF_FFMPEG_ARGUMENTS) self._last_refresh = None self.attrs = {} diff --git a/homeassistant/components/canary/camera.py b/homeassistant/components/canary/camera.py index bbdaaf97d0d..a4c5a5ac837 100644 --- a/homeassistant/components/canary/camera.py +++ b/homeassistant/components/canary/camera.py @@ -15,7 +15,7 @@ from homeassistant.components.camera import ( PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA, Camera, ) -from homeassistant.components.ffmpeg import DATA_FFMPEG, FFmpegManager +from homeassistant.components.ffmpeg import FFmpegManager, get_ffmpeg_manager from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant from homeassistant.helpers import config_validation as cv @@ -94,7 +94,7 @@ class CanaryCamera(CoordinatorEntity, Camera): """Initialize a Canary security camera.""" super().__init__(coordinator) Camera.__init__(self) - self._ffmpeg: FFmpegManager = hass.data[DATA_FFMPEG] + self._ffmpeg: FFmpegManager = get_ffmpeg_manager(hass) self._ffmpeg_arguments = ffmpeg_args self._location_id = location_id self._device = device diff --git a/homeassistant/components/ezviz/camera.py b/homeassistant/components/ezviz/camera.py index 89023b8902d..95e51ab8b61 100644 --- a/homeassistant/components/ezviz/camera.py +++ b/homeassistant/components/ezviz/camera.py @@ -8,7 +8,7 @@ import voluptuous as vol from homeassistant.components import ffmpeg from homeassistant.components.camera import PLATFORM_SCHEMA, SUPPORT_STREAM, Camera -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.config_entries import ( SOURCE_DISCOVERY, SOURCE_IGNORE, @@ -249,7 +249,7 @@ class EzvizCamera(EzvizEntity, Camera): self._rtsp_stream = camera_rtsp_stream self._local_rtsp_port = local_rtsp_port self._ffmpeg_arguments = ffmpeg_arguments - self._ffmpeg = hass.data[DATA_FFMPEG] + self._ffmpeg = get_ffmpeg_manager(hass) self._attr_unique_id = serial self._attr_name = self.data["name"] diff --git a/homeassistant/components/ffmpeg/__init__.py b/homeassistant/components/ffmpeg/__init__.py index 74c826f47d6..e23be94f0ce 100644 --- a/homeassistant/components/ffmpeg/__init__.py +++ b/homeassistant/components/ffmpeg/__init__.py @@ -90,6 +90,14 @@ async def async_setup(hass, config): return True +@bind_hass +def get_ffmpeg_manager(hass: HomeAssistant) -> FFmpegManager: + """Return the FFmpegManager.""" + if DATA_FFMPEG not in hass.data: + raise ValueError("ffmpeg component not initialized") + return hass.data[DATA_FFMPEG] + + @bind_hass async def async_get_image( hass: HomeAssistant, diff --git a/homeassistant/components/ffmpeg_motion/binary_sensor.py b/homeassistant/components/ffmpeg_motion/binary_sensor.py index 292ec35fbff..bacc692c13d 100644 --- a/homeassistant/components/ffmpeg_motion/binary_sensor.py +++ b/homeassistant/components/ffmpeg_motion/binary_sensor.py @@ -11,8 +11,8 @@ from homeassistant.components.ffmpeg import ( CONF_EXTRA_ARGUMENTS, CONF_INITIAL_STATE, CONF_INPUT, - DATA_FFMPEG, FFmpegBase, + get_ffmpeg_manager, ) from homeassistant.const import CONF_NAME, CONF_REPEAT from homeassistant.core import callback @@ -49,7 +49,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the FFmpeg binary motion sensor.""" - manager = hass.data[DATA_FFMPEG] + manager = get_ffmpeg_manager(hass) entity = FFmpegMotion(hass, manager, config) async_add_entities([entity]) diff --git a/homeassistant/components/ffmpeg_noise/binary_sensor.py b/homeassistant/components/ffmpeg_noise/binary_sensor.py index 7745d6fae2a..cd2b6457988 100644 --- a/homeassistant/components/ffmpeg_noise/binary_sensor.py +++ b/homeassistant/components/ffmpeg_noise/binary_sensor.py @@ -11,7 +11,7 @@ from homeassistant.components.ffmpeg import ( CONF_INITIAL_STATE, CONF_INPUT, CONF_OUTPUT, - DATA_FFMPEG, + get_ffmpeg_manager, ) from homeassistant.components.ffmpeg_motion.binary_sensor import FFmpegBinarySensor from homeassistant.const import CONF_NAME @@ -44,7 +44,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( async def async_setup_platform(hass, config, async_add_entities, discovery_info=None): """Set up the FFmpeg noise binary sensor.""" - manager = hass.data[DATA_FFMPEG] + manager = get_ffmpeg_manager(hass) entity = FFmpegNoise(hass, manager, config) async_add_entities([entity]) diff --git a/homeassistant/components/homekit/type_cameras.py b/homeassistant/components/homekit/type_cameras.py index 14d065dc9bf..9d1821ec724 100644 --- a/homeassistant/components/homekit/type_cameras.py +++ b/homeassistant/components/homekit/type_cameras.py @@ -11,7 +11,7 @@ from pyhap.camera import ( ) from pyhap.const import CATEGORY_CAMERA -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.const import STATE_ON from homeassistant.core import callback from homeassistant.helpers.event import ( @@ -139,7 +139,7 @@ class Camera(HomeAccessory, PyhapCamera): def __init__(self, hass, driver, name, entity_id, aid, config): """Initialize a Camera accessory object.""" - self._ffmpeg = hass.data[DATA_FFMPEG] + self._ffmpeg = get_ffmpeg_manager(hass) for config_key, conf in CONFIG_DEFAULTS.items(): if config_key not in config: config[config_key] = conf diff --git a/homeassistant/components/logi_circle/camera.py b/homeassistant/components/logi_circle/camera.py index 5146ffca69f..30ac1ced473 100644 --- a/homeassistant/components/logi_circle/camera.py +++ b/homeassistant/components/logi_circle/camera.py @@ -5,7 +5,7 @@ from datetime import timedelta import logging from homeassistant.components.camera import ATTR_ENTITY_ID, SUPPORT_ON_OFF, Camera -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.const import ( ATTR_ATTRIBUTION, ATTR_BATTERY_CHARGING, @@ -40,7 +40,7 @@ async def async_setup_platform(hass, config, async_add_entities, discovery_info= async def async_setup_entry(hass, entry, async_add_entities): """Set up a Logi Circle Camera based on a config entry.""" devices = await hass.data[LOGI_CIRCLE_DOMAIN].cameras - ffmpeg = hass.data[DATA_FFMPEG] + ffmpeg = get_ffmpeg_manager(hass) cameras = [LogiCam(device, entry, ffmpeg) for device in devices] diff --git a/homeassistant/components/onvif/camera.py b/homeassistant/components/onvif/camera.py index bb7cffa86f9..46558d661f4 100644 --- a/homeassistant/components/onvif/camera.py +++ b/homeassistant/components/onvif/camera.py @@ -8,7 +8,7 @@ from yarl import URL from homeassistant.components import ffmpeg from homeassistant.components.camera import SUPPORT_STREAM, Camera -from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, DATA_FFMPEG +from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, get_ffmpeg_manager from homeassistant.const import HTTP_BASIC_AUTHENTICATION from homeassistant.helpers import config_validation as cv, entity_platform from homeassistant.helpers.aiohttp_client import async_aiohttp_proxy_stream @@ -153,7 +153,7 @@ class ONVIFCameraEntity(ONVIFBaseEntity, Camera): """Generate an HTTP MJPEG stream from the camera.""" LOGGER.debug("Handling mjpeg stream from camera '%s'", self.device.name) - ffmpeg_manager = self.hass.data[DATA_FFMPEG] + ffmpeg_manager = get_ffmpeg_manager(self.hass) stream = CameraMjpeg(ffmpeg_manager.binary) await stream.open_camera( diff --git a/homeassistant/components/xiaomi/camera.py b/homeassistant/components/xiaomi/camera.py index 016fe7dd2ba..4cdd5cc6e00 100644 --- a/homeassistant/components/xiaomi/camera.py +++ b/homeassistant/components/xiaomi/camera.py @@ -9,7 +9,7 @@ import voluptuous as vol from homeassistant.components import ffmpeg from homeassistant.components.camera import PLATFORM_SCHEMA, Camera -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.const import ( CONF_HOST, CONF_NAME, @@ -65,7 +65,7 @@ class XiaomiCamera(Camera): self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS) self._last_image = None self._last_url = None - self._manager = hass.data[DATA_FFMPEG] + self._manager = get_ffmpeg_manager(hass) self._name = config[CONF_NAME] self.host = config[CONF_HOST] self.host.hass = hass diff --git a/homeassistant/components/yi/camera.py b/homeassistant/components/yi/camera.py index 91dfaab38bf..bceb9b999aa 100644 --- a/homeassistant/components/yi/camera.py +++ b/homeassistant/components/yi/camera.py @@ -9,7 +9,7 @@ import voluptuous as vol from homeassistant.components import ffmpeg from homeassistant.components.camera import PLATFORM_SCHEMA, Camera -from homeassistant.components.ffmpeg import DATA_FFMPEG +from homeassistant.components.ffmpeg import get_ffmpeg_manager from homeassistant.const import ( CONF_HOST, CONF_NAME, @@ -60,7 +60,7 @@ class YiCamera(Camera): self._extra_arguments = config.get(CONF_FFMPEG_ARGUMENTS) self._last_image = None self._last_url = None - self._manager = hass.data[DATA_FFMPEG] + self._manager = get_ffmpeg_manager(hass) self._name = config[CONF_NAME] self._is_on = True self.host = config[CONF_HOST]