mirror of
https://github.com/basnijholt/adaptive-lighting.git
synced 2026-09-27 20:34:20 +02:00
fix: replace deprecated get_astral_location with get_astral_observer (#1482)
* fix: replace deprecated get_astral_location with get_astral_observer (#1481) HA 2026.7 deprecates homeassistant.helpers.sun.get_astral_location (removal planned for 2027.7) in favor of get_astral_observer, causing a deprecation warning in the HA logs. - Switch SunEvents/SunLightSettings from astral.location.Location to astral.Observer, using the astral.sun module functions (which return UTC times by default, matching the previous local=False calls). - Use get_astral_observer in switch.py, with a fallback for HA < 2026.7 that constructs the Observer directly from the HA config. - Update tests and the webapp simulator accordingly. * ci: handle removal of requirements_test_all.txt in HA 2026.8 dev HA core removed requirements_test_all.txt (home-assistant/core#171530), which made test_dependencies.py crash with FileNotFoundError and broke the dev pytest job and the Docker builds. Fall back to requirements_all.txt, which carries the same per-integration '# homeassistant.components.x' annotations. Also extend the aiohasupervisor pin lookup in scripts/setup-dependencies accordingly. * test: support modern template light config for HA 2026.6+ HA 2026.6 removed the legacy `light: platform: template` YAML format (home-assistant/core#169615), so setup_lights found no template platform on HA dev and every test using it failed with IndexError. Detect legacy support at runtime (PLATFORM_SCHEMA presence) and fall back to the modern `template:` config format. The group platform is set up before the template integration in the modern path, because setting up `template` also sets up the `light` domain, which would make a later async_setup_component(hass, LIGHT_DOMAIN, ...) a no-op.
This commit is contained in:
parent
ddaf851be3
commit
d4d3d50ada
8 changed files with 159 additions and 94 deletions
|
|
@ -97,6 +97,7 @@ except ImportError:
|
|||
# HA < 2025.8
|
||||
from homeassistant.components.template.light import LightTemplate
|
||||
|
||||
from homeassistant.components.template import light as template_light
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.const import (
|
||||
ATTR_AREA_ID,
|
||||
|
|
@ -121,6 +122,10 @@ from homeassistant.util.color import color_temperature_mired_to_kelvin
|
|||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
# HA 2026.6 removed the legacy `light: platform: template` YAML format
|
||||
# (home-assistant/core#169615); use the modern `template:` format there.
|
||||
LEGACY_TEMPLATE_LIGHTS = hasattr(template_light, "PLATFORM_SCHEMA")
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
SUNRISE = datetime.datetime(
|
||||
|
|
@ -200,37 +205,65 @@ async def setup_switch(hass, extra_data) -> tuple[MockConfigEntry, AdaptiveSwitc
|
|||
async def setup_lights(hass: HomeAssistant, with_group: bool = False):
|
||||
"""Set up 3 light entities using the 'template' platform."""
|
||||
n = 3 if not with_group else 5 # last 2 will be put in a group
|
||||
template_lights = {
|
||||
f"light_{i}": {
|
||||
"unique_id": f"light_{i}",
|
||||
"friendly_name": f"light_{i}",
|
||||
"turn_on": None,
|
||||
"turn_off": None,
|
||||
"set_level": None,
|
||||
"set_temperature": None,
|
||||
"set_color": None,
|
||||
}
|
||||
for i in range(1, n + 1)
|
||||
|
||||
group_platform = {
|
||||
"platform": "group",
|
||||
"entities": ["light.light_4", "light.light_5"],
|
||||
"name": "Light Group",
|
||||
"unique_id": "light_group",
|
||||
"all": "false",
|
||||
}
|
||||
template_lights["light_3"]["supports_transition_template"] = True
|
||||
platforms = [{"platform": "template", "lights": template_lights}]
|
||||
|
||||
if with_group:
|
||||
platforms.append(
|
||||
{
|
||||
"platform": "group",
|
||||
"entities": ["light.light_4", "light.light_5"],
|
||||
"name": "Light Group",
|
||||
"unique_id": "light_group",
|
||||
"all": "false",
|
||||
},
|
||||
if LEGACY_TEMPLATE_LIGHTS:
|
||||
template_lights = {
|
||||
f"light_{i}": {
|
||||
"unique_id": f"light_{i}",
|
||||
"friendly_name": f"light_{i}",
|
||||
"turn_on": None,
|
||||
"turn_off": None,
|
||||
"set_level": None,
|
||||
"set_temperature": None,
|
||||
"set_color": None,
|
||||
}
|
||||
for i in range(1, n + 1)
|
||||
}
|
||||
template_lights["light_3"]["supports_transition_template"] = True
|
||||
platforms = [{"platform": "template", "lights": template_lights}]
|
||||
if with_group:
|
||||
platforms.append(group_platform)
|
||||
await async_setup_component(
|
||||
hass,
|
||||
LIGHT_DOMAIN,
|
||||
{LIGHT_DOMAIN: platforms},
|
||||
)
|
||||
else:
|
||||
if with_group:
|
||||
# Setting up `template` below also sets up the `light` domain,
|
||||
# after which `async_setup_component(hass, LIGHT_DOMAIN, ...)`
|
||||
# would be a no-op, so the group platform must be set up first.
|
||||
await async_setup_component(
|
||||
hass,
|
||||
LIGHT_DOMAIN,
|
||||
{LIGHT_DOMAIN: [group_platform]},
|
||||
)
|
||||
modern_lights = [
|
||||
{
|
||||
"name": f"light_{i}",
|
||||
"unique_id": f"light_{i}",
|
||||
"turn_on": None,
|
||||
"turn_off": None,
|
||||
"set_level": None,
|
||||
"set_temperature": None,
|
||||
"set_hs": None,
|
||||
}
|
||||
for i in range(1, n + 1)
|
||||
]
|
||||
modern_lights[2]["supports_transition"] = "{{ true }}"
|
||||
await async_setup_component(
|
||||
hass,
|
||||
"template",
|
||||
{"template": {"light": modern_lights}},
|
||||
)
|
||||
|
||||
await async_setup_component(
|
||||
hass,
|
||||
LIGHT_DOMAIN,
|
||||
{LIGHT_DOMAIN: platforms},
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
if with_group:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue