Home Assistant Unofficial Reference 2024.12.1
schema.py
Go to the documentation of this file.
1 """The rest component schemas."""
2 
3 import voluptuous as vol
4 
6  DEVICE_CLASSES_SCHEMA as BINARY_SENSOR_DEVICE_CLASSES_SCHEMA,
7  DOMAIN as BINARY_SENSOR_DOMAIN,
8 )
9 from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
10 from homeassistant.const import (
11  CONF_AUTHENTICATION,
12  CONF_DEVICE_CLASS,
13  CONF_FORCE_UPDATE,
14  CONF_HEADERS,
15  CONF_METHOD,
16  CONF_PARAMS,
17  CONF_PASSWORD,
18  CONF_PAYLOAD,
19  CONF_RESOURCE,
20  CONF_RESOURCE_TEMPLATE,
21  CONF_SCAN_INTERVAL,
22  CONF_TIMEOUT,
23  CONF_USERNAME,
24  CONF_VALUE_TEMPLATE,
25  CONF_VERIFY_SSL,
26  HTTP_BASIC_AUTHENTICATION,
27  HTTP_DIGEST_AUTHENTICATION,
28 )
31  CONF_AVAILABILITY,
32  TEMPLATE_ENTITY_BASE_SCHEMA,
33  TEMPLATE_SENSOR_BASE_SCHEMA,
34 )
35 from homeassistant.util.ssl import SSLCipherList
36 
37 from .const import (
38  CONF_ENCODING,
39  CONF_JSON_ATTRS,
40  CONF_JSON_ATTRS_PATH,
41  CONF_PAYLOAD_TEMPLATE,
42  CONF_SSL_CIPHER_LIST,
43  DEFAULT_ENCODING,
44  DEFAULT_FORCE_UPDATE,
45  DEFAULT_METHOD,
46  DEFAULT_SSL_CIPHER_LIST,
47  DEFAULT_VERIFY_SSL,
48  DOMAIN,
49  METHODS,
50 )
51 from .data import DEFAULT_TIMEOUT
52 
53 RESOURCE_SCHEMA = {
54  vol.Exclusive(CONF_RESOURCE, CONF_RESOURCE): cv.url,
55  vol.Exclusive(CONF_RESOURCE_TEMPLATE, CONF_RESOURCE): cv.template,
56  vol.Optional(CONF_AUTHENTICATION): vol.In(
57  [HTTP_BASIC_AUTHENTICATION, HTTP_DIGEST_AUTHENTICATION]
58  ),
59  vol.Optional(CONF_HEADERS): vol.Schema({cv.string: cv.template}),
60  vol.Optional(CONF_PARAMS): vol.Schema({cv.string: cv.template}),
61  vol.Optional(CONF_METHOD, default=DEFAULT_METHOD): vol.In(METHODS),
62  vol.Optional(CONF_USERNAME): cv.string,
63  vol.Optional(CONF_PASSWORD): cv.string,
64  vol.Exclusive(CONF_PAYLOAD, CONF_PAYLOAD): cv.string,
65  vol.Exclusive(CONF_PAYLOAD_TEMPLATE, CONF_PAYLOAD): cv.template,
66  vol.Optional(CONF_VERIFY_SSL, default=DEFAULT_VERIFY_SSL): cv.boolean,
67  vol.Optional(
68  CONF_SSL_CIPHER_LIST,
69  default=DEFAULT_SSL_CIPHER_LIST,
70  ): vol.In([e.value for e in SSLCipherList]),
71  vol.Optional(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
72  vol.Optional(CONF_ENCODING, default=DEFAULT_ENCODING): cv.string,
73 }
74 
75 SENSOR_SCHEMA = {
76  **TEMPLATE_SENSOR_BASE_SCHEMA.schema,
77  vol.Optional(CONF_JSON_ATTRS, default=[]): cv.ensure_list_csv,
78  vol.Optional(CONF_JSON_ATTRS_PATH): cv.string,
79  vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
80  vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean,
81  vol.Optional(CONF_AVAILABILITY): cv.template,
82 }
83 
84 BINARY_SENSOR_SCHEMA = {
85  **TEMPLATE_ENTITY_BASE_SCHEMA.schema,
86  vol.Optional(CONF_DEVICE_CLASS): BINARY_SENSOR_DEVICE_CLASSES_SCHEMA,
87  vol.Optional(CONF_VALUE_TEMPLATE): cv.template,
88  vol.Optional(CONF_FORCE_UPDATE, default=DEFAULT_FORCE_UPDATE): cv.boolean,
89  vol.Optional(CONF_AVAILABILITY): cv.template,
90 }
91 
92 
93 COMBINED_SCHEMA = vol.Schema(
94  {
95  vol.Optional(CONF_SCAN_INTERVAL): cv.time_period,
96  **RESOURCE_SCHEMA,
97  vol.Optional(SENSOR_DOMAIN): vol.All(
98  cv.ensure_list, [vol.Schema(SENSOR_SCHEMA)]
99  ),
100  vol.Optional(BINARY_SENSOR_DOMAIN): vol.All(
101  cv.ensure_list, [vol.Schema(BINARY_SENSOR_SCHEMA)]
102  ),
103  }
104 )
105 
106 CONFIG_SCHEMA = vol.Schema(
107  {
108  DOMAIN: vol.All(
109  cv.ensure_list,
110  cv.remove_falsy,
111  [COMBINED_SCHEMA],
112  )
113  },
114  extra=vol.ALLOW_EXTRA,
115 )