mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 13:47:35 +00:00
Disable profiler.memory service with python 3.11 (#88136)
This commit is contained in:
parent
6254200b37
commit
61539686a4
@ -15,6 +15,7 @@ from homeassistant.components import persistent_notification
|
|||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
||||||
from homeassistant.core import HomeAssistant, ServiceCall
|
from homeassistant.core import HomeAssistant, ServiceCall
|
||||||
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
import homeassistant.helpers.config_validation as cv
|
import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.event import async_track_time_interval
|
from homeassistant.helpers.event import async_track_time_interval
|
||||||
from homeassistant.helpers.service import async_register_admin_service
|
from homeassistant.helpers.service import async_register_admin_service
|
||||||
@ -269,6 +270,11 @@ async def _async_generate_memory_profile(hass: HomeAssistant, call: ServiceCall)
|
|||||||
# Imports deferred to avoid loading modules
|
# Imports deferred to avoid loading modules
|
||||||
# in memory since usually only one part of this
|
# in memory since usually only one part of this
|
||||||
# integration is used at a time
|
# integration is used at a time
|
||||||
|
if sys.version_info >= (3, 11):
|
||||||
|
raise HomeAssistantError(
|
||||||
|
"Memory profiling is not supported on Python 3.11. Please use Python 3.10."
|
||||||
|
)
|
||||||
|
|
||||||
from guppy import hpy # pylint: disable=import-outside-toplevel
|
from guppy import hpy # pylint: disable=import-outside-toplevel
|
||||||
|
|
||||||
start_time = int(time.time() * 1000000)
|
start_time = int(time.time() * 1000000)
|
||||||
|
@ -5,5 +5,9 @@
|
|||||||
"config_flow": true,
|
"config_flow": true,
|
||||||
"documentation": "https://www.home-assistant.io/integrations/profiler",
|
"documentation": "https://www.home-assistant.io/integrations/profiler",
|
||||||
"quality_scale": "internal",
|
"quality_scale": "internal",
|
||||||
"requirements": ["pyprof2calltree==1.4.5", "guppy3==3.1.2", "objgraph==3.5.0"]
|
"requirements": [
|
||||||
|
"pyprof2calltree==1.4.5",
|
||||||
|
"guppy3==3.1.2;python_version<'3.11'",
|
||||||
|
"objgraph==3.5.0"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
@ -849,7 +849,7 @@ gspread==5.5.0
|
|||||||
gstreamer-player==1.1.2
|
gstreamer-player==1.1.2
|
||||||
|
|
||||||
# homeassistant.components.profiler
|
# homeassistant.components.profiler
|
||||||
guppy3==3.1.2
|
guppy3==3.1.2;python_version<'3.11'
|
||||||
|
|
||||||
# homeassistant.components.iaqualink
|
# homeassistant.components.iaqualink
|
||||||
h2==4.1.0
|
h2==4.1.0
|
||||||
|
@ -644,7 +644,7 @@ growattServer==1.3.0
|
|||||||
gspread==5.5.0
|
gspread==5.5.0
|
||||||
|
|
||||||
# homeassistant.components.profiler
|
# homeassistant.components.profiler
|
||||||
guppy3==3.1.2
|
guppy3==3.1.2;python_version<'3.11'
|
||||||
|
|
||||||
# homeassistant.components.iaqualink
|
# homeassistant.components.iaqualink
|
||||||
h2==4.1.0
|
h2==4.1.0
|
||||||
|
@ -90,7 +90,7 @@ def validate_requirements_format(integration: Integration) -> bool:
|
|||||||
if not version:
|
if not version:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for part in version.split(","):
|
for part in version.split(";", 1)[0].split(","):
|
||||||
version_part = PIP_VERSION_RANGE_SEPARATOR.match(part)
|
version_part = PIP_VERSION_RANGE_SEPARATOR.match(part)
|
||||||
if (
|
if (
|
||||||
version_part
|
version_part
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
"""Test the Profiler config flow."""
|
"""Test the Profiler config flow."""
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
@ -18,6 +19,7 @@ from homeassistant.components.profiler import (
|
|||||||
from homeassistant.components.profiler.const import DOMAIN
|
from homeassistant.components.profiler.const import DOMAIN
|
||||||
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
import homeassistant.util.dt as dt_util
|
import homeassistant.util.dt as dt_util
|
||||||
|
|
||||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||||
@ -53,6 +55,9 @@ async def test_basic_usage(hass: HomeAssistant, tmpdir) -> None:
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(
|
||||||
|
sys.version_info >= (3, 11), reason="not yet available on python 3.11"
|
||||||
|
)
|
||||||
async def test_memory_usage(hass: HomeAssistant, tmpdir) -> None:
|
async def test_memory_usage(hass: HomeAssistant, tmpdir) -> None:
|
||||||
"""Test we can setup and the service is registered."""
|
"""Test we can setup and the service is registered."""
|
||||||
test_dir = tmpdir.mkdir("profiles")
|
test_dir = tmpdir.mkdir("profiles")
|
||||||
@ -83,6 +88,24 @@ async def test_memory_usage(hass: HomeAssistant, tmpdir) -> None:
|
|||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.skipif(sys.version_info < (3, 11), reason="still works on python 3.10")
|
||||||
|
async def test_memory_usage_py311(hass: HomeAssistant, tmpdir) -> None:
|
||||||
|
"""Test raise an error on python3.11."""
|
||||||
|
entry = MockConfigEntry(domain=DOMAIN)
|
||||||
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
assert hass.services.has_service(DOMAIN, SERVICE_MEMORY)
|
||||||
|
with pytest.raises(
|
||||||
|
HomeAssistantError,
|
||||||
|
match="Memory profiling is not supported on Python 3.11. Please use Python 3.10.",
|
||||||
|
):
|
||||||
|
await hass.services.async_call(
|
||||||
|
DOMAIN, SERVICE_MEMORY, {CONF_SECONDS: 0.000001}, blocking=True
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def test_object_growth_logging(
|
async def test_object_growth_logging(
|
||||||
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -52,6 +52,7 @@ def test_validate_requirements_format_ignore_pin_for_custom(integration: Integra
|
|||||||
"test_package~=0.5.0",
|
"test_package~=0.5.0",
|
||||||
"test_package>=1.4.2,<1.4.99,>=1.7,<1.8.99",
|
"test_package>=1.4.2,<1.4.99,>=1.7,<1.8.99",
|
||||||
"test_package>=1.4.2,<1.9,!=1.5",
|
"test_package>=1.4.2,<1.9,!=1.5",
|
||||||
|
"test_package>=1.4.2;python_version<'3.11'",
|
||||||
]
|
]
|
||||||
integration.path = Path("")
|
integration.path = Path("")
|
||||||
assert validate_requirements_format(integration)
|
assert validate_requirements_format(integration)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user