From 2b79c91813b6b7f0007dcf9b56f60a26f93f1fd6 Mon Sep 17 00:00:00 2001 From: Tobias Sauerwein Date: Tue, 13 Apr 2021 13:07:05 +0200 Subject: [PATCH] Clean up camera service schema (#49151) --- homeassistant/components/amcrest/camera.py | 43 ++++++++----------- homeassistant/components/camera/__init__.py | 40 ++++++----------- homeassistant/components/local_file/camera.py | 13 +++--- .../components/logi_circle/__init__.py | 26 +++++------ 4 files changed, 47 insertions(+), 75 deletions(-) diff --git a/homeassistant/components/amcrest/camera.py b/homeassistant/components/amcrest/camera.py index f57b9e62bae..140069a1024 100644 --- a/homeassistant/components/amcrest/camera.py +++ b/homeassistant/components/amcrest/camera.py @@ -8,12 +8,7 @@ from amcrest import AmcrestError from haffmpeg.camera import CameraMjpeg import voluptuous as vol -from homeassistant.components.camera import ( - CAMERA_SERVICE_SCHEMA, - SUPPORT_ON_OFF, - SUPPORT_STREAM, - Camera, -) +from homeassistant.components.camera import SUPPORT_ON_OFF, SUPPORT_STREAM, Camera from homeassistant.components.ffmpeg import DATA_FFMPEG from homeassistant.const import CONF_NAME, STATE_OFF, STATE_ON from homeassistant.helpers.aiohttp_client import ( @@ -82,30 +77,26 @@ _CBW_AUTO = "auto" _CBW_BW = "bw" _CBW = [_CBW_COLOR, _CBW_AUTO, _CBW_BW] -_SRV_GOTO_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( - {vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1))} -) -_SRV_CBW_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( - {vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)} -) -_SRV_PTZ_SCHEMA = CAMERA_SERVICE_SCHEMA.extend( - { - vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV), - vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float, - } -) +_SRV_GOTO_SCHEMA = { + vol.Required(_ATTR_PRESET): vol.All(vol.Coerce(int), vol.Range(min=1)) +} +_SRV_CBW_SCHEMA = {vol.Required(_ATTR_COLOR_BW): vol.In(_CBW)} +_SRV_PTZ_SCHEMA = { + vol.Required(_ATTR_PTZ_MOV): vol.In(_MOV), + vol.Optional(_ATTR_PTZ_TT, default=_DEFAULT_TT): cv.small_float, +} CAMERA_SERVICES = { - _SRV_EN_REC: (CAMERA_SERVICE_SCHEMA, "async_enable_recording", ()), - _SRV_DS_REC: (CAMERA_SERVICE_SCHEMA, "async_disable_recording", ()), - _SRV_EN_AUD: (CAMERA_SERVICE_SCHEMA, "async_enable_audio", ()), - _SRV_DS_AUD: (CAMERA_SERVICE_SCHEMA, "async_disable_audio", ()), - _SRV_EN_MOT_REC: (CAMERA_SERVICE_SCHEMA, "async_enable_motion_recording", ()), - _SRV_DS_MOT_REC: (CAMERA_SERVICE_SCHEMA, "async_disable_motion_recording", ()), + _SRV_EN_REC: ({}, "async_enable_recording", ()), + _SRV_DS_REC: ({}, "async_disable_recording", ()), + _SRV_EN_AUD: ({}, "async_enable_audio", ()), + _SRV_DS_AUD: ({}, "async_disable_audio", ()), + _SRV_EN_MOT_REC: ({}, "async_enable_motion_recording", ()), + _SRV_DS_MOT_REC: ({}, "async_disable_motion_recording", ()), _SRV_GOTO: (_SRV_GOTO_SCHEMA, "async_goto_preset", (_ATTR_PRESET,)), _SRV_CBW: (_SRV_CBW_SCHEMA, "async_set_color_bw", (_ATTR_COLOR_BW,)), - _SRV_TOUR_ON: (CAMERA_SERVICE_SCHEMA, "async_start_tour", ()), - _SRV_TOUR_OFF: (CAMERA_SERVICE_SCHEMA, "async_stop_tour", ()), + _SRV_TOUR_ON: ({}, "async_start_tour", ()), + _SRV_TOUR_OFF: ({}, "async_stop_tour", ()), _SRV_PTZ_CTRL: ( _SRV_PTZ_SCHEMA, "async_ptz_control", diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index 70739857587..3a2fe8ba417 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -89,26 +89,18 @@ _RND = SystemRandom() MIN_STREAM_INTERVAL = 0.5 # seconds -CAMERA_SERVICE_SCHEMA = vol.Schema({vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids}) +CAMERA_SERVICE_SNAPSHOT = {vol.Required(ATTR_FILENAME): cv.template} -CAMERA_SERVICE_SNAPSHOT = CAMERA_SERVICE_SCHEMA.extend( - {vol.Required(ATTR_FILENAME): cv.template} -) +CAMERA_SERVICE_PLAY_STREAM = { + vol.Required(ATTR_MEDIA_PLAYER): cv.entities_domain(DOMAIN_MP), + vol.Optional(ATTR_FORMAT, default="hls"): vol.In(OUTPUT_FORMATS), +} -CAMERA_SERVICE_PLAY_STREAM = CAMERA_SERVICE_SCHEMA.extend( - { - vol.Required(ATTR_MEDIA_PLAYER): cv.entities_domain(DOMAIN_MP), - vol.Optional(ATTR_FORMAT, default="hls"): vol.In(OUTPUT_FORMATS), - } -) - -CAMERA_SERVICE_RECORD = CAMERA_SERVICE_SCHEMA.extend( - { - vol.Required(CONF_FILENAME): cv.template, - vol.Optional(CONF_DURATION, default=30): vol.Coerce(int), - vol.Optional(CONF_LOOKBACK, default=0): vol.Coerce(int), - } -) +CAMERA_SERVICE_RECORD = { + vol.Required(CONF_FILENAME): cv.template, + vol.Optional(CONF_DURATION, default=30): vol.Coerce(int), + vol.Optional(CONF_LOOKBACK, default=0): vol.Coerce(int), +} WS_TYPE_CAMERA_THUMBNAIL = "camera_thumbnail" SCHEMA_WS_CAMERA_THUMBNAIL = websocket_api.BASE_COMMAND_MESSAGE_SCHEMA.extend( @@ -271,17 +263,13 @@ async def async_setup(hass, config): hass.helpers.event.async_track_time_interval(update_tokens, TOKEN_CHANGE_INTERVAL) component.async_register_entity_service( - SERVICE_ENABLE_MOTION, CAMERA_SERVICE_SCHEMA, "async_enable_motion_detection" + SERVICE_ENABLE_MOTION, {}, "async_enable_motion_detection" ) component.async_register_entity_service( - SERVICE_DISABLE_MOTION, CAMERA_SERVICE_SCHEMA, "async_disable_motion_detection" - ) - component.async_register_entity_service( - SERVICE_TURN_OFF, CAMERA_SERVICE_SCHEMA, "async_turn_off" - ) - component.async_register_entity_service( - SERVICE_TURN_ON, CAMERA_SERVICE_SCHEMA, "async_turn_on" + SERVICE_DISABLE_MOTION, {}, "async_disable_motion_detection" ) + component.async_register_entity_service(SERVICE_TURN_OFF, {}, "async_turn_off") + component.async_register_entity_service(SERVICE_TURN_ON, {}, "async_turn_on") component.async_register_entity_service( SERVICE_SNAPSHOT, CAMERA_SERVICE_SNAPSHOT, async_handle_snapshot_service ) diff --git a/homeassistant/components/local_file/camera.py b/homeassistant/components/local_file/camera.py index c94aeff24b0..86a075c1a14 100644 --- a/homeassistant/components/local_file/camera.py +++ b/homeassistant/components/local_file/camera.py @@ -5,11 +5,7 @@ import os import voluptuous as vol -from homeassistant.components.camera import ( - CAMERA_SERVICE_SCHEMA, - PLATFORM_SCHEMA, - Camera, -) +from homeassistant.components.camera import PLATFORM_SCHEMA, Camera from homeassistant.const import ATTR_ENTITY_ID, CONF_FILE_PATH, CONF_NAME from homeassistant.helpers import config_validation as cv @@ -24,8 +20,11 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( } ) -CAMERA_SERVICE_UPDATE_FILE_PATH = CAMERA_SERVICE_SCHEMA.extend( - {vol.Required(CONF_FILE_PATH): cv.string} +CAMERA_SERVICE_UPDATE_FILE_PATH = vol.Schema( + { + vol.Optional(ATTR_ENTITY_ID): cv.comp_entity_ids, + vol.Required(CONF_FILE_PATH): cv.string, + } ) diff --git a/homeassistant/components/logi_circle/__init__.py b/homeassistant/components/logi_circle/__init__.py index 3364cd725c7..c51833bc43f 100644 --- a/homeassistant/components/logi_circle/__init__.py +++ b/homeassistant/components/logi_circle/__init__.py @@ -8,7 +8,7 @@ from logi_circle.exception import AuthorizationFailed import voluptuous as vol from homeassistant import config_entries -from homeassistant.components.camera import ATTR_FILENAME, CAMERA_SERVICE_SCHEMA +from homeassistant.components.camera import ATTR_FILENAME from homeassistant.const import ( ATTR_MODE, CONF_API_KEY, @@ -72,23 +72,17 @@ CONFIG_SCHEMA = vol.Schema( extra=vol.ALLOW_EXTRA, ) -LOGI_CIRCLE_SERVICE_SET_CONFIG = CAMERA_SERVICE_SCHEMA.extend( - { - vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]), - vol.Required(ATTR_VALUE): cv.boolean, - } -) +LOGI_CIRCLE_SERVICE_SET_CONFIG = { + vol.Required(ATTR_MODE): vol.In([LED_MODE_KEY, RECORDING_MODE_KEY]), + vol.Required(ATTR_VALUE): cv.boolean, +} -LOGI_CIRCLE_SERVICE_SNAPSHOT = CAMERA_SERVICE_SCHEMA.extend( - {vol.Required(ATTR_FILENAME): cv.template} -) +LOGI_CIRCLE_SERVICE_SNAPSHOT = {vol.Required(ATTR_FILENAME): cv.template} -LOGI_CIRCLE_SERVICE_RECORD = CAMERA_SERVICE_SCHEMA.extend( - { - vol.Required(ATTR_FILENAME): cv.template, - vol.Required(ATTR_DURATION): cv.positive_int, - } -) +LOGI_CIRCLE_SERVICE_RECORD = { + vol.Required(ATTR_FILENAME): cv.template, + vol.Required(ATTR_DURATION): cv.positive_int, +} async def async_setup(hass, config):