Deprecate deprecated camera constants (#106095)

This commit is contained in:
Robert Resch 2023-12-23 10:46:23 +01:00 committed by GitHub
parent 3404bd4de5
commit 20ba764d92
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 70 additions and 10 deletions

View File

@ -51,6 +51,11 @@ from homeassistant.helpers.config_validation import ( # noqa: F401
PLATFORM_SCHEMA, PLATFORM_SCHEMA,
PLATFORM_SCHEMA_BASE, PLATFORM_SCHEMA_BASE,
) )
from homeassistant.helpers.deprecation import (
DeprecatedConstantEnum,
check_if_deprecated_constant,
dir_with_deprecated_constants,
)
from homeassistant.helpers.entity import Entity, EntityDescription from homeassistant.helpers.entity import Entity, EntityDescription
from homeassistant.helpers.entity_component import EntityComponent from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers.event import async_track_time_interval from homeassistant.helpers.event import async_track_time_interval
@ -60,6 +65,8 @@ from homeassistant.helpers.typing import ConfigType
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
from .const import ( # noqa: F401 from .const import ( # noqa: F401
_DEPRECATED_STREAM_TYPE_HLS,
_DEPRECATED_STREAM_TYPE_WEB_RTC,
CAMERA_IMAGE_TIMEOUT, CAMERA_IMAGE_TIMEOUT,
CAMERA_STREAM_SOURCE_TIMEOUT, CAMERA_STREAM_SOURCE_TIMEOUT,
CONF_DURATION, CONF_DURATION,
@ -70,8 +77,6 @@ from .const import ( # noqa: F401
PREF_ORIENTATION, PREF_ORIENTATION,
PREF_PRELOAD_STREAM, PREF_PRELOAD_STREAM,
SERVICE_RECORD, SERVICE_RECORD,
STREAM_TYPE_HLS,
STREAM_TYPE_WEB_RTC,
StreamType, StreamType,
) )
from .img_util import scale_jpeg_camera_image from .img_util import scale_jpeg_camera_image
@ -105,8 +110,16 @@ class CameraEntityFeature(IntFlag):
# These SUPPORT_* constants are deprecated as of Home Assistant 2022.5. # These SUPPORT_* constants are deprecated as of Home Assistant 2022.5.
# Pleease use the CameraEntityFeature enum instead. # Pleease use the CameraEntityFeature enum instead.
SUPPORT_ON_OFF: Final = 1 _DEPRECATED_SUPPORT_ON_OFF: Final = DeprecatedConstantEnum(
SUPPORT_STREAM: Final = 2 CameraEntityFeature.ON_OFF, "2025.1"
)
_DEPRECATED_SUPPORT_STREAM: Final = DeprecatedConstantEnum(
CameraEntityFeature.STREAM, "2025.1"
)
# Both can be removed if no deprecated constant are in this module anymore
__getattr__ = partial(check_if_deprecated_constant, module_globals=globals())
__dir__ = partial(dir_with_deprecated_constants, module_globals=globals())
RTSP_PREFIXES = {"rtsp://", "rtsps://", "rtmp://"} RTSP_PREFIXES = {"rtsp://", "rtsps://", "rtmp://"}
@ -215,7 +228,7 @@ async def _async_get_stream_image(
height: int | None = None, height: int | None = None,
wait_for_next_keyframe: bool = False, wait_for_next_keyframe: bool = False,
) -> bytes | None: ) -> bytes | None:
if not camera.stream and camera.supported_features & SUPPORT_STREAM: if not camera.stream and camera.supported_features & CameraEntityFeature.STREAM:
camera.stream = await camera.async_create_stream() camera.stream = await camera.async_create_stream()
if camera.stream: if camera.stream:
return await camera.stream.async_get_image( return await camera.stream.async_get_image(

View File

@ -1,7 +1,14 @@
"""Constants for Camera component.""" """Constants for Camera component."""
from enum import StrEnum from enum import StrEnum
from functools import partial
from typing import Final from typing import Final
from homeassistant.helpers.deprecation import (
DeprecatedConstantEnum,
check_if_deprecated_constant,
dir_with_deprecated_constants,
)
DOMAIN: Final = "camera" DOMAIN: Final = "camera"
DATA_CAMERA_PREFS: Final = "camera_prefs" DATA_CAMERA_PREFS: Final = "camera_prefs"
@ -36,5 +43,10 @@ class StreamType(StrEnum):
# These constants are deprecated as of Home Assistant 2022.5 # These constants are deprecated as of Home Assistant 2022.5
# Please use the StreamType enum instead. # Please use the StreamType enum instead.
STREAM_TYPE_HLS = "hls" _DEPRECATED_STREAM_TYPE_HLS = DeprecatedConstantEnum(StreamType.HLS, "2025.1")
STREAM_TYPE_WEB_RTC = "web_rtc" _DEPRECATED_STREAM_TYPE_WEB_RTC = DeprecatedConstantEnum(StreamType.WEB_RTC, "2025.1")
# Both can be removed if no deprecated constant are in this module anymore
__getattr__ = partial(check_if_deprecated_constant, module_globals=globals())
__dir__ = partial(dir_with_deprecated_constants, module_globals=globals())

View File

@ -2,6 +2,7 @@
import asyncio import asyncio
from http import HTTPStatus from http import HTTPStatus
import io import io
from types import ModuleType
from unittest.mock import AsyncMock, Mock, PropertyMock, mock_open, patch from unittest.mock import AsyncMock, Mock, PropertyMock, mock_open, patch
import pytest import pytest
@ -26,6 +27,7 @@ from homeassistant.setup import async_setup_component
from .common import EMPTY_8_6_JPEG, WEBRTC_ANSWER, mock_turbo_jpeg from .common import EMPTY_8_6_JPEG, WEBRTC_ANSWER, mock_turbo_jpeg
from tests.common import import_and_test_deprecated_constant_enum
from tests.typing import ClientSessionGenerator, WebSocketGenerator from tests.typing import ClientSessionGenerator, WebSocketGenerator
STREAM_SOURCE = "rtsp://127.0.0.1/stream" STREAM_SOURCE = "rtsp://127.0.0.1/stream"
@ -939,7 +941,7 @@ async def test_use_stream_for_stills(
# Test when the integration does not provide a stream_source should fail # Test when the integration does not provide a stream_source should fail
with patch( with patch(
"homeassistant.components.demo.camera.DemoCamera.supported_features", "homeassistant.components.demo.camera.DemoCamera.supported_features",
return_value=camera.SUPPORT_STREAM, return_value=camera.CameraEntityFeature.STREAM,
): ):
resp = await client.get("/api/camera_proxy/camera.demo_camera") resp = await client.get("/api/camera_proxy/camera.demo_camera")
await hass.async_block_till_done() await hass.async_block_till_done()
@ -953,7 +955,7 @@ async def test_use_stream_for_stills(
"homeassistant.components.camera.create_stream" "homeassistant.components.camera.create_stream"
) as mock_create_stream, patch( ) as mock_create_stream, patch(
"homeassistant.components.demo.camera.DemoCamera.supported_features", "homeassistant.components.demo.camera.DemoCamera.supported_features",
return_value=camera.SUPPORT_STREAM, return_value=camera.CameraEntityFeature.STREAM,
), patch( ), patch(
"homeassistant.components.demo.camera.DemoCamera.use_stream_for_stills", "homeassistant.components.demo.camera.DemoCamera.use_stream_for_stills",
return_value=True, return_value=True,
@ -971,3 +973,36 @@ async def test_use_stream_for_stills(
mock_stream.async_get_image.assert_called_once() mock_stream.async_get_image.assert_called_once()
assert resp.status == HTTPStatus.OK assert resp.status == HTTPStatus.OK
assert await resp.read() == b"stream_keyframe_image" assert await resp.read() == b"stream_keyframe_image"
@pytest.mark.parametrize(
"enum",
list(camera.const.StreamType),
)
@pytest.mark.parametrize(
"module",
[camera, camera.const],
)
def test_deprecated_stream_type_constants(
caplog: pytest.LogCaptureFixture,
enum: camera.const.StreamType,
module: ModuleType,
) -> None:
"""Test deprecated stream type constants."""
import_and_test_deprecated_constant_enum(
caplog, module, enum, "STREAM_TYPE_", "2025.1"
)
@pytest.mark.parametrize(
"entity_feature",
list(camera.CameraEntityFeature),
)
def test_deprecated_support_constants(
caplog: pytest.LogCaptureFixture,
entity_feature: camera.CameraEntityFeature,
) -> None:
"""Test deprecated support constants."""
import_and_test_deprecated_constant_enum(
caplog, camera, entity_feature, "SUPPORT_", "2025.1"
)

View File

@ -53,7 +53,7 @@ async def mock_camera(hass) -> AsyncGenerator[None, None]:
return_value=STREAM_SOURCE, return_value=STREAM_SOURCE,
), patch( ), patch(
"homeassistant.components.camera.Camera.supported_features", "homeassistant.components.camera.Camera.supported_features",
return_value=camera.SUPPORT_STREAM, return_value=camera.CameraEntityFeature.STREAM,
): ):
yield yield