feat: use yaml to parse action params

This commit is contained in:
Alone 2024-12-31 13:55:57 +08:00
parent f60143b477
commit 8726c75c85
2 changed files with 9 additions and 4 deletions

View File

@ -111,7 +111,7 @@ class Notify(MIoTActionEntity, NotifyEntity):
self.name, self.entity_id, message) self.name, self.entity_id, message)
return return
if isinstance(in_list, str): if not isinstance(in_list, list):
in_list = [in_list] in_list = [in_list]
if not isinstance(in_list, list) or len(in_list) != len(self.spec.in_): if not isinstance(in_list, list) or len(in_list) != len(self.spec.in_):

View File

@ -46,7 +46,6 @@ off Xiaomi or its affiliates' products.
Text entities for Xiaomi Home. Text entities for Xiaomi Home.
""" """
from __future__ import annotations from __future__ import annotations
import json
import logging import logging
from typing import Optional from typing import Optional
@ -54,6 +53,8 @@ from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.components.text import TextEntity from homeassistant.components.text import TextEntity
from homeassistant.util import yaml
from homeassistant.exceptions import HomeAssistantError
from .miot.const import DOMAIN from .miot.const import DOMAIN
from .miot.miot_spec import MIoTSpecAction, MIoTSpecProperty from .miot.miot_spec import MIoTSpecAction, MIoTSpecProperty
@ -121,14 +122,18 @@ class ActionText(MIoTActionEntity, TextEntity):
return return
in_list: list = None in_list: list = None
try: try:
in_list = json.loads(value) in_list = yaml.parse_yaml(value)
except json.JSONDecodeError as e: except HomeAssistantError as e:
_LOGGER.error( _LOGGER.error(
'action exec failed, %s(%s), invalid action params format, %s', 'action exec failed, %s(%s), invalid action params format, %s',
self.name, self.entity_id, value) self.name, self.entity_id, value)
raise ValueError( raise ValueError(
f'action exec failed, {self.name}({self.entity_id}), ' f'action exec failed, {self.name}({self.entity_id}), '
f'invalid action params format, {value}') from e f'invalid action params format, {value}') from e
if not isinstance(in_list, list):
in_list = [in_list]
if not isinstance(in_list, list) or len(in_list) != len(self.spec.in_): if not isinstance(in_list, list) or len(in_list) != len(self.spec.in_):
_LOGGER.error( _LOGGER.error(
'action exec failed, %s(%s), invalid action params, %s', 'action exec failed, %s(%s), invalid action params, %s',