mirror of
https://github.com/home-assistant/core.git
synced 2025-07-19 03:07:37 +00:00
Prevent log flooding in frame helper (#61085)
Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
parent
4aa7f36a53
commit
b8b4855b8e
@ -12,6 +12,9 @@ from homeassistant.exceptions import HomeAssistantError
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# Keep track of integrations already reported to prevent flooding
|
||||||
|
_REPORTED_INTEGRATIONS: set[str] = set()
|
||||||
|
|
||||||
CALLABLE_T = TypeVar("CALLABLE_T", bound=Callable) # pylint: disable=invalid-name
|
CALLABLE_T = TypeVar("CALLABLE_T", bound=Callable) # pylint: disable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
@ -85,6 +88,12 @@ def report_integration(
|
|||||||
"""
|
"""
|
||||||
found_frame, integration, path = integration_frame
|
found_frame, integration, path = integration_frame
|
||||||
|
|
||||||
|
# Keep track of integrations already reported to prevent flooding
|
||||||
|
key = f"{found_frame.filename}:{found_frame.lineno}"
|
||||||
|
if key in _REPORTED_INTEGRATIONS:
|
||||||
|
return
|
||||||
|
_REPORTED_INTEGRATIONS.add(key)
|
||||||
|
|
||||||
index = found_frame.filename.index(path)
|
index = found_frame.filename.index(path)
|
||||||
if path == "custom_components/":
|
if path == "custom_components/":
|
||||||
extra = " to the custom component author"
|
extra = " to the custom component author"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
"""Test the frame helper."""
|
"""Test the frame helper."""
|
||||||
|
# pylint: disable=protected-access
|
||||||
from unittest.mock import Mock, patch
|
from unittest.mock import Mock, patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@ -70,3 +71,24 @@ async def test_extract_frame_no_integration(caplog):
|
|||||||
],
|
],
|
||||||
), pytest.raises(frame.MissingIntegrationFrame):
|
), pytest.raises(frame.MissingIntegrationFrame):
|
||||||
frame.get_integration_frame()
|
frame.get_integration_frame()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("mock_integration_frame")
|
||||||
|
@patch.object(frame, "_REPORTED_INTEGRATIONS", set())
|
||||||
|
async def test_prevent_flooding(caplog):
|
||||||
|
"""Test to ensure a report is only written once to the log."""
|
||||||
|
|
||||||
|
what = "accessed hi instead of hello"
|
||||||
|
key = "/home/paulus/homeassistant/components/hue/light.py:23"
|
||||||
|
|
||||||
|
frame.report(what, error_if_core=False)
|
||||||
|
assert what in caplog.text
|
||||||
|
assert key in frame._REPORTED_INTEGRATIONS
|
||||||
|
assert len(frame._REPORTED_INTEGRATIONS) == 1
|
||||||
|
|
||||||
|
caplog.clear()
|
||||||
|
|
||||||
|
frame.report(what, error_if_core=False)
|
||||||
|
assert what not in caplog.text
|
||||||
|
assert key in frame._REPORTED_INTEGRATIONS
|
||||||
|
assert len(frame._REPORTED_INTEGRATIONS) == 1
|
||||||
|
Loading…
x
Reference in New Issue
Block a user