def discover_scripts(hass): """Discover python scripts in folder.""" path = hass.config.path(FOLDER) if not os.path.isdir(path): _LOGGER.warning("Folder %s not found in configuration folder", FOLDER) return False def python_script_service_handler(call): """Handle python script service calls.""" execute_script(hass, call.service, call.data) existing = hass.services.services.get(DOMAIN, {}).keys() for existing_service in existing: if existing_service == SERVICE_RELOAD: continue hass.services.remove(DOMAIN, existing_service) # Load user-provided service descriptions from python_scripts/services.yaml services_yaml = os.path.join(path, "services.yaml") if os.path.exists(services_yaml): services_dict = load_yaml(services_yaml) else: services_dict = {} for fil in glob.iglob(os.path.join(path, "*.py")): name = os.path.splitext(os.path.basename(fil))[0] hass.services.register(DOMAIN, name, python_script_service_handler) service_desc = { CONF_NAME: services_dict.get(name, {}).get("name", name), CONF_DESCRIPTION: services_dict.get(name, {}).get("description", ""), CONF_FIELDS: services_dict.get(name, {}).get("fields", {}), } async_set_service_schema(hass, DOMAIN, name, service_desc)
def test_load_yaml_encoding_error(mock_open): """Test raising a UnicodeDecodeError.""" mock_open.side_effect = UnicodeDecodeError("", b"", 1, 0, "") with pytest.raises(HomeAssistantError): yaml_loader.load_yaml("test")