Disable profiler.memory service with python 3.11 (#88136)
This commit is contained in:
parent
6254200b37
commit
61539686a4
7 changed files with 38 additions and 4 deletions
|
@ -15,6 +15,7 @@ from homeassistant.components import persistent_notification
|
|||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
||||
from homeassistant.core import HomeAssistant, ServiceCall
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers.event import async_track_time_interval
|
||||
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
|
||||
# in memory since usually only one part of this
|
||||
# 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
|
||||
|
||||
start_time = int(time.time() * 1000000)
|
||||
|
|
|
@ -5,5 +5,9 @@
|
|||
"config_flow": true,
|
||||
"documentation": "https://www.home-assistant.io/integrations/profiler",
|
||||
"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
|
||||
|
||||
# homeassistant.components.profiler
|
||||
guppy3==3.1.2
|
||||
guppy3==3.1.2;python_version<'3.11'
|
||||
|
||||
# homeassistant.components.iaqualink
|
||||
h2==4.1.0
|
||||
|
|
|
@ -644,7 +644,7 @@ growattServer==1.3.0
|
|||
gspread==5.5.0
|
||||
|
||||
# homeassistant.components.profiler
|
||||
guppy3==3.1.2
|
||||
guppy3==3.1.2;python_version<'3.11'
|
||||
|
||||
# homeassistant.components.iaqualink
|
||||
h2==4.1.0
|
||||
|
|
|
@ -90,7 +90,7 @@ def validate_requirements_format(integration: Integration) -> bool:
|
|||
if not version:
|
||||
continue
|
||||
|
||||
for part in version.split(","):
|
||||
for part in version.split(";", 1)[0].split(","):
|
||||
version_part = PIP_VERSION_RANGE_SEPARATOR.match(part)
|
||||
if (
|
||||
version_part
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Test the Profiler config flow."""
|
||||
from datetime import timedelta
|
||||
import os
|
||||
import sys
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
@ -18,6 +19,7 @@ from homeassistant.components.profiler import (
|
|||
from homeassistant.components.profiler.const import DOMAIN
|
||||
from homeassistant.const import CONF_SCAN_INTERVAL, CONF_TYPE
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
import homeassistant.util.dt as dt_util
|
||||
|
||||
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()
|
||||
|
||||
|
||||
@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:
|
||||
"""Test we can setup and the service is registered."""
|
||||
test_dir = tmpdir.mkdir("profiles")
|
||||
|
@ -83,6 +88,24 @@ async def test_memory_usage(hass: HomeAssistant, tmpdir) -> None:
|
|||
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(
|
||||
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
|
||||
) -> None:
|
||||
|
|
|
@ -52,6 +52,7 @@ def test_validate_requirements_format_ignore_pin_for_custom(integration: Integra
|
|||
"test_package~=0.5.0",
|
||||
"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;python_version<'3.11'",
|
||||
]
|
||||
integration.path = Path("")
|
||||
assert validate_requirements_format(integration)
|
||||
|
|
Loading…
Add table
Reference in a new issue