mirror of
https://github.com/home-assistant/core.git
synced 2025-07-25 14:17:45 +00:00
Add helper method to clear logger overwrites for tests (#143301)
This commit is contained in:
parent
b5b934b8a1
commit
a749ecceed
@ -24,8 +24,10 @@ from .const import (
|
|||||||
SERVICE_SET_LEVEL,
|
SERVICE_SET_LEVEL,
|
||||||
)
|
)
|
||||||
from .helpers import (
|
from .helpers import (
|
||||||
|
DATA_LOGGER,
|
||||||
LoggerDomainConfig,
|
LoggerDomainConfig,
|
||||||
LoggerSettings,
|
LoggerSettings,
|
||||||
|
_clear_logger_overwrites, # noqa: F401
|
||||||
set_default_log_level,
|
set_default_log_level,
|
||||||
set_log_levels,
|
set_log_levels,
|
||||||
)
|
)
|
||||||
@ -54,7 +56,7 @@ async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
|
|||||||
|
|
||||||
settings = LoggerSettings(hass, config)
|
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))
|
logging.setLoggerClass(_get_logger_class(domain_config.overrides))
|
||||||
|
|
||||||
websocket_api.async_load_websocket_api(hass)
|
websocket_api.async_load_websocket_api(hass)
|
||||||
|
@ -9,13 +9,14 @@ from dataclasses import asdict, dataclass
|
|||||||
from enum import StrEnum
|
from enum import StrEnum
|
||||||
from functools import lru_cache
|
from functools import lru_cache
|
||||||
import logging
|
import logging
|
||||||
from typing import Any, cast
|
from typing import Any
|
||||||
|
|
||||||
from homeassistant.const import EVENT_LOGGING_CHANGED
|
from homeassistant.const import EVENT_LOGGING_CHANGED
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
from homeassistant.helpers.storage import Store
|
from homeassistant.helpers.storage import Store
|
||||||
from homeassistant.helpers.typing import ConfigType
|
from homeassistant.helpers.typing import ConfigType
|
||||||
from homeassistant.loader import IntegrationNotFound, async_get_integration
|
from homeassistant.loader import IntegrationNotFound, async_get_integration
|
||||||
|
from homeassistant.util.hass_dict import HassKey
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
@ -28,6 +29,8 @@ from .const import (
|
|||||||
STORAGE_VERSION,
|
STORAGE_VERSION,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
DATA_LOGGER: HassKey[LoggerDomainConfig] = HassKey(DOMAIN)
|
||||||
|
|
||||||
SAVE_DELAY = 15.0
|
SAVE_DELAY = 15.0
|
||||||
# At startup, we want to save after a long delay to avoid
|
# At startup, we want to save after a long delay to avoid
|
||||||
# saving while the system is still starting up. If the system
|
# saving while the system is still starting up. If the system
|
||||||
@ -39,12 +42,6 @@ SAVE_DELAY = 15.0
|
|||||||
SAVE_DELAY_LONG = 180.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
|
@callback
|
||||||
def set_default_log_level(hass: HomeAssistant, level: int) -> None:
|
def set_default_log_level(hass: HomeAssistant, level: int) -> None:
|
||||||
"""Set the default log level for components."""
|
"""Set the default log level for components."""
|
||||||
@ -55,7 +52,7 @@ def set_default_log_level(hass: HomeAssistant, level: int) -> None:
|
|||||||
@callback
|
@callback
|
||||||
def set_log_levels(hass: HomeAssistant, logpoints: Mapping[str, int]) -> None:
|
def set_log_levels(hass: HomeAssistant, logpoints: Mapping[str, int]) -> None:
|
||||||
"""Set the specified log levels."""
|
"""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():
|
for key, value in logpoints.items():
|
||||||
_set_log_level(logging.getLogger(key), value)
|
_set_log_level(logging.getLogger(key), value)
|
||||||
hass.bus.async_fire(EVENT_LOGGING_CHANGED)
|
hass.bus.async_fire(EVENT_LOGGING_CHANGED)
|
||||||
@ -78,6 +75,12 @@ def _chattiest_log_level(level1: int, level2: int) -> int:
|
|||||||
return min(level1, level2)
|
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]:
|
async def get_integration_loggers(hass: HomeAssistant, domain: str) -> set[str]:
|
||||||
"""Get loggers for an integration."""
|
"""Get loggers for an integration."""
|
||||||
loggers: set[str] = {f"homeassistant.components.{domain}"}
|
loggers: set[str] = {f"homeassistant.components.{domain}"}
|
||||||
|
@ -12,10 +12,10 @@ from homeassistant.setup import async_get_loaded_integrations
|
|||||||
|
|
||||||
from .const import LOGSEVERITY
|
from .const import LOGSEVERITY
|
||||||
from .helpers import (
|
from .helpers import (
|
||||||
|
DATA_LOGGER,
|
||||||
LoggerSetting,
|
LoggerSetting,
|
||||||
LogPersistance,
|
LogPersistance,
|
||||||
LogSettingsType,
|
LogSettingsType,
|
||||||
async_get_domain_config,
|
|
||||||
get_logger,
|
get_logger,
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -68,7 +68,7 @@ async def handle_integration_log_level(
|
|||||||
msg["id"], websocket_api.ERR_NOT_FOUND, "Integration not found"
|
msg["id"], websocket_api.ERR_NOT_FOUND, "Integration not found"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
await async_get_domain_config(hass).settings.async_update(
|
await hass.data[DATA_LOGGER].settings.async_update(
|
||||||
hass,
|
hass,
|
||||||
msg["integration"],
|
msg["integration"],
|
||||||
LoggerSetting(
|
LoggerSetting(
|
||||||
@ -93,7 +93,7 @@ async def handle_module_log_level(
|
|||||||
hass: HomeAssistant, connection: ActiveConnection, msg: dict[str, Any]
|
hass: HomeAssistant, connection: ActiveConnection, msg: dict[str, Any]
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Handle setting integration log level."""
|
"""Handle setting integration log level."""
|
||||||
await async_get_domain_config(hass).settings.async_update(
|
await hass.data[DATA_LOGGER].settings.async_update(
|
||||||
hass,
|
hass,
|
||||||
msg["module"],
|
msg["module"],
|
||||||
LoggerSetting(
|
LoggerSetting(
|
||||||
|
@ -46,7 +46,11 @@ from homeassistant.components import device_automation, persistent_notification
|
|||||||
from homeassistant.components.device_automation import ( # noqa: F401
|
from homeassistant.components.device_automation import ( # noqa: F401
|
||||||
_async_get_device_automation_capabilities as async_get_device_automation_capabilities,
|
_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 import IntegrationConfigInfo, async_process_component_config
|
||||||
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
|
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
@ -1708,7 +1712,7 @@ async def async_call_logger_set_level(
|
|||||||
)
|
)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
yield
|
yield
|
||||||
hass.data[LOGGER_DOMAIN].overrides.clear()
|
_clear_logger_overwrites(hass)
|
||||||
|
|
||||||
|
|
||||||
def import_and_test_deprecated_constant_enum(
|
def import_and_test_deprecated_constant_enum(
|
||||||
|
@ -4,7 +4,7 @@ import logging
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from homeassistant import loader
|
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.components.websocket_api import TYPE_RESULT
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
@ -76,7 +76,7 @@ async def test_integration_log_level(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.websocket_api": logging.DEBUG
|
"homeassistant.components.websocket_api": logging.DEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ async def test_custom_integration_log_level(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.hue": logging.DEBUG,
|
"homeassistant.components.hue": logging.DEBUG,
|
||||||
"custom_components.hue": logging.DEBUG,
|
"custom_components.hue": logging.DEBUG,
|
||||||
"some_other_logger": logging.DEBUG,
|
"some_other_logger": logging.DEBUG,
|
||||||
@ -182,7 +182,7 @@ async def test_module_log_level(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.websocket_api": logging.DEBUG,
|
"homeassistant.components.websocket_api": logging.DEBUG,
|
||||||
"homeassistant.components.other_component": logging.WARNING,
|
"homeassistant.components.other_component": logging.WARNING,
|
||||||
}
|
}
|
||||||
@ -199,7 +199,7 @@ async def test_module_log_level_override(
|
|||||||
{"logger": {"logs": {"homeassistant.components.websocket_api": "warning"}}},
|
{"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
|
"homeassistant.components.websocket_api": logging.WARNING
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -218,7 +218,7 @@ async def test_module_log_level_override(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.websocket_api": logging.ERROR
|
"homeassistant.components.websocket_api": logging.ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +237,7 @@ async def test_module_log_level_override(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.websocket_api": logging.DEBUG
|
"homeassistant.components.websocket_api": logging.DEBUG
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,6 +256,6 @@ async def test_module_log_level_override(
|
|||||||
assert msg["type"] == TYPE_RESULT
|
assert msg["type"] == TYPE_RESULT
|
||||||
assert msg["success"]
|
assert msg["success"]
|
||||||
|
|
||||||
assert async_get_domain_config(hass).overrides == {
|
assert hass.data[DATA_LOGGER].overrides == {
|
||||||
"homeassistant.components.websocket_api": logging.NOTSET
|
"homeassistant.components.websocket_api": logging.NOTSET
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user