Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
c08aa74
Cleanup Tuya climate/cover tests (#149157)
epenet Jul 21, 2025
8c964e6
Add support for UV index attribute in template weather entity (#149015)
Elmo-S Jul 21, 2025
0dba32d
Use OptionsFlowWithReload in keenetic_ndms2 (#149173)
gjohansson-ST Jul 21, 2025
c22f65b
Use OptionsFlowWithReload in isy994 (#149174)
gjohansson-ST Jul 21, 2025
94d077e
Use OptionsFlowWithReload in honeywell (#149162)
gjohansson-ST Jul 21, 2025
bf1a660
Bump Lokalise docker image to v2.6.14 (#149031)
silamon Jul 21, 2025
1fba619
Update pytest-asyncio to 1.1.0 (#149177)
cdce8p Jul 21, 2025
67c68de
Make async_track_state_change/report_event listeners fire in order (#…
emontnemery Jul 21, 2025
75a90ab
Bump actions/ai-inference from 1.1.0 to 1.2.3 (#149159)
dependabot[bot] Jul 21, 2025
b59d8b5
Improve statistics sensor tests (#149181)
emontnemery Jul 21, 2025
05566e1
Update websockets pin (#149004)
cdce8p Jul 21, 2025
be25a7b
Use OptionsFlowWithReload in ezviz (#149167)
gjohansson-ST Jul 21, 2025
d774de7
Update types packages (#149178)
cdce8p Jul 21, 2025
bc0162c
Add select for heating circuit to Tado zones (#147902)
luukdobber Jul 21, 2025
875219c
Adds support for hide_states options in state selector (#148959)
piitaya Jul 21, 2025
2d86fa0
SleepIQ add core climate for SleepNumber Climate 360 beds (#134718)
dferg Jul 21, 2025
1315095
Make spelling of "devolo Home Network" consistent (#149165)
NoRi2909 Jul 21, 2025
6b489e0
Bump sigstore/cosign-installer from 3.9.1 to 3.9.2 (#148985)
dependabot[bot] Jul 21, 2025
64f1907
Add Demo Vacuum in entity name (#148629)
lboue Jul 21, 2025
af0480f
Use OptionsFlowWithReload in slide_local (#149168)
gjohansson-ST Jul 21, 2025
54fa4d6
Use OptionsFlowWithReload in sonarr (#149166)
gjohansson-ST Jul 21, 2025
671523f
Use OptionsFlowWithReload in hyperion (#149163)
gjohansson-ST Jul 21, 2025
2476e7e
Revert setting a user to download translations (#149190)
joostlek Jul 21, 2025
102ef25
Bump hass-nabucasa from 0.107.1 to 0.108.0 (#149189)
ludeeus Jul 21, 2025
f3db3ba
Bump pyschlage to 2025.7.3 (#149184)
dknowles2 Jul 21, 2025
80b96b0
Use OptionsFlowWithReload in roku (#149172)
gjohansson-ST Jul 21, 2025
4025276
Switch to a new library in Onkyo (#148613)
arturpragacz Jul 21, 2025
3c70932
Use OptionsFlowWithReload in enphase_envoy (#149171)
gjohansson-ST Jul 21, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/builder.yml
Original file line number Diff line number Diff line change
Expand Up @@ -324,7 +324,7 @@ jobs:
uses: actions/checkout@v4.2.2

- name: Install Cosign
uses: sigstore/cosign-installer@v3.9.1
uses: sigstore/cosign-installer@v3.9.2
with:
cosign-release: "v2.2.3"

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/detect-duplicate-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@ jobs:
- name: Detect duplicates using AI
id: ai_detection
if: steps.extract.outputs.should_continue == 'true' && steps.fetch_similar.outputs.has_similar == 'true'
uses: actions/ai-inference@v1.1.0
uses: actions/ai-inference@v1.2.3
with:
model: openai/gpt-4o
system-prompt: |
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/detect-non-english-issues.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
- name: Detect language using AI
id: ai_language_detection
if: steps.detect_language.outputs.should_continue == 'true'
uses: actions/ai-inference@v1.1.0
uses: actions/ai-inference@v1.2.3
with:
model: openai/gpt-4o-mini
system-prompt: |
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/cloud/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@
"integration_type": "system",
"iot_class": "cloud_push",
"loggers": ["acme", "hass_nabucasa", "snitun"],
"requirements": ["hass-nabucasa==0.107.1"],
"requirements": ["hass-nabucasa==0.108.0"],
"single_config_entry": true
}
10 changes: 5 additions & 5 deletions homeassistant/components/demo/vacuum.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@
)

FAN_SPEEDS = ["min", "medium", "high", "max"]
DEMO_VACUUM_COMPLETE = "0_Ground_floor"
DEMO_VACUUM_MOST = "1_First_floor"
DEMO_VACUUM_BASIC = "2_Second_floor"
DEMO_VACUUM_MINIMAL = "3_Third_floor"
DEMO_VACUUM_NONE = "4_Fourth_floor"
DEMO_VACUUM_COMPLETE = "Demo vacuum 0 ground floor"
DEMO_VACUUM_MOST = "Demo vacuum 1 first floor"
DEMO_VACUUM_BASIC = "Demo vacuum 2 second floor"
DEMO_VACUUM_MINIMAL = "Demo vacuum 3 third floor"
DEMO_VACUUM_NONE = "Demo vacuum 4 fourth floor"


async def async_setup_entry(
Expand Down
6 changes: 3 additions & 3 deletions homeassistant/components/devolo_home_network/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
"password": "[%key:common::config_flow::data::password%]"
},
"data_description": {
"ip_address": "IP address of your devolo Home Network device. This can be found in the devolo Home Network App on the device dashboard.",
"ip_address": "IP address of your devolo Home Network device. This can be found in the devolo Home Network app on the device dashboard.",
"password": "Password you protected the device with."
}
},
Expand All @@ -22,8 +22,8 @@
}
},
"zeroconf_confirm": {
"description": "Do you want to add the devolo home network device with the hostname `{host_name}` to Home Assistant?",
"title": "Discovered devolo home network device",
"description": "Do you want to add the devolo Home Network device with the hostname `{host_name}` to Home Assistant?",
"title": "Discovered devolo Home Network device",
"data": {
"password": "[%key:common::config_flow::data::password%]"
},
Expand Down
9 changes: 0 additions & 9 deletions homeassistant/components/enphase_envoy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

from pyenphase import Envoy

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import ConfigEntryNotReady
Expand Down Expand Up @@ -47,17 +46,9 @@ async def async_setup_entry(hass: HomeAssistant, entry: EnphaseConfigEntry) -> b

await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)

# Reload entry when it is updated.
entry.async_on_unload(entry.add_update_listener(async_reload_entry))

return True


async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
"""Reload the config entry when it changed."""
await hass.config_entries.async_reload(entry.entry_id)


async def async_unload_entry(hass: HomeAssistant, entry: EnphaseConfigEntry) -> bool:
"""Unload a config entry."""
coordinator = entry.runtime_data
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/enphase_envoy/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
SOURCE_REAUTH,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
OptionsFlowWithReload,
)
from homeassistant.const import (
CONF_HOST,
Expand Down Expand Up @@ -335,7 +335,7 @@ async def async_step_reconfigure(
)


class EnvoyOptionsFlowHandler(OptionsFlow):
class EnvoyOptionsFlowHandler(OptionsFlowWithReload):
"""Envoy config flow options handler."""

async def async_step_init(
Expand Down
7 changes: 0 additions & 7 deletions homeassistant/components/ezviz/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -94,8 +94,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: EzvizConfigEntry) -> boo

entry.runtime_data = coordinator

entry.async_on_unload(entry.add_update_listener(_async_update_listener))

# Check EZVIZ cloud account entity is present, reload cloud account entities for camera entity change to take effect.
# Cameras are accessed via local RTSP stream with unique credentials per camera.
# Separate camera entities allow for credential changes per camera.
Expand All @@ -120,8 +118,3 @@ async def async_unload_entry(hass: HomeAssistant, entry: EzvizConfigEntry) -> bo
return await hass.config_entries.async_unload_platforms(
entry, PLATFORMS_BY_TYPE[sensor_type]
)


async def _async_update_listener(hass: HomeAssistant, entry: EzvizConfigEntry) -> None:
"""Handle options update."""
await hass.config_entries.async_reload(entry.entry_id)
8 changes: 6 additions & 2 deletions homeassistant/components/ezviz/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
from pyezvizapi.test_cam_rtsp import TestRTSPAuth
import voluptuous as vol

from homeassistant.config_entries import ConfigFlow, ConfigFlowResult, OptionsFlow
from homeassistant.config_entries import (
ConfigFlow,
ConfigFlowResult,
OptionsFlowWithReload,
)
from homeassistant.const import (
CONF_CUSTOMIZE,
CONF_IP_ADDRESS,
Expand Down Expand Up @@ -386,7 +390,7 @@ async def async_step_reauth_confirm(
)


class EzvizOptionsFlowHandler(OptionsFlow):
class EzvizOptionsFlowHandler(OptionsFlowWithReload):
"""Handle EZVIZ client options."""

async def async_step_init(
Expand Down
9 changes: 7 additions & 2 deletions homeassistant/components/habitica/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from dataclasses import asdict, fields
import datetime
from math import floor
from typing import TYPE_CHECKING
from typing import TYPE_CHECKING, Literal

from dateutil.rrule import (
DAILY,
Expand Down Expand Up @@ -56,7 +56,12 @@ def next_due_date(task: TaskData, today: datetime.datetime) -> datetime.date | N
return dt_util.as_local(task.nextDue[0]).date()


FREQUENCY_MAP = {"daily": DAILY, "weekly": WEEKLY, "monthly": MONTHLY, "yearly": YEARLY}
FREQUENCY_MAP: dict[str, Literal[0, 1, 2, 3]] = {
"daily": DAILY,
"weekly": WEEKLY,
"monthly": MONTHLY,
"yearly": YEARLY,
}
WEEKDAY_MAP = {"m": MO, "t": TU, "w": WE, "th": TH, "f": FR, "s": SA, "su": SU}


Expand Down
9 changes: 0 additions & 9 deletions homeassistant/components/honeywell/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,9 @@ async def async_setup_entry(
config_entry.runtime_data = HoneywellData(config_entry.entry_id, client, devices)
await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)

config_entry.async_on_unload(config_entry.add_update_listener(update_listener))

return True


async def update_listener(
hass: HomeAssistant, config_entry: HoneywellConfigEntry
) -> None:
"""Update listener."""
await hass.config_entries.async_reload(config_entry.entry_id)


async def async_unload_entry(
hass: HomeAssistant, config_entry: HoneywellConfigEntry
) -> bool:
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/honeywell/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
OptionsFlowWithReload,
)
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import callback
Expand Down Expand Up @@ -136,7 +136,7 @@ def async_get_options_flow(
return HoneywellOptionsFlowHandler()


class HoneywellOptionsFlowHandler(OptionsFlow):
class HoneywellOptionsFlowHandler(OptionsFlowWithReload):
"""Config flow options for Honeywell."""

async def async_step_init(self, user_input=None) -> ConfigFlowResult:
Expand Down
6 changes: 0 additions & 6 deletions homeassistant/components/hyperion/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,16 +266,10 @@ async def async_instances_to_clients_raw(instances: list[dict[str, Any]]) -> Non
assert hyperion_client
if hyperion_client.instances is not None:
await async_instances_to_clients_raw(hyperion_client.instances)
entry.async_on_unload(entry.add_update_listener(_async_entry_updated))

return True


async def _async_entry_updated(hass: HomeAssistant, entry: HyperionConfigEntry) -> None:
"""Handle entry updates."""
await hass.config_entries.async_reload(entry.entry_id)


async def async_unload_entry(hass: HomeAssistant, entry: HyperionConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/hyperion/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
ConfigEntry,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
OptionsFlowWithReload,
)
from homeassistant.const import (
CONF_BASE,
Expand Down Expand Up @@ -431,7 +431,7 @@ def async_get_options_flow(
return HyperionOptionsFlow()


class HyperionOptionsFlow(OptionsFlow):
class HyperionOptionsFlow(OptionsFlowWithReload):
"""Hyperion options flow."""

def _create_client(self) -> client.HyperionClient:
Expand Down
6 changes: 0 additions & 6 deletions homeassistant/components/isy994/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,19 +171,13 @@ def _async_stop_auto_update(event: Event) -> None:
_LOGGER.debug("ISY Starting Event Stream and automatic updates")
isy.websocket.start()

entry.async_on_unload(entry.add_update_listener(_async_update_listener))
entry.async_on_unload(
hass.bus.async_listen_once(EVENT_HOMEASSISTANT_STOP, _async_stop_auto_update)
)

return True


async def _async_update_listener(hass: HomeAssistant, entry: IsyConfigEntry) -> None:
"""Handle options update."""
await hass.config_entries.async_reload(entry.entry_id)


@callback
def _async_get_or_create_isy_device_in_registry(
hass: HomeAssistant, entry: IsyConfigEntry, isy: ISY
Expand Down
6 changes: 3 additions & 3 deletions homeassistant/components/isy994/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
SOURCE_IGNORE,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
OptionsFlowWithReload,
)
from homeassistant.const import CONF_HOST, CONF_NAME, CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant, callback
Expand Down Expand Up @@ -143,7 +143,7 @@ def __init__(self) -> None:
@callback
def async_get_options_flow(
config_entry: IsyConfigEntry,
) -> OptionsFlow:
) -> OptionsFlowHandler:
"""Get the options flow for this handler."""
return OptionsFlowHandler()

Expand Down Expand Up @@ -316,7 +316,7 @@ async def async_step_reauth_confirm(
)


class OptionsFlowHandler(OptionsFlow):
class OptionsFlowHandler(OptionsFlowWithReload):
"""Handle a option flow for ISY/IoX."""

async def async_step_init(
Expand Down
7 changes: 0 additions & 7 deletions homeassistant/components/keenetic_ndms2/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ async def async_setup_entry(hass: HomeAssistant, entry: KeeneticConfigEntry) ->
router = KeeneticRouter(hass, entry)
await router.async_setup()

entry.async_on_unload(entry.add_update_listener(update_listener))

entry.runtime_data = router

await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
Expand Down Expand Up @@ -87,11 +85,6 @@ async def async_unload_entry(
return unload_ok


async def update_listener(hass: HomeAssistant, entry: KeeneticConfigEntry) -> None:
"""Handle options update."""
await hass.config_entries.async_reload(entry.entry_id)


def async_add_defaults(hass: HomeAssistant, entry: KeeneticConfigEntry):
"""Populate default options."""
host: str = entry.data[CONF_HOST]
Expand Down
4 changes: 2 additions & 2 deletions homeassistant/components/keenetic_ndms2/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
SOURCE_RECONFIGURE,
ConfigFlow,
ConfigFlowResult,
OptionsFlow,
OptionsFlowWithReload,
)
from homeassistant.const import (
CONF_HOST,
Expand Down Expand Up @@ -153,7 +153,7 @@ async def async_step_ssdp(
return await self.async_step_user()


class KeeneticOptionsFlowHandler(OptionsFlow):
class KeeneticOptionsFlowHandler(OptionsFlowWithReload):
"""Handle options."""

config_entry: KeeneticConfigEntry
Expand Down
Loading
Loading