1 """Sensor for monitoring the contents of a folder."""
3 from __future__
import annotations
5 from datetime
import timedelta
10 import voluptuous
as vol
13 PLATFORM_SCHEMA
as SENSOR_PLATFORM_SCHEMA,
23 _LOGGER = logging.getLogger(__name__)
25 CONF_FOLDER_PATHS =
"folder"
26 CONF_FILTER =
"filter"
31 PLATFORM_SCHEMA = SENSOR_PLATFORM_SCHEMA.extend(
33 vol.Required(CONF_FOLDER_PATHS): cv.isdir,
34 vol.Optional(CONF_FILTER, default=DEFAULT_FILTER): cv.string,
40 """Return the list of files, applying filter."""
41 query = folder_path + filter_term
42 return glob.glob(query)
46 """Return the sum of the size in bytes of files in the list."""
47 size_list = [os.stat(f).st_size
for f
in files_list
if os.path.isfile(f)]
54 add_entities: AddEntitiesCallback,
55 discovery_info: DiscoveryInfoType |
None =
None,
57 """Set up the folder sensor."""
58 path: str = config[CONF_FOLDER_PATHS]
60 if not hass.config.is_allowed_path(path):
61 _LOGGER.error(
"Folder %s is not valid or allowed", path)
63 folder =
Folder(path, config[CONF_FILTER])
68 """Representation of a folder."""
70 _attr_device_class = SensorDeviceClass.DATA_SIZE
71 _attr_icon =
"mdi:folder"
72 _attr_native_unit_of_measurement = UnitOfInformation.MEGABYTES
74 def __init__(self, folder_path: str, filter_term: str) ->
None:
75 """Initialize the data object."""
76 folder_path = os.path.join(folder_path,
"")
79 self.
_attr_name_attr_name = os.path.split(os.path.split(folder_path)[0])[1]
82 """Update the sensor."""
84 number_of_files = len(files_list)
91 "number_of_files": number_of_files,
93 "file_list": files_list,
None __init__(self, str folder_path, str filter_term)
_attr_extra_state_attributes
None setup_platform(HomeAssistant hass, ConfigType config, AddEntitiesCallback add_entities, DiscoveryInfoType|None discovery_info=None)
int get_size(list[str] files_list)
list[str] get_files_list(str folder_path, str filter_term)
def add_entities(account, async_add_entities, tracked)