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
« prev ^ index » next coverage.py v7.15.2, created at 2026-09-01 18:25 +0000
1"""The Supernotify integration"""
3from typing import Final
5from homeassistant.const import (
6 ATTR_DOMAIN,
7 ATTR_SERVICE,
8)
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"
37CONF_DATA: Final[str] = "data"
38CONF_OPTIONS: Final[str] = "options"
39CONF_MOBILE: Final[str] = "mobile"
40CONF_NOTIFY: Final[str] = "notify"
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"
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"
72PLATFORM_FRIGATE = "frigate"
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"
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"
126DELIVERY_SELECTION_IMPLICIT = "implicit"
127DELIVERY_SELECTION_EXPLICIT = "explicit"
128DELIVERY_SELECTION_FIXED = "fixed"
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
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]
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]
160PRIORITY_CRITICAL = "critical"
161PRIORITY_HIGH = "high"
162PRIORITY_MEDIUM = "medium"
163PRIORITY_LOW = "low"
164PRIORITY_MINIMUM = "minimum"
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}
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"
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"
200OPTION_SENDER = "sender"
201OPTION_SENDER_NAME = "sender_name"
202OPTION_DEFAULT_TITLE = "default_title"
203OPTION_MODE = "mode"
204OPTION_MEDIA_AUTO_PAUSE = "media_auto_pause"
206SELECT_INCLUDE = "include"
207SELECT_EXCLUDE = "exclude"
209EMAIL_OPTION_MODE_DIRECT = "direct"
210EMAIL_OPTION_MODE_HA_SMTP = "ha_smtp"
213RE_DEVICE_ID = r"^[0-9a-f]{32}$"
215RESERVED_DELIVERY_NAMES: list[str] = ["ALL"]
216RESERVED_SCENARIO_NAMES: list[str] = ["NO_SCENARIO", "NULL"]
217RESERVED_DATA_KEYS: list[str] = [ATTR_DOMAIN, ATTR_SERVICE, "action"]
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"
231CONF_DEVICE_TRACKER: Final[str] = "device_tracker"
234CONF_DEVICE_NAME: Final[str] = "device_name"
235CONF_DEVICE_LABELS: Final[str] = "device_labels"
237OPTION_DEVICE_DOMAIN: Final[str] = "device_domain"
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"
246MANUFACTURER_APPLE = "Apple"
248TARGET_REQUIRE_ALWAYS = "always"
249TARGET_REQUIRE_NEVER = "never"
250TARGET_REQUIRE_OPTIONAL = "optional"
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]
299CONF_CONNECTION: Final[str] = "connection"
300CONF_ENCRYPTION: Final[str] = "encryption"
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"
307CONF_SNOOZE = "snooze"
308CONF_SNOOZE_TIME = "snooze_time"
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"
317CONF_PHONE_NUMBER: str = "phone_number"
320CONF_TUNE: Final[str] = "tune"
321CONF_VOLUME: Final[str] = "volume"
322CONF_DURATION: Final[str] = "duration"
324OPTIONS_CHIME_DOMAINS = ["media_player", "switch", "script", "rest_command", "siren", "alexa_devices"]