From f449620d38b95f2d4c88d44af473df324f1ce9f3 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 27 Aug 2020 23:53:27 -0500 Subject: [PATCH] Add the ability to reload filesize platforms from yaml (#39347) --- homeassistant/components/filesize/__init__.py | 3 ++ homeassistant/components/filesize/sensor.py | 6 +++ .../components/filesize/services.yaml | 2 + tests/components/filesize/test_sensor.py | 50 ++++++++++++++++++- tests/fixtures/filesize/configuration.yaml | 4 ++ 5 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 homeassistant/components/filesize/services.yaml create mode 100644 tests/fixtures/filesize/configuration.yaml diff --git a/homeassistant/components/filesize/__init__.py b/homeassistant/components/filesize/__init__.py index c532274997c..d209a845b15 100644 --- a/homeassistant/components/filesize/__init__.py +++ b/homeassistant/components/filesize/__init__.py @@ -1 +1,4 @@ """The filesize component.""" + +DOMAIN = "filesize" +PLATFORMS = ["sensor"] diff --git a/homeassistant/components/filesize/sensor.py b/homeassistant/components/filesize/sensor.py index 3d96aab04e9..63042ec6292 100644 --- a/homeassistant/components/filesize/sensor.py +++ b/homeassistant/components/filesize/sensor.py @@ -9,6 +9,9 @@ from homeassistant.components.sensor import PLATFORM_SCHEMA from homeassistant.const import DATA_MEGABYTES import homeassistant.helpers.config_validation as cv from homeassistant.helpers.entity import Entity +from homeassistant.helpers.reload import setup_reload_service + +from . import DOMAIN, PLATFORMS _LOGGER = logging.getLogger(__name__) @@ -23,6 +26,9 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend( def setup_platform(hass, config, add_entities, discovery_info=None): """Set up the file size sensor.""" + + setup_reload_service(hass, DOMAIN, PLATFORMS) + sensors = [] for path in config.get(CONF_FILE_PATHS): if not hass.config.is_allowed_path(path): diff --git a/homeassistant/components/filesize/services.yaml b/homeassistant/components/filesize/services.yaml new file mode 100644 index 00000000000..9f251b50e7c --- /dev/null +++ b/homeassistant/components/filesize/services.yaml @@ -0,0 +1,2 @@ +reload: + description: Reload all filesize entities. diff --git a/tests/components/filesize/test_sensor.py b/tests/components/filesize/test_sensor.py index 6d35ab0d88e..e0633d69d03 100644 --- a/tests/components/filesize/test_sensor.py +++ b/tests/components/filesize/test_sensor.py @@ -2,9 +2,13 @@ import os import unittest +from homeassistant import config as hass_config +from homeassistant.components.filesize import DOMAIN from homeassistant.components.filesize.sensor import CONF_FILE_PATHS -from homeassistant.setup import setup_component +from homeassistant.const import SERVICE_RELOAD +from homeassistant.setup import async_setup_component, setup_component +from tests.async_mock import patch from tests.common import get_test_home_assistant TEST_DIR = os.path.join(os.path.dirname(__file__)) @@ -47,3 +51,47 @@ class TestFileSensor(unittest.TestCase): state = self.hass.states.get("sensor.mock_file_test_filesize_txt") assert state.state == "0.0" assert state.attributes.get("bytes") == 4 + + +async def test_reload(hass, tmpdir): + """Verify we can reload filter sensors.""" + testfile = f"{tmpdir}/file" + await hass.async_add_executor_job(create_file, testfile) + with patch.object(hass.config, "is_allowed_path", return_value=True): + await async_setup_component( + hass, + "sensor", + { + "sensor": { + "platform": "filesize", + "file_paths": [testfile], + } + }, + ) + await hass.async_block_till_done() + + assert len(hass.states.async_all()) == 1 + + assert hass.states.get("sensor.file") + + yaml_path = os.path.join( + _get_fixtures_base_path(), + "fixtures", + "filesize/configuration.yaml", + ) + with patch.object(hass_config, "YAML_CONFIG_FILE", yaml_path), patch.object( + hass.config, "is_allowed_path", return_value=True + ): + await hass.services.async_call( + DOMAIN, + SERVICE_RELOAD, + {}, + blocking=True, + ) + await hass.async_block_till_done() + + assert hass.states.get("sensor.file") is None + + +def _get_fixtures_base_path(): + return os.path.dirname(os.path.dirname(os.path.dirname(__file__))) diff --git a/tests/fixtures/filesize/configuration.yaml b/tests/fixtures/filesize/configuration.yaml new file mode 100644 index 00000000000..ea73be72b80 --- /dev/null +++ b/tests/fixtures/filesize/configuration.yaml @@ -0,0 +1,4 @@ +sensor: + - platform: filesize + file_paths: + - "/dev/null"