Coverage for custom_components/supernotify/const.py: 100%

225 statements  

« prev     ^ index     » next       coverage.py v7.15.2, created at 2026-09-01 18:25 +0000

1"""The Supernotify integration""" 

2 

3from typing import Final 

4 

5from homeassistant.const import ( 

6 ATTR_DOMAIN, 

7 ATTR_SERVICE, 

8) 

9 

10CONF_ACTIONS: Final[str] = "actions" # not fully implemented 

11CONF_TITLE: Final[str] = "title" 

12CONF_URI: Final[str] = "uri" 

13CONF_RECIPIENTS: Final[str] = "recipients" 

14CONF_RECIPIENTS_DISCOVERY: Final[str] = "recipients_discovery" 

15CONF_TEMPLATE_PATH: Final[str] = "template_path" 

16CONF_MEDIA_PATH: Final[str] = "media_path" 

17CONF_MEDIA_URL_PREFIX: Final[str] = "media_url_prefix" 

18CONF_HOUSEKEEPING: Final[str] = "housekeeping" 

19CONF_HOUSEKEEPING_TIME: Final[str] = "housekeeping_time" 

20CONF_ARCHIVE_PATH: Final[str] = "file_path" 

21CONF_ARCHIVE: Final[str] = "archive" 

22CONF_ARCHIVE_DAYS: Final[str] = "file_retention_days" 

23CONF_ARCHIVE_MQTT_TOPIC: Final[str] = "mqtt_topic" 

24CONF_ARCHIVE_MQTT_QOS: Final[str] = "mqtt_qos" 

25CONF_ARCHIVE_MQTT_RETAIN: Final[str] = "mqtt_retain" 

26CONF_TEMPLATE: Final[str] = "template" 

27CONF_DELIVERY_DEFAULTS: Final[str] = "delivery_defaults" 

28CONF_LINKS: Final[str] = "links" 

29CONF_PERSON: Final[str] = "person" 

30CONF_TRANSPORT: Final[str] = "transport" 

31CONF_TRANSPORTS: Final[str] = "transports" 

32CONF_DELIVERY: Final[str] = "delivery" 

33CONF_SELECTION: Final[str] = "selection" 

34CONF_SELECTION_RANK: Final[str] = "selection_rank" 

35 

36 

37CONF_DATA: Final[str] = "data" 

38CONF_OPTIONS: Final[str] = "options" 

39CONF_MOBILE: Final[str] = "mobile" 

40CONF_NOTIFY: Final[str] = "notify" 

41 

42CONF_PRIORITY: Final[str] = "priority" 

43CONF_OCCUPANCY: Final[str] = "occupancy" 

44CONF_SCENARIOS: Final[str] = "scenarios" 

45CONF_MANUFACTURER: Final[str] = "manufacturer" 

46CONF_CLASS: Final[str] = "class" 

47 

48 

49CONF_MODEL: Final[str] = "model" 

50CONF_MESSAGE: Final[str] = "message" 

51CONF_TARGET_REQUIRED: Final[str] = "target_required" 

52CONF_MOBILE_DEVICES: Final[str] = "mobile_devices" 

53CONF_MOBILE_DISCOVERY: Final[str] = "mobile_discovery" 

54CONF_ACTION_TEMPLATE: Final[str] = "action_template" 

55CONF_ACTION_GROUPS: Final[str] = "action_groups" 

56CONF_TITLE_TEMPLATE: Final[str] = "title_template" 

57CONF_MEDIA: Final[str] = "media" 

58CONF_CAMERA: Final[str] = "camera" 

59CONF_CLIP_URL: Final[str] = "clip_url" 

60CONF_PTZ_DELAY: Final[str] = "ptz_delay" 

61CONF_PTZ_METHOD: Final[str] = "ptz_method" 

62CONF_PTZ_CAMERA: Final[str] = "ptz_camera" 

63CONF_PTZ_PRESET_DEFAULT: Final[str] = "ptz_default_preset" 

64CONF_ALT_CAMERA: Final[str] = "alt_camera" 

65CONF_CAMERAS: Final[str] = "cameras" 

66CONF_ARCHIVE_PURGE_INTERVAL: Final[str] = "purge_interval" 

67CONF_ARCHIVE_EVENT_NAME: Final[str] = "event_name" 

68CONF_ARCHIVE_EVENT_SELECTION: Final[str] = "event_selection" 

69CONF_ARCHIVE_DIAGNOSTICS: Final[str] = "diagnostics" 

70CONF_MEDIA_STORAGE_DAYS: Final[str] = "media_storage_days" 

71 

72PLATFORM_FRIGATE = "frigate" 

73 

74OCCUPANCY_ANY_IN = "any_in" 

75OCCUPANCY_ANY_OUT = "any_out" 

76OCCUPANCY_ALL_IN = "all_in" 

77OCCUPANCY_ALL = "all" 

78OCCUPANCY_NONE = "none" 

79OCCUPANCY_ALL_OUT = "all_out" 

80OCCUPANCY_ONLY_IN = "only_in" 

81OCCUPANCY_ONLY_OUT = "only_out" 

82 

83ATTR_ENABLED = "enabled" 

84ATTR_PRIORITY = "priority" 

85ATTR_ACTION = "action" 

86ATTR_SCENARIOS_REQUIRE = "require_scenarios" 

87ATTR_SCENARIOS_APPLY = "apply_scenarios" 

88ATTR_FORCE_RESEND: Final[str] = "force_resend" 

89ATTR_SCENARIOS_CONSTRAIN = "constrain_scenarios" 

90ATTR_DELIVERY = "delivery" 

91ATTR_DEFAULT = "default" 

92ATTR_NOTIFICATION_ID = "notification_id" 

93ATTR_DELIVERY_SELECTION = "delivery_selection" 

94ATTR_RECIPIENTS = "recipients" 

95ATTR_DATA = "data" 

96ATTR_MEDIA = "media" 

97ATTR_TITLE = "title" 

98ATTR_IMAGE = "image" 

99ATTR_VIDEO = "video" 

100ATTR_MEDIA_SNAPSHOT_URL = "snapshot_url" 

101ATTR_MEDIA_CAMERA_ENTITY_ID = "camera_entity_id" 

102ATTR_MEDIA_CAMERA_DELAY = "camera_delay" 

103ATTR_MEDIA_CAMERA_PTZ_PRESET = "camera_ptz_preset" 

104ATTR_MEDIA_CLIP_URL = "clip_url" 

105ATTR_MEDIA_SNAPSHOT_PATH = "snapshot_image_path" 

106ATTR_TOPIC = "topic" 

107ATTR_ACTION_GROUPS = "action_groups" 

108CONF_ACTION_GROUP_NAMES = "action_groups" 

109ATTR_ACTION_CATEGORY = "action_category" 

110ATTR_ACTION_URL = "action_url" 

111ATTR_ACTION_URL_TITLE = "action_url_title" 

112ATTR_MESSAGE_HTML = "message_html" 

113ATTR_JPEG_OPTS = "jpeg_opts" 

114ATTR_PNG_OPTS = "png_opts" 

115ATTR_TIMESTAMP = "timestamp" 

116ATTR_SPOKEN_MESSAGE = "spoken_message" 

117ATTR_DEBUG = "debug" 

118ATTR_ACTIONS = "actions" 

119ATTR_USER_ID = "user_id" 

120ATTR_PERSON_ID = "person_id" 

121ATTR_MOBILE_APP_ID = "mobile_app_id" 

122ATTR_EMAIL = "email" 

123ATTR_PHONE = "phone" 

124ATTR_ALIAS = "alias" 

125 

126DELIVERY_SELECTION_IMPLICIT = "implicit" 

127DELIVERY_SELECTION_EXPLICIT = "explicit" 

128DELIVERY_SELECTION_FIXED = "fixed" 

129 

130DELIVERY_SELECTION_VALUES = [DELIVERY_SELECTION_EXPLICIT, DELIVERY_SELECTION_FIXED, DELIVERY_SELECTION_IMPLICIT] 

131PTZ_METHOD_ONVIF = "onvif" 

132PTZ_METHOD_FRIGATE = "frigate" 

133PTZ_METHOD_VALUES = [PTZ_METHOD_ONVIF, PTZ_METHOD_FRIGATE] 

134PTZ_DELAY_DEFAULT = 10 

135 

136SELECTION_FALLBACK_ON_ERROR = "fallback_on_error" 

137SELECTION_FALLBACK = "fallback" 

138SELECTION_BY_SCENARIO = "scenario" 

139SELECTION_DEFAULT = "default" 

140SELECTION_EXPLICIT = "explicit" 

141SELECTION_VALUES = [ 

142 SELECTION_FALLBACK_ON_ERROR, 

143 SELECTION_EXPLICIT, 

144 SELECTION_BY_SCENARIO, 

145 SELECTION_DEFAULT, 

146 SELECTION_FALLBACK, 

147] 

148 

149OCCUPANCY_VALUES = [ 

150 OCCUPANCY_ALL_IN, 

151 OCCUPANCY_ALL_OUT, 

152 OCCUPANCY_ANY_IN, 

153 OCCUPANCY_ANY_OUT, 

154 OCCUPANCY_ONLY_IN, 

155 OCCUPANCY_ONLY_OUT, 

156 OCCUPANCY_ALL, 

157 OCCUPANCY_NONE, 

158] 

159 

160PRIORITY_CRITICAL = "critical" 

161PRIORITY_HIGH = "high" 

162PRIORITY_MEDIUM = "medium" 

163PRIORITY_LOW = "low" 

164PRIORITY_MINIMUM = "minimum" 

165 

166PRIORITY_VALUES: dict[str, int] = { 

167 PRIORITY_MINIMUM: 1, 

168 PRIORITY_LOW: 2, 

169 PRIORITY_MEDIUM: 3, 

170 PRIORITY_HIGH: 4, 

171 PRIORITY_CRITICAL: 5, 

172} 

173 

174CONF_TARGET_USAGE = "target_usage" 

175TARGET_USE_ON_NO_DELIVERY_TARGETS = "no_delivery" 

176TARGET_USE_ON_NO_ACTION_TARGETS = "no_action" 

177TARGET_USE_FIXED = "fixed" 

178TARGET_USE_MERGE_ALWAYS = "merge_always" 

179TARGET_USE_MERGE_ON_DELIVERY_TARGETS = "merge_delivery" 

180 

181OPTION_SIMPLIFY_TEXT = "simplify_text" 

182OPTION_STRIP_URLS = "strip_urls" 

183OPTION_MESSAGE_USAGE = "message_usage" 

184OPTION_RAW = "raw" 

185OPTION_JPEG = "jpeg_opts" 

186OPTION_PNG = "png_opts" 

187OPTION_TTS_ENTITY_ID = "tts_entity_id" 

188MEDIA_OPTION_REPROCESS = "reprocess" 

189OPTION_TARGET_CATEGORIES = "target_categories" 

190OPTION_UNIQUE_TARGETS = "unique_targets" 

191OPTION_TARGET_INCLUDE_RE = "target_include_re" # deprecated v1.9.0 

192OPTION_TARGET_SELECT = "target_select" 

193OPTION_CHIME_ALIASES = "chime_aliases" 

194OPTION_DATA_KEYS_SELECT = "data_keys_select" 

195OPTION_DATA_KEYS_INCLUDE_RE = "data_keys_include_re" # deprecated v1.9.0 

196OPTION_DATA_KEYS_EXCLUDE_RE = "data_keys_exclude_re" # deprecated v1.9.0 

197OPTION_GENERIC_DOMAIN_STYLE = "handle_as_domain" 

198OPTION_STRICT_TEMPLATE = "strict_template" 

199 

200OPTION_SENDER = "sender" 

201OPTION_SENDER_NAME = "sender_name" 

202OPTION_DEFAULT_TITLE = "default_title" 

203OPTION_MODE = "mode" 

204OPTION_MEDIA_AUTO_PAUSE = "media_auto_pause" 

205 

206SELECT_INCLUDE = "include" 

207SELECT_EXCLUDE = "exclude" 

208 

209EMAIL_OPTION_MODE_DIRECT = "direct" 

210EMAIL_OPTION_MODE_HA_SMTP = "ha_smtp" 

211 

212 

213RE_DEVICE_ID = r"^[0-9a-f]{32}$" 

214 

215RESERVED_DELIVERY_NAMES: list[str] = ["ALL"] 

216RESERVED_SCENARIO_NAMES: list[str] = ["NO_SCENARIO", "NULL"] 

217RESERVED_DATA_KEYS: list[str] = [ATTR_DOMAIN, ATTR_SERVICE, "action"] 

218 

219 

220CONF_DUPE_CHECK: Final[str] = "dupe_check" 

221CONF_DUPE_POLICY: Final[str] = "dupe_policy" 

222CONF_TTL: Final[str] = "ttl" 

223CONF_SIZE: Final[str] = "size" 

224ATTR_DUPE_POLICY_MTSLP: Final[str] = "dupe_policy_message_title_same_or_lower_priority" 

225ATTR_DUPE_POLICY_MT: Final[str] = "dupe_policy_message_title_same" 

226ATTR_DUPE_POLICY_NONE: Final[str] = "dupe_policy_none" 

227CONF_MOBILE_APP_ID: Final[str] = "mobile_app_id" 

228CONF_TRANSPORT_DATA: Final[str] = "transport_data" 

229 

230 

231CONF_DEVICE_TRACKER: Final[str] = "device_tracker" 

232 

233 

234CONF_DEVICE_NAME: Final[str] = "device_name" 

235CONF_DEVICE_LABELS: Final[str] = "device_labels" 

236 

237OPTION_DEVICE_DOMAIN: Final[str] = "device_domain" 

238 

239OPTION_DEVICE_MODEL_SELECT: Final[str] = "device_model_select" 

240OPTION_DEVICE_MANUFACTURER_SELECT: Final[str] = "device_manufacturer_select" 

241OPTION_DEVICE_OS_SELECT: Final[str] = "device_os_select" 

242OPTION_DEVICE_LABEL_SELECT: Final[str] = "device_label_select" 

243OPTION_DEVICE_AREA_SELECT: Final[str] = "device_area_select" 

244OPTION_DEVICE_DISCOVERY: Final[str] = "device_discovery" 

245 

246MANUFACTURER_APPLE = "Apple" 

247 

248TARGET_REQUIRE_ALWAYS = "always" 

249TARGET_REQUIRE_NEVER = "never" 

250TARGET_REQUIRE_OPTIONAL = "optional" 

251 

252 

253TRANSPORT_SMS = "sms" 

254TRANSPORT_TTS = "tts" 

255TRANSPORT_MQTT = "mqtt" 

256TRANSPORT_EMAIL = "email" 

257TRANSPORT_ALEXA = "alexa_devices" 

258TRANSPORT_ALEXA_MEDIA_PLAYER = "alexa_media_player" 

259TRANSPORT_MOBILE_PUSH = "mobile_push" 

260TRANSPORT_MEDIA = "media" 

261TRANSPORT_CHIME = "chime" 

262TRANSPORT_GENERIC = "generic" 

263TRANSPORT_NOTIFY_ENTITY = "notify_entity" 

264TRANSPORT_PERSISTENT = "persistent" 

265TRANSPORT_NTFY = "ntfy" 

266TRANSPORT_GOTIFY = "gotify" 

267TRANSPORT_TELEGRAM = "telegram" 

268TRANSPORT_LAMETRIC = "lametric" 

269TRANSPORT_PUSHOVER = "pushover" 

270TRANSPORT_HTML5 = "html5" 

271TRANSPORT_MATRIX = "matrix" 

272TRANSPORT_KODI = "kodi" 

273TRANSPORT_DISCORD = "discord" 

274TRANSPORT_VALUES = [ 

275 TRANSPORT_SMS, 

276 TRANSPORT_MQTT, 

277 TRANSPORT_ALEXA, 

278 TRANSPORT_ALEXA_MEDIA_PLAYER, 

279 TRANSPORT_MOBILE_PUSH, 

280 TRANSPORT_CHIME, 

281 TRANSPORT_EMAIL, 

282 TRANSPORT_MEDIA, 

283 TRANSPORT_PERSISTENT, 

284 TRANSPORT_TTS, 

285 TRANSPORT_GENERIC, 

286 TRANSPORT_NOTIFY_ENTITY, 

287 TRANSPORT_NTFY, 

288 TRANSPORT_GOTIFY, 

289 TRANSPORT_TELEGRAM, 

290 TRANSPORT_LAMETRIC, 

291 TRANSPORT_PUSHOVER, 

292 TRANSPORT_HTML5, 

293 TRANSPORT_MATRIX, 

294 TRANSPORT_KODI, 

295 TRANSPORT_DISCORD, 

296] 

297 

298 

299CONF_CONNECTION: Final[str] = "connection" 

300CONF_ENCRYPTION: Final[str] = "encryption" 

301 

302CONF_DEVICE_DISCOVERY: Final[str] = "device_discovery" 

303CONF_DEVICE_DOMAIN: Final[str] = OPTION_DEVICE_DOMAIN 

304CONF_DEVICE_MODEL_INCLUDE: Final[str] = "device_model_include" 

305CONF_DEVICE_MODEL_EXCLUDE: Final[str] = "device_model_exclude" 

306 

307CONF_SNOOZE = "snooze" 

308CONF_SNOOZE_TIME = "snooze_time" 

309 

310# Idea - differentiate enabled as recipient vs as occupant, for ALL_IN etc check 

311# May need condition, and also enabled if delivery disabled 

312# CONF_OCCUPANCY="occupancy" 

313# OPTION_OCCUPANCY_DEFAULT="default" 

314# OPTIONS_OCCUPANCY=[OPTION_OCCUPANCY_DEFAULT,OPTION_OCCUPANCY_EXCLUDE] 

315# OPTION_OCCUPANCY_EXCLUDE="exclude" 

316 

317CONF_PHONE_NUMBER: str = "phone_number" 

318 

319 

320CONF_TUNE: Final[str] = "tune" 

321CONF_VOLUME: Final[str] = "volume" 

322CONF_DURATION: Final[str] = "duration" 

323 

324OPTIONS_CHIME_DOMAINS = ["media_player", "switch", "script", "rest_command", "siren", "alexa_devices"]