1 """Adds config flow for Folder watcher."""
3 from __future__
import annotations
5 from collections.abc
import Mapping
9 import voluptuous
as vol
14 SchemaCommonFlowHandler,
15 SchemaConfigFlowHandler,
26 from .const
import CONF_FOLDER, CONF_PATTERNS, DEFAULT_PATTERN, DOMAIN
30 handler: SchemaCommonFlowHandler, user_input: dict[str, Any]
32 """Check path is a folder."""
33 value: str = user_input[CONF_FOLDER]
34 dir_in = os.path.expanduser(
str(value))
35 handler.parent_handler._async_abort_entries_match({CONF_FOLDER: value})
37 if not os.path.isdir(dir_in):
39 if not os.access(dir_in, os.R_OK):
41 if not handler.parent_handler.hass.config.is_allowed_path(value):
47 OPTIONS_SCHEMA = vol.Schema(
49 vol.Optional(CONF_PATTERNS, default=[DEFAULT_PATTERN]):
SelectSelector(
51 options=[DEFAULT_PATTERN],
54 mode=SelectSelectorMode.DROPDOWN,
59 DATA_SCHEMA = vol.Schema(
63 ).extend(OPTIONS_SCHEMA.schema)
74 """Handle a config flow for Folder Watcher."""
76 config_flow = CONFIG_FLOW
77 options_flow = OPTIONS_FLOW
80 """Return config entry title."""
81 return f
"Folder Watcher {options[CONF_FOLDER]}"
85 self, data: Mapping[str, Any], **kwargs: Any
86 ) -> ConfigFlowResult:
87 """Finish config flow and create a config entry."""
ConfigFlowResult async_create_entry(self, Mapping[str, Any] data, **Any kwargs)
str async_config_entry_title(self, Mapping[str, Any] options)
None _async_abort_entries_match(self, dict[str, Any]|None match_dict=None)
dict[str, Any] validate_setup(SchemaCommonFlowHandler handler, dict[str, Any] user_input)