Add helper method to clear logger overwrites for tests (#143301)

pull/132963/head^2
Marc Mueller 2025-04-20 09:28:30 +02:00 committed by GitHub
parent b5b934b8a1
commit a749ecceed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 31 additions and 22 deletions

View File

@ -24,8 +24,10 @@ from .const import (
SERVICE_SET_LEVEL,
)
from .helpers import (
DATA_LOGGER,
LoggerDomainConfig,
LoggerSettings,
_clear_logger_overwrites, # noqa: F401
set_default_log_level,
set_log_levels,
)
@ -54,7 +56,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
settings = LoggerSettings(hass, config)
domain_config = hass.data[DOMAIN] = LoggerDomainConfig({}, settings)
domain_config = hass.data[DATA_LOGGER] = LoggerDomainConfig({}, settings)
logging.setLoggerClass(_get_logger_class(domain_config.overrides))
websocket_api.async_load_websocket_api(hass)

View File

@ -9,13 +9,14 @@ from dataclasses import asdict, dataclass
from enum import StrEnum
from functools import lru_cache
import logging
from typing import Any, cast
from typing import Any
from homeassistant.const import EVENT_LOGGING_CHANGED
from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.storage import Store
from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import IntegrationNotFound, async_get_integration
from homeassistant.util.hass_dict import HassKey
from .const import (
DOMAIN,
@ -28,6 +29,8 @@ from .const import (
STORAGE_VERSION,
)
DATA_LOGGER: HassKey[LoggerDomainConfig] = HassKey(DOMAIN)
SAVE_DELAY = 15.0
# At startup, we want to save after a long delay to avoid
# saving while the system is still starting up. If the system
@ -39,12 +42,6 @@ SAVE_DELAY = 15.0
SAVE_DELAY_LONG = 180.0
@callback
def async_get_domain_config(hass: HomeAssistant) -> LoggerDomainConfig:
"""Return the domain config."""
return cast(LoggerDomainConfig, hass.data[DOMAIN])
@callback
def set_default_log_level(hass: HomeAssistant, level: int) -> None:
"""Set the default log level for components."""
@ -55,7 +52,7 @@ def set_default_log_level(hass: HomeAssistant, level: int) -> None:
@callback
def set_log_levels(hass: HomeAssistant, logpoints: Mapping[str, int]) -> None:
"""Set the specified log levels."""
async_get_domain_config(hass).overrides.update(logpoints)
hass.data[DATA_LOGGER].overrides.update(logpoints)
for key, value in logpoints.items():
_set_log_level(logging.getLogger(key), value)
hass.bus.async_fire(EVENT_LOGGING_CHANGED)
@ -78,6 +75,12 @@ def _chattiest_log_level(level1: int, level2: int) -> int:
return min(level1, level2)
@callback
def _clear_logger_overwrites(hass: HomeAssistant) -> None:
"""Clear logger overwrites. Used for testing."""
hass.data[DATA_LOGGER].overrides.clear()
async def get_integration_loggers(hass: HomeAssistant, domain: str) -> set[str]:
"""Get loggers for an integration."""
loggers: set[str] = {f"homeassistant.components.{domain}"}

View File

@ -12,10 +12,10 @@ from homeassistant.setup import async_get_loaded_integrations
from .const import LOGSEVERITY
from .helpers import (
DATA_LOGGER,
LoggerSetting,
LogPersistance,
LogSettingsType,
async_get_domain_config,
get_logger,
)
@ -68,7 +68,7 @@ async def handle_integration_log_level(
msg["id"], websocket_api.ERR_NOT_FOUND, "Integration not found"
)
return
await async_get_domain_config(hass).settings.async_update(
await hass.data[DATA_LOGGER].settings.async_update(
hass,
msg["integration"],
LoggerSetting(
@ -93,7 +93,7 @@ async def handle_module_log_level(
hass: HomeAssistant, connection: ActiveConnection, msg: dict[str, Any]
) -> None:
"""Handle setting integration log level."""
await async_get_domain_config(hass).settings.async_update(
await hass.data[DATA_LOGGER].settings.async_update(
hass,
msg["module"],
LoggerSetting(

View File

@ -46,7 +46,11 @@ from homeassistant.components import device_automation, persistent_notification
from homeassistant.components.device_automation import ( # noqa: F401
_async_get_device_automation_capabilities as async_get_device_automation_capabilities,
)
from homeassistant.components.logger import DOMAIN as LOGGER_DOMAIN, SERVICE_SET_LEVEL
from homeassistant.components.logger import (
DOMAIN as LOGGER_DOMAIN,
SERVICE_SET_LEVEL,
_clear_logger_overwrites,
)
from homeassistant.config import IntegrationConfigInfo, async_process_component_config
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
from homeassistant.const import (
@ -1708,7 +1712,7 @@ async def async_call_logger_set_level(
)
await hass.async_block_till_done()
yield
hass.data[LOGGER_DOMAIN].overrides.clear()
_clear_logger_overwrites(hass)
def import_and_test_deprecated_constant_enum(

View File

@ -4,7 +4,7 @@ import logging
from unittest.mock import patch
from homeassistant import loader
from homeassistant.components.logger.helpers import async_get_domain_config
from homeassistant.components.logger.helpers import DATA_LOGGER
from homeassistant.components.websocket_api import TYPE_RESULT
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
@ -76,7 +76,7 @@ async def test_integration_log_level(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.DEBUG
}
@ -126,7 +126,7 @@ async def test_custom_integration_log_level(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.hue": logging.DEBUG,
"custom_components.hue": logging.DEBUG,
"some_other_logger": logging.DEBUG,
@ -182,7 +182,7 @@ async def test_module_log_level(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.DEBUG,
"homeassistant.components.other_component": logging.WARNING,
}
@ -199,7 +199,7 @@ async def test_module_log_level_override(
{"logger": {"logs": {"homeassistant.components.websocket_api": "warning"}}},
)
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.WARNING
}
@ -218,7 +218,7 @@ async def test_module_log_level_override(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.ERROR
}
@ -237,7 +237,7 @@ async def test_module_log_level_override(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.DEBUG
}
@ -256,6 +256,6 @@ async def test_module_log_level_override(
assert msg["type"] == TYPE_RESULT
assert msg["success"]
assert async_get_domain_config(hass).overrides == {
assert hass.data[DATA_LOGGER].overrides == {
"homeassistant.components.websocket_api": logging.NOTSET
}