* Added availability_template to Template Cover platform * Added availability_template to Template Binary Sensor platform * Added availability_template to Template Fan platform * Added availability_template to Template Light platform * Added availability_template to Template Sensor platform * Added availability_template to Template Switch platform * Added availability_template to Template Vacuum platform * Added availability_template to Template Lock platform * Added to test for invalid values in availability_template * Black and Lint fix * black formatting * Added to test for invalid values in availability_template * black * Added to test for invalid values in availability_template * Added to test for invalid values in availability_template * simplified exception handler * Fixed Entity discovery big and coverage * Added to test for invalid values in availability_template * flake8 * fixed component ID in test * Added to test for invalid values in availability_template * Added to test for invalid values in availability_template * Made availability_template redering erorr more concise * Cleaned template setup * I'll remember to run black every time one of these days... * Refactored Template initialisation * Refactored Template initialisation * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Updated AVAILABILITY_TEMPLATE Rendering error * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Moved const to package Const.py * Fix import order (pylint) * Fix import order (pylint) * Fix import order (pylint) * Fix import order (pylint) * Fix import order (pylint) * Fix import order (pylint) * Fix import order (pylint) * Fixed linting issues * Moved availability_template rendering to common loop * Moved availability_template rendering to common loop * Moved availability_template rendering to common loop * Moved availability_template rendering to common loop * Removed 'Magic' string * Removed 'Magic' string and removed duplicate code * Removed 'Magic' string * Removed 'Magic' string * Brought contant into line * Refactored availability_tempalte rendering to common loop * Removed 'Magic' string * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * Cleaned up const and compare lowercase result to 'true' * reverted _available back to boolean * reverted _available back to boolean * reverted _available back to boolean * reverted _available back to boolean * reverted _available back to boolean * reverted _available back to boolean * reverted _available back to boolean * Fixed tests (magic values and state checks) * Fixed tests (magic values and state checks) * Fixed tests (async, magic values and state checks) * Fixed tests (async, magic values and state checks) * Fixed tests (async, magic values and state checks) * Fixed tests (async, magic values and state checks) * Fixed tests (async, magic values and state checks) * Removed duplicate * Clean up and remove debug * Reverted Dev Container Change
60 lines
1.9 KiB
Python
60 lines
1.9 KiB
Python
"""The template component."""
|
|
|
|
import logging
|
|
|
|
from itertools import chain
|
|
from homeassistant.const import MATCH_ALL
|
|
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
def initialise_templates(hass, templates, attribute_templates=None):
|
|
"""Initialise templates and attribute templates."""
|
|
if attribute_templates is None:
|
|
attribute_templates = dict()
|
|
for template in chain(templates.values(), attribute_templates.values()):
|
|
if template is None:
|
|
continue
|
|
template.hass = hass
|
|
|
|
|
|
def extract_entities(
|
|
device_name, device_type, manual_entity_ids, templates, attribute_templates=None
|
|
):
|
|
"""Extract entity ids from templates and attribute templates."""
|
|
if attribute_templates is None:
|
|
attribute_templates = dict()
|
|
entity_ids = set()
|
|
if manual_entity_ids is None:
|
|
invalid_templates = []
|
|
for template_name, template in chain(
|
|
templates.items(), attribute_templates.items()
|
|
):
|
|
if template is None:
|
|
continue
|
|
|
|
template_entity_ids = template.extract_entities()
|
|
|
|
if template_entity_ids != MATCH_ALL:
|
|
entity_ids |= set(template_entity_ids)
|
|
else:
|
|
invalid_templates.append(template_name.replace("_template", ""))
|
|
|
|
if invalid_templates:
|
|
entity_ids = MATCH_ALL
|
|
_LOGGER.warning(
|
|
"Template %s '%s' has no entity ids configured to track nor"
|
|
" were we able to extract the entities to track from the %s "
|
|
"template(s). This entity will only be able to be updated "
|
|
"manually.",
|
|
device_type,
|
|
device_name,
|
|
", ".join(invalid_templates),
|
|
)
|
|
else:
|
|
entity_ids = list(entity_ids)
|
|
else:
|
|
entity_ids = manual_entity_ids
|
|
|
|
return entity_ids
|