Home Assistant Unofficial Reference 2024.12.1
const.py
Go to the documentation of this file.
1 """Constants for Lovelace."""
2 
3 from typing import Any
4 
5 import voluptuous as vol
6 
7 from homeassistant.const import (
8  CONF_ICON,
9  CONF_MODE,
10  CONF_TYPE,
11  CONF_URL,
12  EVENT_LOVELACE_UPDATED, # noqa: F401
13 )
14 from homeassistant.exceptions import HomeAssistantError
15 from homeassistant.helpers import config_validation as cv
16 from homeassistant.helpers.typing import VolDictType
17 from homeassistant.util import slugify
18 
19 DOMAIN = "lovelace"
20 
21 DEFAULT_ICON = "hass:view-dashboard"
22 
23 MODE_YAML = "yaml"
24 MODE_STORAGE = "storage"
25 MODE_AUTO = "auto-gen"
26 
27 LOVELACE_CONFIG_FILE = "ui-lovelace.yaml"
28 CONF_ALLOW_SINGLE_WORD = "allow_single_word"
29 CONF_URL_PATH = "url_path"
30 CONF_RESOURCE_TYPE_WS = "res_type"
31 
32 RESOURCE_TYPES = ["js", "css", "module", "html"]
33 
34 RESOURCE_FIELDS = {
35  CONF_TYPE: vol.In(RESOURCE_TYPES),
36  CONF_URL: cv.string,
37 }
38 
39 RESOURCE_SCHEMA = vol.Schema(RESOURCE_FIELDS)
40 
41 RESOURCE_CREATE_FIELDS: VolDictType = {
42  vol.Required(CONF_RESOURCE_TYPE_WS): vol.In(RESOURCE_TYPES),
43  vol.Required(CONF_URL): cv.string,
44 }
45 
46 RESOURCE_UPDATE_FIELDS: VolDictType = {
47  vol.Optional(CONF_RESOURCE_TYPE_WS): vol.In(RESOURCE_TYPES),
48  vol.Optional(CONF_URL): cv.string,
49 }
50 
51 SERVICE_RELOAD_RESOURCES = "reload_resources"
52 RESOURCE_RELOAD_SERVICE_SCHEMA = vol.Schema({})
53 
54 CONF_TITLE = "title"
55 CONF_REQUIRE_ADMIN = "require_admin"
56 CONF_SHOW_IN_SIDEBAR = "show_in_sidebar"
57 
58 DASHBOARD_BASE_CREATE_FIELDS: VolDictType = {
59  vol.Optional(CONF_REQUIRE_ADMIN, default=False): cv.boolean,
60  vol.Optional(CONF_ICON): cv.icon,
61  vol.Required(CONF_TITLE): cv.string,
62  vol.Optional(CONF_SHOW_IN_SIDEBAR, default=True): cv.boolean,
63 }
64 
65 
66 DASHBOARD_BASE_UPDATE_FIELDS: VolDictType = {
67  vol.Optional(CONF_REQUIRE_ADMIN): cv.boolean,
68  vol.Optional(CONF_ICON): vol.Any(cv.icon, None),
69  vol.Optional(CONF_TITLE): cv.string,
70  vol.Optional(CONF_SHOW_IN_SIDEBAR): cv.boolean,
71 }
72 
73 
74 STORAGE_DASHBOARD_CREATE_FIELDS: VolDictType = {
75  **DASHBOARD_BASE_CREATE_FIELDS,
76  vol.Required(CONF_URL_PATH): cv.string,
77  # For now we write "storage" as all modes.
78  # In future we can adjust this to be other modes.
79  vol.Optional(CONF_MODE, default=MODE_STORAGE): MODE_STORAGE,
80  # Set to allow adding dashboard without hyphen
81  vol.Optional(CONF_ALLOW_SINGLE_WORD): bool,
82 }
83 
84 STORAGE_DASHBOARD_UPDATE_FIELDS = DASHBOARD_BASE_UPDATE_FIELDS
85 
86 
87 def url_slug(value: Any) -> str:
88  """Validate value is a valid url slug."""
89  if value is None:
90  raise vol.Invalid("Slug should not be None")
91  if "-" not in value:
92  raise vol.Invalid("Url path needs to contain a hyphen (-)")
93  str_value = str(value)
94  slg = slugify(str_value, separator="-")
95  if str_value == slg:
96  return str_value
97  raise vol.Invalid(f"invalid slug {value} (try {slg})")
98 
99 
101  """When no config available."""