Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -326,7 +326,7 @@ jobs:
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0

- name: Install Cosign
uses: sigstore/cosign-installer@d7543c93d881b35a8faa02e8e3605f69b7a1ce62 # v3.10.0
uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0
with:
cosign-release: "v2.2.3"

Expand Down
2 changes: 2 additions & 0 deletions CODEOWNERS

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion homeassistant/components/airq/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
},
"data_description": {
"return_average": "air-Q allows to poll both the noisy sensor readings as well as the values averaged on the device (default)",
"clip_negatives": "For baseline calibration purposes, certain sensor values may briefly become negative. The default behaviour is to clip such values to 0"
"clip_negatives": "For baseline calibration purposes, certain sensor values may briefly become negative. The default behavior is to clip such values to 0"
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/bayesian/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@
},
"state": {
"title": "Add a Bayesian sensor",
"description": "Add an observation which evaluates to `True` when the value of the sensor exactly matches *'To state'*. When `False`, it will update the prior with probabilities that are the inverse of those set below. This behaviour can be overridden by adding observations for the same entity's other states.",
"description": "Add an observation which evaluates to `True` when the value of the sensor exactly matches *'To state'*. When `False`, it will update the prior with probabilities that are the inverse of those set below. This behavior can be overridden by adding observations for the same entity's other states.",

"data": {
"name": "[%key:common::config_flow::data::name%]",
Expand Down
1 change: 0 additions & 1 deletion homeassistant/components/bluetooth/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,6 @@
"BluetoothServiceInfo",
"BluetoothServiceInfoBleak",
"HaBluetoothConnector",
"HomeAssistantRemoteScanner",
"async_address_present",
"async_ble_device_from_address",
"async_clear_address_from_match_history",
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/cloud/google_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@

from homeassistant.components.binary_sensor import BinarySensorDeviceClass
from homeassistant.components.google_assistant import DOMAIN as GOOGLE_DOMAIN
from homeassistant.components.google_assistant.helpers import AbstractConfig
from homeassistant.components.google_assistant.helpers import ( # pylint: disable=hass-component-root-import
AbstractConfig,
)
from homeassistant.components.homeassistant.exposed_entities import (
async_expose_entity,
async_get_assistant_settings,
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/cloud/prefs.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from homeassistant.auth.const import GROUP_ID_ADMIN
from homeassistant.auth.models import User
from homeassistant.components import webhook
from homeassistant.components.google_assistant.http import (
from homeassistant.components.google_assistant.http import ( # pylint: disable=hass-component-root-import
async_get_users as async_get_google_assistant_users,
)
from homeassistant.core import HomeAssistant, callback
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/config/automation.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import uuid

from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
from homeassistant.components.automation.config import async_validate_config_item
from homeassistant.components.automation.config import ( # pylint: disable=hass-component-root-import
async_validate_config_item,
)
from homeassistant.config import AUTOMATION_CONFIG_PATH
from homeassistant.const import CONF_ID, SERVICE_RELOAD
from homeassistant.core import HomeAssistant, callback
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/config/script.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
from typing import Any

from homeassistant.components.script import DOMAIN as SCRIPT_DOMAIN
from homeassistant.components.script.config import async_validate_config_item
from homeassistant.components.script.config import ( # pylint: disable=hass-component-root-import
async_validate_config_item,
)
from homeassistant.config import SCRIPT_CONFIG_PATH
from homeassistant.const import SERVICE_RELOAD
from homeassistant.core import HomeAssistant, callback
Expand Down
4 changes: 3 additions & 1 deletion homeassistant/components/ffmpeg_noise/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@
FFmpegManager,
get_ffmpeg_manager,
)
from homeassistant.components.ffmpeg_motion.binary_sensor import FFmpegBinarySensor
from homeassistant.components.ffmpeg_motion.binary_sensor import ( # pylint: disable=hass-component-root-import
FFmpegBinarySensor,
)
from homeassistant.const import CONF_NAME
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv
Expand Down
5 changes: 2 additions & 3 deletions homeassistant/components/freebox/camera.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
from typing import Any

from homeassistant.components.camera import CameraEntityFeature
from homeassistant.components.ffmpeg.camera import (
CONF_EXTRA_ARGUMENTS,
CONF_INPUT,
from homeassistant.components.ffmpeg import CONF_EXTRA_ARGUMENTS, CONF_INPUT
from homeassistant.components.ffmpeg.camera import ( # pylint: disable=hass-component-root-import
DEFAULT_ARGUMENTS,
FFmpegCamera,
)
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/growatt_server/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"domain": "growatt_server",
"name": "Growatt",
"codeowners": [],
"codeowners": ["@johanzander"],
"config_flow": true,
"documentation": "https://www.home-assistant.io/integrations/growatt_server",
"iot_class": "cloud_polling",
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/homekit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
BinarySensorDeviceClass,
)
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
from homeassistant.components.device_automation.trigger import (
from homeassistant.components.device_automation.trigger import ( # pylint: disable=hass-component-root-import
async_validate_trigger_config,
)
from homeassistant.components.event import DOMAIN as EVENT_DOMAIN, EventDeviceClass
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/knx/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@
"entity_label": "Entity name",
"entity_description": "Optional if a device is selected, otherwise required. If the entity is assigned to a device, the device name is used as prefix.",
"entity_category_title": "Entity category",
"entity_category_description": "Classification of a non-primary entity. Leave empty for standard behaviour."
"entity_category_description": "Classification of a non-primary entity. Leave empty for standard behavior."
},
"knx": {
"title": "KNX configuration",
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/mealie/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@
"integration_type": "service",
"iot_class": "local_polling",
"quality_scale": "platinum",
"requirements": ["aiomealie==1.0.0"]
"requirements": ["aiomealie==1.0.1"]
}
13 changes: 6 additions & 7 deletions homeassistant/components/metoffice/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,8 @@
import asyncio
import logging

import datapoint
import datapoint.Forecast
import datapoint.Manager
from datapoint.Forecast import Forecast
from datapoint.Manager import Manager

from homeassistant.config_entries import ConfigEntry
from homeassistant.const import (
Expand Down Expand Up @@ -48,19 +47,19 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:

coordinates = f"{latitude}_{longitude}"

connection = datapoint.Manager.Manager(api_key=api_key)
connection = Manager(api_key=api_key)

async def async_update_hourly() -> datapoint.Forecast:
async def async_update_hourly() -> Forecast:
return await hass.async_add_executor_job(
fetch_data, connection, latitude, longitude, "hourly"
)

async def async_update_daily() -> datapoint.Forecast:
async def async_update_daily() -> Forecast:
return await hass.async_add_executor_job(
fetch_data, connection, latitude, longitude, "daily"
)

async def async_update_twice_daily() -> datapoint.Forecast:
async def async_update_twice_daily() -> Forecast:
return await hass.async_add_executor_job(
fetch_data, connection, latitude, longitude, "twice-daily"
)
Expand Down
5 changes: 2 additions & 3 deletions homeassistant/components/metoffice/config_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,8 @@
import logging
from typing import Any

import datapoint
from datapoint.exceptions import APIException
import datapoint.Manager
from datapoint.Manager import Manager
from requests import HTTPError
import voluptuous as vol

Expand All @@ -31,7 +30,7 @@ async def validate_input(
Data has the keys from DATA_SCHEMA with values provided by the user.
"""
errors = {}
connection = datapoint.Manager.Manager(api_key=api_key)
connection = Manager(api_key=api_key)

try:
forecast = await hass.async_add_executor_job(
Expand Down
7 changes: 4 additions & 3 deletions homeassistant/components/metoffice/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,9 @@
import logging
from typing import Any, Literal

import datapoint
from datapoint.exceptions import APIException
from datapoint.Forecast import Forecast
from datapoint.Manager import Manager
from requests import HTTPError

from homeassistant.exceptions import ConfigEntryAuthFailed
Expand All @@ -16,7 +17,7 @@


def fetch_data(
connection: datapoint.Manager,
connection: Manager,
latitude: float,
longitude: float,
frequency: Literal["daily", "twice-daily", "hourly"],
Expand All @@ -26,7 +27,7 @@ def fetch_data(
return connection.get_forecast(
latitude, longitude, frequency, convert_weather_code=False
)
except (ValueError, datapoint.exceptions.APIException) as err:
except (ValueError, APIException) as err:
_LOGGER.error("Check Met Office connection: %s", err.args)
raise UpdateFailed from err
except HTTPError as err:
Expand Down
42 changes: 21 additions & 21 deletions homeassistant/components/metoffice/weather.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from datetime import datetime
from typing import Any, cast

from datapoint.Forecast import Forecast as ForecastData
from datapoint.Forecast import Forecast

from homeassistant.components.weather import (
ATTR_FORECAST_CONDITION,
Expand All @@ -22,7 +22,7 @@
ATTR_FORECAST_WIND_BEARING,
DOMAIN as WEATHER_DOMAIN,
CoordinatorWeatherEntity,
Forecast,
Forecast as WeatherForecast,
WeatherEntityFeature,
)
from homeassistant.config_entries import ConfigEntry
Expand Down Expand Up @@ -85,20 +85,20 @@ async def async_setup_entry(
)


def _build_hourly_forecast_data(timestep: dict[str, Any]) -> Forecast:
data = Forecast(datetime=timestep["time"].isoformat())
def _build_hourly_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
data = WeatherForecast(datetime=timestep["time"].isoformat())
_populate_forecast_data(data, timestep, HOURLY_FORECAST_ATTRIBUTE_MAP)
return data


def _build_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:
data = Forecast(datetime=timestep["time"].isoformat())
def _build_daily_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
data = WeatherForecast(datetime=timestep["time"].isoformat())
_populate_forecast_data(data, timestep, DAILY_FORECAST_ATTRIBUTE_MAP)
return data


def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:
data = Forecast(datetime=timestep["time"].isoformat())
def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> WeatherForecast:
data = WeatherForecast(datetime=timestep["time"].isoformat())

# day and night forecasts have slightly different format
if "daySignificantWeatherCode" in timestep:
Expand All @@ -111,7 +111,7 @@ def _build_twice_daily_forecast_data(timestep: dict[str, Any]) -> Forecast:


def _populate_forecast_data(
forecast: Forecast, timestep: dict[str, Any], mapping: dict[str, str]
forecast: WeatherForecast, timestep: dict[str, Any], mapping: dict[str, str]
) -> None:
def get_mapped_attribute(attr: str) -> Any:
if attr not in mapping:
Expand Down Expand Up @@ -153,9 +153,9 @@ def get_mapped_attribute(attr: str) -> Any:

class MetOfficeWeather(
CoordinatorWeatherEntity[
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[Forecast],
TimestampDataUpdateCoordinator[Forecast],
TimestampDataUpdateCoordinator[Forecast],
]
):
"""Implementation of a Met Office weather condition."""
Expand All @@ -177,9 +177,9 @@ class MetOfficeWeather(

def __init__(
self,
coordinator_daily: TimestampDataUpdateCoordinator[ForecastData],
coordinator_hourly: TimestampDataUpdateCoordinator[ForecastData],
coordinator_twice_daily: TimestampDataUpdateCoordinator[ForecastData],
coordinator_daily: TimestampDataUpdateCoordinator[Forecast],
coordinator_hourly: TimestampDataUpdateCoordinator[Forecast],
coordinator_twice_daily: TimestampDataUpdateCoordinator[Forecast],
hass_data: dict[str, Any],
) -> None:
"""Initialise the platform with a data instance."""
Expand Down Expand Up @@ -263,10 +263,10 @@ def wind_bearing(self) -> float | None:
return float(value) if value is not None else None

@callback
def _async_forecast_daily(self) -> list[Forecast] | None:
def _async_forecast_daily(self) -> list[WeatherForecast] | None:
"""Return the daily forecast in native units."""
coordinator = cast(
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[Forecast],
self.forecast_coordinators["daily"],
)
timesteps = coordinator.data.timesteps
Expand All @@ -277,10 +277,10 @@ def _async_forecast_daily(self) -> list[Forecast] | None:
]

@callback
def _async_forecast_hourly(self) -> list[Forecast] | None:
def _async_forecast_hourly(self) -> list[WeatherForecast] | None:
"""Return the hourly forecast in native units."""
coordinator = cast(
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[Forecast],
self.forecast_coordinators["hourly"],
)

Expand All @@ -292,10 +292,10 @@ def _async_forecast_hourly(self) -> list[Forecast] | None:
]

@callback
def _async_forecast_twice_daily(self) -> list[Forecast] | None:
def _async_forecast_twice_daily(self) -> list[WeatherForecast] | None:
"""Return the twice daily forecast in native units."""
coordinator = cast(
TimestampDataUpdateCoordinator[ForecastData],
TimestampDataUpdateCoordinator[Forecast],
self.forecast_coordinators["twice_daily"],
)
timesteps = coordinator.data.timesteps
Expand Down
6 changes: 3 additions & 3 deletions homeassistant/components/onewire/strings.json
Original file line number Diff line number Diff line change
Expand Up @@ -139,12 +139,12 @@
"step": {
"device_selection": {
"data": {
"clear_device_options": "Reset all device customisations",
"device_selection": "Customise specific devices"
"clear_device_options": "Reset all device customizations",
"device_selection": "Customize specific devices"
},
"data_description": {
"clear_device_options": "Use this to reset all device specific options to default values.",
"device_selection": "Customise behaviour of individual devices."
"device_selection": "Customize behavior of individual devices."
},
"description": "Select what configuration steps to process",
"title": "1-Wire device options"
Expand Down
1 change: 1 addition & 0 deletions homeassistant/components/telegram_bot/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,7 @@ async def send_message(
"Error sending message",
params[ATTR_MESSAGE_TAG],
text,
target=target,
parse_mode=params[ATTR_PARSER],
disable_web_page_preview=params[ATTR_DISABLE_WEB_PREV],
disable_notification=params[ATTR_DISABLE_NOTIF],
Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/vesync/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@
"documentation": "https://www.home-assistant.io/integrations/vesync",
"iot_class": "cloud_polling",
"loggers": ["pyvesync"],
"requirements": ["pyvesync==3.1.0"]
"requirements": ["pyvesync==3.1.2"]
}
Loading
Loading