From 91f01d660fc790c5e7ba8a1b8ac90b1800f2f29d Mon Sep 17 00:00:00 2001 From: epenet <6771947+epenet@users.noreply.github.com> Date: Wed, 14 May 2025 12:04:43 +0200 Subject: [PATCH] Move ps4 services to separate module (#144870) --- homeassistant/components/ps4/__init__.py | 48 +++--------------------- homeassistant/components/ps4/services.py | 37 ++++++++++++++++++ 2 files changed, 42 insertions(+), 43 deletions(-) create mode 100644 homeassistant/components/ps4/services.py diff --git a/homeassistant/components/ps4/__init__.py b/homeassistant/components/ps4/__init__.py index f863bc6f46c..ddde4620871 100644 --- a/homeassistant/components/ps4/__init__.py +++ b/homeassistant/components/ps4/__init__.py @@ -9,7 +9,6 @@ from typing import TYPE_CHECKING from pyps4_2ndscreen.ddp import DDPProtocol, async_create_ddp_endpoint from pyps4_2ndscreen.media_art import COUNTRIES -import voluptuous as vol from homeassistant.components import persistent_notification from homeassistant.components.media_player import ( @@ -18,15 +17,8 @@ from homeassistant.components.media_player import ( MediaType, ) from homeassistant.config_entries import ConfigEntry -from homeassistant.const import ( - ATTR_COMMAND, - ATTR_ENTITY_ID, - ATTR_LOCKED, - CONF_REGION, - CONF_TOKEN, - Platform, -) -from homeassistant.core import HomeAssistant, ServiceCall, split_entity_id +from homeassistant.const import ATTR_LOCKED, CONF_REGION, CONF_TOKEN, Platform +from homeassistant.core import HomeAssistant, split_entity_id from homeassistant.exceptions import HomeAssistantError from homeassistant.helpers import config_validation as cv, entity_registry as er from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -36,28 +28,14 @@ from homeassistant.util import location as location_util from homeassistant.util.json import JsonObjectType, load_json_object from .config_flow import PlayStation4FlowHandler # noqa: F401 -from .const import ( - ATTR_MEDIA_IMAGE_URL, - COMMANDS, - COUNTRYCODE_NAMES, - DOMAIN, - GAMES_FILE, - PS4_DATA, -) +from .const import ATTR_MEDIA_IMAGE_URL, COUNTRYCODE_NAMES, DOMAIN, GAMES_FILE, PS4_DATA +from .services import register_services if TYPE_CHECKING: from .media_player import PS4Device _LOGGER = logging.getLogger(__name__) -SERVICE_COMMAND = "send_command" - -PS4_COMMAND_SCHEMA = vol.Schema( - { - vol.Required(ATTR_ENTITY_ID): cv.entity_ids, - vol.Required(ATTR_COMMAND): vol.In(list(COMMANDS)), - } -) PLATFORMS = [Platform.MEDIA_PLAYER] @@ -80,7 +58,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool: protocol=protocol, ) _LOGGER.debug("PS4 DDP endpoint created: %s, %s", transport, protocol) - service_handle(hass) + register_services(hass) return True @@ -223,19 +201,3 @@ def _reformat_data(hass: HomeAssistant, games: dict, unique_id: str) -> dict: if data_reformatted: save_games(hass, games, unique_id) return games - - -def service_handle(hass: HomeAssistant): - """Handle for services.""" - - async def async_service_command(call: ServiceCall) -> None: - """Service for sending commands.""" - entity_ids = call.data[ATTR_ENTITY_ID] - command = call.data[ATTR_COMMAND] - for device in hass.data[PS4_DATA].devices: - if device.entity_id in entity_ids: - await device.async_send_command(command) - - hass.services.async_register( - DOMAIN, SERVICE_COMMAND, async_service_command, schema=PS4_COMMAND_SCHEMA - ) diff --git a/homeassistant/components/ps4/services.py b/homeassistant/components/ps4/services.py new file mode 100644 index 00000000000..7da3cb0ae93 --- /dev/null +++ b/homeassistant/components/ps4/services.py @@ -0,0 +1,37 @@ +"""Support for PlayStation 4 consoles.""" + +from __future__ import annotations + +import voluptuous as vol + +from homeassistant.const import ATTR_COMMAND, ATTR_ENTITY_ID +from homeassistant.core import HomeAssistant, ServiceCall +from homeassistant.helpers import config_validation as cv + +from .const import COMMANDS, DOMAIN, PS4_DATA + +SERVICE_COMMAND = "send_command" + +PS4_COMMAND_SCHEMA = vol.Schema( + { + vol.Required(ATTR_ENTITY_ID): cv.entity_ids, + vol.Required(ATTR_COMMAND): vol.In(list(COMMANDS)), + } +) + + +async def async_service_command(call: ServiceCall) -> None: + """Service for sending commands.""" + entity_ids = call.data[ATTR_ENTITY_ID] + command = call.data[ATTR_COMMAND] + for device in call.hass.data[PS4_DATA].devices: + if device.entity_id in entity_ids: + await device.async_send_command(command) + + +def register_services(hass: HomeAssistant) -> None: + """Handle for services.""" + + hass.services.async_register( + DOMAIN, SERVICE_COMMAND, async_service_command, schema=PS4_COMMAND_SCHEMA + )