mirror of
https://github.com/esphome/esphome.git
synced 2026-02-08 00:31:58 +00:00
Bump ruff from 0.14.14 to 0.15.0 (#13752)
Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: J. Nick Koston <nick@home-assistant.io>
This commit is contained in:
@@ -11,7 +11,7 @@ ci:
|
|||||||
repos:
|
repos:
|
||||||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||||||
# Ruff version.
|
# Ruff version.
|
||||||
rev: v0.14.14
|
rev: v0.15.0
|
||||||
hooks:
|
hooks:
|
||||||
# Run the linter.
|
# Run the linter.
|
||||||
- id: ruff
|
- id: ruff
|
||||||
|
|||||||
@@ -183,7 +183,7 @@ async def to_code(config):
|
|||||||
if CORE.using_zephyr:
|
if CORE.using_zephyr:
|
||||||
zephyr_add_prj_conf("I2C", True)
|
zephyr_add_prj_conf("I2C", True)
|
||||||
i2c = "i2c0"
|
i2c = "i2c0"
|
||||||
if zephyr_data()[KEY_BOARD] in ["xiao_ble"]:
|
if zephyr_data()[KEY_BOARD] == "xiao_ble":
|
||||||
i2c = "i2c1"
|
i2c = "i2c1"
|
||||||
zephyr_add_overlay(
|
zephyr_add_overlay(
|
||||||
f"""
|
f"""
|
||||||
|
|||||||
@@ -272,9 +272,7 @@ async def obj_hide_to_code(config, action_id, template_arg, args):
|
|||||||
async def do_hide(widget: Widget):
|
async def do_hide(widget: Widget):
|
||||||
widget.add_flag("LV_OBJ_FLAG_HIDDEN")
|
widget.add_flag("LV_OBJ_FLAG_HIDDEN")
|
||||||
|
|
||||||
widgets = [
|
widgets = [widget.outer or widget for widget in await get_widgets(config)]
|
||||||
widget.outer if widget.outer else widget for widget in await get_widgets(config)
|
|
||||||
]
|
|
||||||
return await action_to_code(widgets, do_hide, action_id, template_arg, args)
|
return await action_to_code(widgets, do_hide, action_id, template_arg, args)
|
||||||
|
|
||||||
|
|
||||||
@@ -285,9 +283,7 @@ async def obj_show_to_code(config, action_id, template_arg, args):
|
|||||||
if widget.move_to_foreground:
|
if widget.move_to_foreground:
|
||||||
lv_obj.move_foreground(widget.obj)
|
lv_obj.move_foreground(widget.obj)
|
||||||
|
|
||||||
widgets = [
|
widgets = [widget.outer or widget for widget in await get_widgets(config)]
|
||||||
widget.outer if widget.outer else widget for widget in await get_widgets(config)
|
|
||||||
]
|
|
||||||
return await action_to_code(widgets, do_show, action_id, template_arg, args)
|
return await action_to_code(widgets, do_show, action_id, template_arg, args)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,9 @@ def define_has_settings(keys: list[str], schemas: dict[str, SettingSchema]) -> N
|
|||||||
cg.RawExpression(
|
cg.RawExpression(
|
||||||
" sep ".join(
|
" sep ".join(
|
||||||
map(
|
map(
|
||||||
lambda key: f"F({schemas[key].backing_type}, {key}_setting, {schemas[key].default_value})",
|
lambda key: (
|
||||||
|
f"F({schemas[key].backing_type}, {key}_setting, {schemas[key].default_value})"
|
||||||
|
),
|
||||||
keys,
|
keys,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -213,9 +213,10 @@ def copy_files():
|
|||||||
zephyr_data()[KEY_OVERLAY],
|
zephyr_data()[KEY_OVERLAY],
|
||||||
)
|
)
|
||||||
|
|
||||||
if zephyr_data()[KEY_BOOTLOADER] == BOOTLOADER_MCUBOOT or zephyr_data()[
|
if (
|
||||||
KEY_BOARD
|
zephyr_data()[KEY_BOOTLOADER] == BOOTLOADER_MCUBOOT
|
||||||
] in ["xiao_ble"]:
|
or zephyr_data()[KEY_BOARD] == "xiao_ble"
|
||||||
|
):
|
||||||
fake_board_manifest = """
|
fake_board_manifest = """
|
||||||
{
|
{
|
||||||
"frameworks": [
|
"frameworks": [
|
||||||
|
|||||||
@@ -682,7 +682,7 @@ def only_with_framework(
|
|||||||
def validator_(obj):
|
def validator_(obj):
|
||||||
if CORE.target_framework not in frameworks:
|
if CORE.target_framework not in frameworks:
|
||||||
err_str = f"This feature is only available with framework(s) {', '.join([framework.value for framework in frameworks])}"
|
err_str = f"This feature is only available with framework(s) {', '.join([framework.value for framework in frameworks])}"
|
||||||
if suggestion := suggestions.get(CORE.target_framework, None):
|
if suggestion := suggestions.get(CORE.target_framework):
|
||||||
(component, docs_path) = suggestion
|
(component, docs_path) = suggestion
|
||||||
err_str += f"\nPlease use '{component}'"
|
err_str += f"\nPlease use '{component}'"
|
||||||
if docs_path:
|
if docs_path:
|
||||||
|
|||||||
@@ -2,19 +2,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from enum import Enum
|
from enum import StrEnum as _StrEnum
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
|
# Re-export StrEnum from standard library for backwards compatibility
|
||||||
class StrEnum(str, Enum):
|
StrEnum = _StrEnum
|
||||||
"""Partial backport of Python 3.11's StrEnum for our basic use cases."""
|
|
||||||
|
|
||||||
def __new__(cls, value: str, *args: Any, **kwargs: Any) -> StrEnum:
|
|
||||||
"""Create a new StrEnum instance."""
|
|
||||||
if not isinstance(value, str):
|
|
||||||
raise TypeError(f"{value!r} is not a string")
|
|
||||||
return super().__new__(cls, value, *args, **kwargs)
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
"""Return self.value."""
|
|
||||||
return str(self.value)
|
|
||||||
|
|||||||
@@ -470,7 +470,7 @@ def wizard(path: Path) -> int:
|
|||||||
sleep(1)
|
sleep(1)
|
||||||
|
|
||||||
# Do not create wifi if the board does not support it
|
# Do not create wifi if the board does not support it
|
||||||
if board not in ["rpipico"]:
|
if board != "rpipico":
|
||||||
safe_print_step(3, WIFI_BIG)
|
safe_print_step(3, WIFI_BIG)
|
||||||
safe_print("In this step, I'm going to create the configuration for WiFi.")
|
safe_print("In this step, I'm going to create the configuration for WiFi.")
|
||||||
safe_print()
|
safe_print()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
pylint==4.0.4
|
pylint==4.0.4
|
||||||
flake8==7.3.0 # also change in .pre-commit-config.yaml when updating
|
flake8==7.3.0 # also change in .pre-commit-config.yaml when updating
|
||||||
ruff==0.14.14 # also change in .pre-commit-config.yaml when updating
|
ruff==0.15.0 # also change in .pre-commit-config.yaml when updating
|
||||||
pyupgrade==3.21.2 # also change in .pre-commit-config.yaml when updating
|
pyupgrade==3.21.2 # also change in .pre-commit-config.yaml when updating
|
||||||
pre-commit
|
pre-commit
|
||||||
|
|
||||||
|
|||||||
@@ -280,7 +280,7 @@ class TypeInfo(ABC):
|
|||||||
"""
|
"""
|
||||||
field_id_size = self.calculate_field_id_size()
|
field_id_size = self.calculate_field_id_size()
|
||||||
method = f"{base_method}_force" if force else base_method
|
method = f"{base_method}_force" if force else base_method
|
||||||
value = value_expr if value_expr else name
|
value = value_expr or name
|
||||||
return f"size.{method}({field_id_size}, {value});"
|
return f"size.{method}({field_id_size}, {value});"
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ def merge_component_configs(
|
|||||||
|
|
||||||
if all_packages is None:
|
if all_packages is None:
|
||||||
# First component - initialize package dict
|
# First component - initialize package dict
|
||||||
all_packages = comp_packages if comp_packages else {}
|
all_packages = comp_packages or {}
|
||||||
elif comp_packages:
|
elif comp_packages:
|
||||||
# Merge packages - combine all unique package types
|
# Merge packages - combine all unique package types
|
||||||
# If both have the same package type, verify they're identical
|
# If both have the same package type, verify they're identical
|
||||||
|
|||||||
@@ -98,9 +98,11 @@ async def test_script_queued(
|
|||||||
if not test3_complete.done():
|
if not test3_complete.done():
|
||||||
loop.call_later(
|
loop.call_later(
|
||||||
0.3,
|
0.3,
|
||||||
lambda: test3_complete.set_result(True)
|
lambda: (
|
||||||
if not test3_complete.done()
|
test3_complete.set_result(True)
|
||||||
else None,
|
if not test3_complete.done()
|
||||||
|
else None
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Test 4: Rejection
|
# Test 4: Rejection
|
||||||
|
|||||||
@@ -1011,8 +1011,8 @@ def test_get_all_dependencies_handles_missing_components() -> None:
|
|||||||
comp.dependencies = ["missing_comp"]
|
comp.dependencies = ["missing_comp"]
|
||||||
comp.auto_load = []
|
comp.auto_load = []
|
||||||
|
|
||||||
mock_get_component.side_effect = (
|
mock_get_component.side_effect = lambda name: (
|
||||||
lambda name: comp if name == "existing" else None
|
comp if name == "existing" else None
|
||||||
)
|
)
|
||||||
|
|
||||||
result = helpers.get_all_dependencies({"existing", "nonexistent"})
|
result = helpers.get_all_dependencies({"existing", "nonexistent"})
|
||||||
|
|||||||
@@ -453,11 +453,14 @@ def test_preload_core_config_no_platform(setup_core: Path) -> None:
|
|||||||
# Mock _is_target_platform to avoid expensive component loading
|
# Mock _is_target_platform to avoid expensive component loading
|
||||||
with patch("esphome.core.config._is_target_platform") as mock_is_platform:
|
with patch("esphome.core.config._is_target_platform") as mock_is_platform:
|
||||||
# Return True for known platforms
|
# Return True for known platforms
|
||||||
mock_is_platform.side_effect = lambda name: name in [
|
mock_is_platform.side_effect = lambda name: (
|
||||||
"esp32",
|
name
|
||||||
"esp8266",
|
in [
|
||||||
"rp2040",
|
"esp32",
|
||||||
]
|
"esp8266",
|
||||||
|
"rp2040",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
with pytest.raises(cv.Invalid, match="Platform missing"):
|
with pytest.raises(cv.Invalid, match="Platform missing"):
|
||||||
preload_core_config(config, result)
|
preload_core_config(config, result)
|
||||||
@@ -477,11 +480,14 @@ def test_preload_core_config_multiple_platforms(setup_core: Path) -> None:
|
|||||||
# Mock _is_target_platform to avoid expensive component loading
|
# Mock _is_target_platform to avoid expensive component loading
|
||||||
with patch("esphome.core.config._is_target_platform") as mock_is_platform:
|
with patch("esphome.core.config._is_target_platform") as mock_is_platform:
|
||||||
# Return True for known platforms
|
# Return True for known platforms
|
||||||
mock_is_platform.side_effect = lambda name: name in [
|
mock_is_platform.side_effect = lambda name: (
|
||||||
"esp32",
|
name
|
||||||
"esp8266",
|
in [
|
||||||
"rp2040",
|
"esp32",
|
||||||
]
|
"esp8266",
|
||||||
|
"rp2040",
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
with pytest.raises(cv.Invalid, match="Found multiple target platform blocks"):
|
with pytest.raises(cv.Invalid, match="Found multiple target platform blocks"):
|
||||||
preload_core_config(config, result)
|
preload_core_config(config, result)
|
||||||
|
|||||||
@@ -466,8 +466,8 @@ def test_clean_build(
|
|||||||
) as mock_get_instance:
|
) as mock_get_instance:
|
||||||
mock_config = MagicMock()
|
mock_config = MagicMock()
|
||||||
mock_get_instance.return_value = mock_config
|
mock_get_instance.return_value = mock_config
|
||||||
mock_config.get.side_effect = (
|
mock_config.get.side_effect = lambda section, option: (
|
||||||
lambda section, option: str(platformio_cache_dir)
|
str(platformio_cache_dir)
|
||||||
if (section, option) == ("platformio", "cache_dir")
|
if (section, option) == ("platformio", "cache_dir")
|
||||||
else ""
|
else ""
|
||||||
)
|
)
|
||||||
@@ -630,8 +630,8 @@ def test_clean_build_empty_cache_dir(
|
|||||||
) as mock_get_instance:
|
) as mock_get_instance:
|
||||||
mock_config = MagicMock()
|
mock_config = MagicMock()
|
||||||
mock_get_instance.return_value = mock_config
|
mock_get_instance.return_value = mock_config
|
||||||
mock_config.get.side_effect = (
|
mock_config.get.side_effect = lambda section, option: (
|
||||||
lambda section, option: " " # Whitespace only
|
" " # Whitespace only
|
||||||
if (section, option) == ("platformio", "cache_dir")
|
if (section, option) == ("platformio", "cache_dir")
|
||||||
else ""
|
else ""
|
||||||
)
|
)
|
||||||
@@ -1574,8 +1574,8 @@ def test_copy_src_tree_writes_build_info_files(
|
|||||||
mock_component.resources = mock_resources
|
mock_component.resources = mock_resources
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = "Test comment"
|
mock_core.comment = "Test comment"
|
||||||
@@ -1649,8 +1649,8 @@ def test_copy_src_tree_detects_config_hash_change(
|
|||||||
build_info_h_path.write_text("// old build_info_data.h")
|
build_info_h_path.write_text("// old build_info_data.h")
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF # Different from existing
|
mock_core.config_hash = 0xDEADBEEF # Different from existing
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
@@ -1711,8 +1711,8 @@ def test_copy_src_tree_detects_version_change(
|
|||||||
build_info_h_path.write_text("// old build_info_data.h")
|
build_info_h_path.write_text("// old build_info_data.h")
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
@@ -1761,8 +1761,8 @@ def test_copy_src_tree_handles_invalid_build_info_json(
|
|||||||
build_info_h_path.write_text("// old build_info_data.h")
|
build_info_h_path.write_text("// old build_info_data.h")
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
@@ -1835,8 +1835,8 @@ def test_copy_src_tree_build_info_timestamp_behavior(
|
|||||||
mock_component.resources = mock_resources
|
mock_component.resources = mock_resources
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
@@ -1930,8 +1930,8 @@ def test_copy_src_tree_detects_removed_source_file(
|
|||||||
existing_file.write_text("// test file")
|
existing_file.write_text("// test file")
|
||||||
|
|
||||||
# Setup mocks - no components, so the file should be removed
|
# Setup mocks - no components, so the file should be removed
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
@@ -1992,8 +1992,8 @@ def test_copy_src_tree_ignores_removed_generated_file(
|
|||||||
build_info_h.write_text("// old generated file")
|
build_info_h.write_text("// old generated file")
|
||||||
|
|
||||||
# Setup mocks
|
# Setup mocks
|
||||||
mock_core.relative_src_path.side_effect = lambda *args: src_path.joinpath(*args)
|
mock_core.relative_src_path.side_effect = src_path.joinpath
|
||||||
mock_core.relative_build_path.side_effect = lambda *args: build_path.joinpath(*args)
|
mock_core.relative_build_path.side_effect = build_path.joinpath
|
||||||
mock_core.defines = []
|
mock_core.defines = []
|
||||||
mock_core.config_hash = 0xDEADBEEF
|
mock_core.config_hash = 0xDEADBEEF
|
||||||
mock_core.comment = ""
|
mock_core.comment = ""
|
||||||
|
|||||||
Reference in New Issue
Block a user