mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 13:17:32 +00:00
Change camera state to an enum (#126558)
* Change camera state to an enum * copy/paste mistake * Add test deprecated constants
This commit is contained in:
parent
4ac9b339a1
commit
711e0ee503
@ -77,6 +77,7 @@ from .const import ( # noqa: F401
|
||||
PREF_ORIENTATION,
|
||||
PREF_PRELOAD_STREAM,
|
||||
SERVICE_RECORD,
|
||||
CameraState,
|
||||
StreamType,
|
||||
)
|
||||
from .img_util import scale_jpeg_camera_image
|
||||
@ -98,9 +99,11 @@ ATTR_FILENAME: Final = "filename"
|
||||
ATTR_MEDIA_PLAYER: Final = "media_player"
|
||||
ATTR_FORMAT: Final = "format"
|
||||
|
||||
STATE_RECORDING: Final = "recording"
|
||||
STATE_STREAMING: Final = "streaming"
|
||||
STATE_IDLE: Final = "idle"
|
||||
# These constants are deprecated as of Home Assistant 2024.10
|
||||
# Please use the StreamType enum instead.
|
||||
_DEPRECATED_STATE_RECORDING = DeprecatedConstantEnum(CameraState.RECORDING, "2025.10")
|
||||
_DEPRECATED_STATE_STREAMING = DeprecatedConstantEnum(CameraState.STREAMING, "2025.10")
|
||||
_DEPRECATED_STATE_IDLE = DeprecatedConstantEnum(CameraState.IDLE, "2025.10")
|
||||
|
||||
|
||||
class CameraEntityFeature(IntFlag):
|
||||
@ -674,10 +677,10 @@ class Camera(Entity, cached_properties=CACHED_PROPERTIES_WITH_ATTR_):
|
||||
def state(self) -> str:
|
||||
"""Return the camera state."""
|
||||
if self.is_recording:
|
||||
return STATE_RECORDING
|
||||
return CameraState.RECORDING
|
||||
if self.is_streaming:
|
||||
return STATE_STREAMING
|
||||
return STATE_IDLE
|
||||
return CameraState.STREAMING
|
||||
return CameraState.IDLE
|
||||
|
||||
@cached_property
|
||||
def is_on(self) -> bool:
|
||||
|
@ -40,6 +40,14 @@ CAMERA_STREAM_SOURCE_TIMEOUT: Final = 10
|
||||
CAMERA_IMAGE_TIMEOUT: Final = 10
|
||||
|
||||
|
||||
class CameraState(StrEnum):
|
||||
"""Camera entity states."""
|
||||
|
||||
RECORDING = "recording"
|
||||
STREAMING = "streaming"
|
||||
IDLE = "idle"
|
||||
|
||||
|
||||
class StreamType(StrEnum):
|
||||
"""Camera stream type.
|
||||
|
||||
|
@ -15,8 +15,8 @@ from homeassistant.components import webhook
|
||||
from homeassistant.components.camera import (
|
||||
DOMAIN as CAMERA_DOMAIN,
|
||||
PLATFORM_SCHEMA as CAMERA_PLATFORM_SCHEMA,
|
||||
STATE_IDLE,
|
||||
Camera,
|
||||
CameraState,
|
||||
)
|
||||
from homeassistant.const import CONF_NAME, CONF_TIMEOUT, CONF_WEBHOOK_ID
|
||||
from homeassistant.core import HomeAssistant, callback
|
||||
@ -135,7 +135,7 @@ class PushCamera(Camera):
|
||||
|
||||
async def update_image(self, image, filename):
|
||||
"""Update the camera image."""
|
||||
if self.state == STATE_IDLE:
|
||||
if self.state == CameraState.IDLE:
|
||||
self._attr_is_recording = True
|
||||
self._last_trip = dt_util.utcnow()
|
||||
self.queue.clear()
|
||||
@ -165,7 +165,7 @@ class PushCamera(Camera):
|
||||
) -> bytes | None:
|
||||
"""Return a still image response."""
|
||||
if self.queue:
|
||||
if self.state == STATE_IDLE:
|
||||
if self.state == CameraState.IDLE:
|
||||
self.queue.rotate(1)
|
||||
self._current_image = self.queue[0]
|
||||
|
||||
|
@ -3,8 +3,8 @@
|
||||
from unittest.mock import patch
|
||||
|
||||
from homeassistant.components.abode.const import DOMAIN as ABODE_DOMAIN
|
||||
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
|
||||
from homeassistant.const import ATTR_ENTITY_ID, STATE_IDLE
|
||||
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN, CameraState
|
||||
from homeassistant.const import ATTR_ENTITY_ID
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.helpers import entity_registry as er
|
||||
|
||||
@ -26,7 +26,7 @@ async def test_attributes(hass: HomeAssistant) -> None:
|
||||
await setup_platform(hass, CAMERA_DOMAIN)
|
||||
|
||||
state = hass.states.get("camera.test_cam")
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
|
||||
async def test_capture_image(hass: HomeAssistant) -> None:
|
||||
|
@ -6,7 +6,7 @@ from unittest.mock import patch
|
||||
from yalexs.const import Brand
|
||||
from yalexs.doorbell import ContentTokenExpired
|
||||
|
||||
from homeassistant.const import STATE_IDLE
|
||||
from homeassistant.components.camera import CameraState
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .mocks import _create_august_with_devices, _mock_doorbell_from_fixture
|
||||
@ -26,7 +26,7 @@ async def test_create_doorbell(
|
||||
await _create_august_with_devices(hass, [doorbell_one], brand=Brand.AUGUST)
|
||||
|
||||
camera_state = hass.states.get("camera.k98gidt45gul_name_camera")
|
||||
assert camera_state.state == STATE_IDLE
|
||||
assert camera_state.state == CameraState.IDLE
|
||||
|
||||
url = camera_state.attributes["entity_picture"]
|
||||
|
||||
|
@ -766,7 +766,7 @@ async def test_state_streaming(hass: HomeAssistant) -> None:
|
||||
"""Camera state."""
|
||||
demo_camera = hass.states.get("camera.demo_camera")
|
||||
assert demo_camera is not None
|
||||
assert demo_camera.state == camera.STATE_STREAMING
|
||||
assert demo_camera.state == camera.CameraState.STREAMING
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("mock_camera", "mock_stream")
|
||||
@ -819,7 +819,7 @@ async def test_stream_unavailable(
|
||||
|
||||
demo_camera = hass.states.get("camera.demo_camera")
|
||||
assert demo_camera is not None
|
||||
assert demo_camera.state == camera.STATE_STREAMING
|
||||
assert demo_camera.state == camera.CameraState.STREAMING
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("mock_camera", "mock_stream_source")
|
||||
@ -1043,6 +1043,23 @@ def test_deprecated_stream_type_constants(
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"enum",
|
||||
list(camera.const.CameraState),
|
||||
)
|
||||
@pytest.mark.parametrize(
|
||||
"module",
|
||||
[camera],
|
||||
)
|
||||
def test_deprecated_state_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, "STATE_", "2025.10")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"entity_feature",
|
||||
list(camera.CameraEntityFeature),
|
||||
|
@ -1,6 +1,6 @@
|
||||
"""Test the Camera significant change platform."""
|
||||
|
||||
from homeassistant.components.camera import STATE_IDLE, STATE_RECORDING
|
||||
from homeassistant.components.camera import CameraState
|
||||
from homeassistant.components.camera.significant_change import (
|
||||
async_check_significant_change,
|
||||
)
|
||||
@ -10,11 +10,11 @@ async def test_significant_change() -> None:
|
||||
"""Detect Camera significant changes."""
|
||||
attrs = {}
|
||||
assert not async_check_significant_change(
|
||||
None, STATE_IDLE, attrs, STATE_IDLE, attrs
|
||||
None, CameraState.IDLE, attrs, CameraState.IDLE, attrs
|
||||
)
|
||||
assert not async_check_significant_change(
|
||||
None, STATE_IDLE, attrs, STATE_IDLE, {"dummy": "dummy"}
|
||||
None, CameraState.IDLE, attrs, CameraState.IDLE, {"dummy": "dummy"}
|
||||
)
|
||||
assert async_check_significant_change(
|
||||
None, STATE_IDLE, attrs, STATE_RECORDING, attrs
|
||||
None, CameraState.IDLE, attrs, CameraState.RECORDING, attrs
|
||||
)
|
||||
|
@ -11,8 +11,7 @@ from homeassistant.components.camera import (
|
||||
SERVICE_ENABLE_MOTION,
|
||||
SERVICE_TURN_OFF,
|
||||
SERVICE_TURN_ON,
|
||||
STATE_IDLE,
|
||||
STATE_STREAMING,
|
||||
CameraState,
|
||||
async_get_image,
|
||||
)
|
||||
from homeassistant.components.demo import DOMAIN
|
||||
@ -46,7 +45,7 @@ async def demo_camera(hass: HomeAssistant, camera_only: None) -> None:
|
||||
async def test_init_state_is_streaming(hass: HomeAssistant) -> None:
|
||||
"""Demo camera initialize as streaming."""
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_STREAMING
|
||||
assert state.state == CameraState.STREAMING
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.demo.camera.Path.read_bytes", return_value=b"ON"
|
||||
@ -59,21 +58,21 @@ async def test_init_state_is_streaming(hass: HomeAssistant) -> None:
|
||||
async def test_turn_on_state_back_to_streaming(hass: HomeAssistant) -> None:
|
||||
"""After turn on state back to streaming."""
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_STREAMING
|
||||
assert state.state == CameraState.STREAMING
|
||||
|
||||
await hass.services.async_call(
|
||||
CAMERA_DOMAIN, SERVICE_TURN_OFF, {ATTR_ENTITY_ID: ENTITY_CAMERA}, blocking=True
|
||||
)
|
||||
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
await hass.services.async_call(
|
||||
CAMERA_DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: ENTITY_CAMERA}, blocking=True
|
||||
)
|
||||
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_STREAMING
|
||||
assert state.state == CameraState.STREAMING
|
||||
|
||||
|
||||
async def test_turn_off_image(hass: HomeAssistant) -> None:
|
||||
@ -90,7 +89,7 @@ async def test_turn_off_image(hass: HomeAssistant) -> None:
|
||||
async def test_turn_off_invalid_camera(hass: HomeAssistant) -> None:
|
||||
"""Turn off non-exist camera should quietly fail."""
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_STREAMING
|
||||
assert state.state == CameraState.STREAMING
|
||||
|
||||
await hass.services.async_call(
|
||||
CAMERA_DOMAIN,
|
||||
@ -100,7 +99,7 @@ async def test_turn_off_invalid_camera(hass: HomeAssistant) -> None:
|
||||
)
|
||||
|
||||
state = hass.states.get(ENTITY_CAMERA)
|
||||
assert state.state == STATE_STREAMING
|
||||
assert state.state == CameraState.STREAMING
|
||||
|
||||
|
||||
async def test_motion_detection(hass: HomeAssistant) -> None:
|
||||
|
@ -4,7 +4,7 @@ from freezegun.api import FrozenDateTimeFactory
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.camera import (
|
||||
STATE_IDLE,
|
||||
CameraState,
|
||||
async_get_image,
|
||||
async_get_stream_source,
|
||||
)
|
||||
@ -23,11 +23,11 @@ async def test_doorbird_cameras(
|
||||
"""Test the doorbird cameras."""
|
||||
doorbird_entry = await doorbird_mocker()
|
||||
live_camera_entity_id = "camera.mydoorbird_live"
|
||||
assert hass.states.get(live_camera_entity_id).state == STATE_IDLE
|
||||
assert hass.states.get(live_camera_entity_id).state == CameraState.IDLE
|
||||
last_motion_camera_entity_id = "camera.mydoorbird_last_motion"
|
||||
assert hass.states.get(last_motion_camera_entity_id).state == STATE_IDLE
|
||||
assert hass.states.get(last_motion_camera_entity_id).state == CameraState.IDLE
|
||||
last_ring_camera_entity_id = "camera.mydoorbird_last_ring"
|
||||
assert hass.states.get(last_ring_camera_entity_id).state == STATE_IDLE
|
||||
assert hass.states.get(last_ring_camera_entity_id).state == CameraState.IDLE
|
||||
assert await async_get_stream_source(hass, live_camera_entity_id) is not None
|
||||
api = doorbird_entry.api
|
||||
api.get_image.side_effect = mock_not_found_exception()
|
||||
|
@ -5,13 +5,13 @@ from collections.abc import Awaitable, Callable
|
||||
from aioesphomeapi import (
|
||||
APIClient,
|
||||
CameraInfo,
|
||||
CameraState,
|
||||
CameraState as ESPHomeCameraState,
|
||||
EntityInfo,
|
||||
EntityState,
|
||||
UserService,
|
||||
)
|
||||
|
||||
from homeassistant.components.camera import STATE_IDLE
|
||||
from homeassistant.components.camera import CameraState
|
||||
from homeassistant.const import STATE_UNAVAILABLE
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
@ -55,10 +55,10 @@ async def test_camera_single_image(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
def _mock_camera_image():
|
||||
mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
|
||||
mock_client.request_single_image = _mock_camera_image
|
||||
|
||||
@ -67,7 +67,7 @@ async def test_camera_single_image(
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
assert resp.status == 200
|
||||
assert resp.content_type == "image/jpeg"
|
||||
@ -103,7 +103,7 @@ async def test_camera_single_image_unavailable_before_requested(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
await mock_device.mock_disconnect(False)
|
||||
|
||||
client = await hass_client()
|
||||
@ -144,7 +144,7 @@ async def test_camera_single_image_unavailable_during_request(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
def _mock_camera_image():
|
||||
hass.async_create_task(mock_device.mock_disconnect(False))
|
||||
@ -189,7 +189,7 @@ async def test_camera_stream(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
remaining_responses = 3
|
||||
|
||||
def _mock_camera_image():
|
||||
@ -197,7 +197,7 @@ async def test_camera_stream(
|
||||
if remaining_responses == 0:
|
||||
return
|
||||
remaining_responses -= 1
|
||||
mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
|
||||
mock_client.request_image_stream = _mock_camera_image
|
||||
mock_client.request_single_image = _mock_camera_image
|
||||
@ -207,7 +207,7 @@ async def test_camera_stream(
|
||||
await hass.async_block_till_done()
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
assert resp.status == 200
|
||||
assert resp.content_type == "multipart/x-mixed-replace"
|
||||
@ -249,7 +249,7 @@ async def test_camera_stream_unavailable(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
|
||||
await mock_device.mock_disconnect(False)
|
||||
|
||||
@ -289,7 +289,7 @@ async def test_camera_stream_with_disconnection(
|
||||
)
|
||||
state = hass.states.get("camera.test_mycamera")
|
||||
assert state is not None
|
||||
assert state.state == STATE_IDLE
|
||||
assert state.state == CameraState.IDLE
|
||||
remaining_responses = 3
|
||||
|
||||
def _mock_camera_image():
|
||||
@ -299,7 +299,7 @@ async def test_camera_stream_with_disconnection(
|
||||
if remaining_responses == 2:
|
||||
hass.async_create_task(mock_device.mock_disconnect(False))
|
||||
remaining_responses -= 1
|
||||
mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES))
|
||||
|
||||
mock_client.request_image_stream = _mock_camera_image
|
||||
mock_client.request_single_image = _mock_camera_image
|
||||
|
@ -15,7 +15,7 @@ from google_nest_sdm.event import EventMessage
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import camera
|
||||
from homeassistant.components.camera import STATE_IDLE, STATE_STREAMING, StreamType
|
||||
from homeassistant.components.camera import CameraState, StreamType
|
||||
from homeassistant.components.nest.const import DOMAIN
|
||||
from homeassistant.components.websocket_api import TYPE_RESULT
|
||||
from homeassistant.const import ATTR_FRIENDLY_NAME
|
||||
@ -218,7 +218,7 @@ async def test_camera_device(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
camera = hass.states.get("camera.my_camera")
|
||||
assert camera is not None
|
||||
assert camera.state == STATE_STREAMING
|
||||
assert camera.state == CameraState.STREAMING
|
||||
assert camera.attributes.get(ATTR_FRIENDLY_NAME) == "My Camera"
|
||||
|
||||
entry = entity_registry.async_get("camera.my_camera")
|
||||
@ -245,7 +245,7 @@ async def test_camera_stream(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
assert cam.attributes["frontend_stream_type"] == StreamType.HLS
|
||||
|
||||
stream_source = await camera.async_get_stream_source(hass, "camera.my_camera")
|
||||
@ -267,7 +267,7 @@ async def test_camera_ws_stream(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
assert cam.attributes["frontend_stream_type"] == StreamType.HLS
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
@ -300,7 +300,7 @@ async def test_camera_ws_stream_failure(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json(
|
||||
@ -341,7 +341,7 @@ async def test_camera_stream_missing_trait(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_IDLE
|
||||
assert cam.state == CameraState.IDLE
|
||||
|
||||
stream_source = await camera.async_get_stream_source(hass, "camera.my_camera")
|
||||
assert stream_source is None
|
||||
@ -375,7 +375,7 @@ async def test_refresh_expired_stream_token(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
# Request a stream for the camera entity to exercise nest cam + camera interaction
|
||||
# and shutdown on url expiration
|
||||
@ -446,7 +446,7 @@ async def test_stream_response_already_expired(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
# The stream is expired, but we return it anyway
|
||||
stream_source = await camera.async_get_stream_source(hass, "camera.my_camera")
|
||||
@ -474,7 +474,7 @@ async def test_camera_removed(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
# Start a stream, exercising cleanup on remove
|
||||
auth.responses = [
|
||||
@ -502,7 +502,7 @@ async def test_camera_remove_failure(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
# Start a stream, exercising cleanup on remove
|
||||
auth.responses = [
|
||||
@ -543,7 +543,7 @@ async def test_refresh_expired_stream_failure(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
# Request an HLS stream
|
||||
with patch("homeassistant.components.camera.create_stream") as create_stream:
|
||||
@ -602,7 +602,7 @@ async def test_camera_web_rtc(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
assert cam.attributes["frontend_stream_type"] == StreamType.WEB_RTC
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
@ -639,7 +639,7 @@ async def test_camera_web_rtc_unsupported(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
assert cam.attributes["frontend_stream_type"] == StreamType.HLS
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
@ -676,7 +676,7 @@ async def test_camera_web_rtc_offer_failure(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
client = await hass_ws_client(hass)
|
||||
await client.send_json(
|
||||
@ -741,7 +741,7 @@ async def test_camera_multiple_streams(
|
||||
assert len(hass.states.async_all()) == 1
|
||||
cam = hass.states.get("camera.my_camera")
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
# Prefer WebRTC over RTSP/HLS
|
||||
assert cam.attributes["frontend_stream_type"] == StreamType.WEB_RTC
|
||||
|
||||
|
@ -9,7 +9,7 @@ import pytest
|
||||
from syrupy import SnapshotAssertion
|
||||
|
||||
from homeassistant.components import camera
|
||||
from homeassistant.components.camera import STATE_STREAMING
|
||||
from homeassistant.components.camera import CameraState
|
||||
from homeassistant.components.netatmo.const import (
|
||||
NETATMO_EVENT,
|
||||
SERVICE_SET_CAMERA_LIGHT,
|
||||
@ -176,7 +176,7 @@ async def test_camera_image_local(
|
||||
cam = hass.states.get(camera_entity_indoor)
|
||||
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
assert cam.name == "Hall"
|
||||
|
||||
stream_source = await camera.async_get_stream_source(hass, camera_entity_indoor)
|
||||
@ -204,7 +204,7 @@ async def test_camera_image_vpn(
|
||||
cam = hass.states.get(camera_entity_indoor)
|
||||
|
||||
assert cam is not None
|
||||
assert cam.state == STATE_STREAMING
|
||||
assert cam.state == CameraState.STREAMING
|
||||
|
||||
stream_source = await camera.async_get_stream_source(hass, camera_entity_indoor)
|
||||
assert stream_source == stream_uri
|
||||
|
@ -5,9 +5,13 @@ from unittest.mock import MagicMock, patch
|
||||
import pytest
|
||||
from reolink_aio.exceptions import ReolinkError
|
||||
|
||||
from homeassistant.components.camera import async_get_image, async_get_stream_source
|
||||
from homeassistant.components.camera import (
|
||||
CameraState,
|
||||
async_get_image,
|
||||
async_get_stream_source,
|
||||
)
|
||||
from homeassistant.config_entries import ConfigEntryState
|
||||
from homeassistant.const import STATE_IDLE, Platform
|
||||
from homeassistant.const import Platform
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import HomeAssistantError
|
||||
|
||||
@ -30,7 +34,7 @@ async def test_camera(
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
|
||||
entity_id = f"{Platform.CAMERA}.{TEST_NVR_NAME}_fluent"
|
||||
assert hass.states.get(entity_id).state == STATE_IDLE
|
||||
assert hass.states.get(entity_id).state == CameraState.IDLE
|
||||
|
||||
# check getting a image from the camera
|
||||
reolink_connect.get_snapshot.return_value = b"image"
|
||||
@ -62,4 +66,4 @@ async def test_camera_no_stream_source(
|
||||
assert config_entry.state is ConfigEntryState.LOADED
|
||||
|
||||
entity_id = f"{Platform.CAMERA}.{TEST_NVR_NAME}_snapshots_fluent_lens_0"
|
||||
assert hass.states.get(entity_id).state == STATE_IDLE
|
||||
assert hass.states.get(entity_id).state == CameraState.IDLE
|
||||
|
@ -10,8 +10,8 @@ from uiprotect.exceptions import NvrError
|
||||
from uiprotect.websocket import WebsocketState
|
||||
|
||||
from homeassistant.components.camera import (
|
||||
STATE_IDLE,
|
||||
CameraEntityFeature,
|
||||
CameraState,
|
||||
async_get_image,
|
||||
async_get_stream_source,
|
||||
)
|
||||
@ -431,7 +431,7 @@ async def test_camera_websocket_disconnected(
|
||||
entity_id = "camera.test_camera_high_resolution_channel"
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state and state.state == STATE_IDLE
|
||||
assert state and state.state == CameraState.IDLE
|
||||
|
||||
# websocket disconnects
|
||||
ufp.ws_state_subscription(WebsocketState.DISCONNECTED)
|
||||
@ -445,7 +445,7 @@ async def test_camera_websocket_disconnected(
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get(entity_id)
|
||||
assert state and state.state == STATE_IDLE
|
||||
assert state and state.state == CameraState.IDLE
|
||||
|
||||
|
||||
async def test_camera_ws_update(
|
||||
|
@ -10,8 +10,8 @@ from homeassistant.components.camera import (
|
||||
DEFAULT_CONTENT_TYPE,
|
||||
SERVICE_DISABLE_MOTION,
|
||||
SERVICE_ENABLE_MOTION,
|
||||
STATE_RECORDING,
|
||||
CameraEntityFeature,
|
||||
CameraState,
|
||||
async_get_image,
|
||||
async_get_stream_source,
|
||||
)
|
||||
@ -336,7 +336,7 @@ async def test_properties(hass: HomeAssistant, mock_remote) -> None:
|
||||
|
||||
assert state
|
||||
assert state.name == "Front"
|
||||
assert state.state == STATE_RECORDING
|
||||
assert state.state == CameraState.RECORDING
|
||||
assert state.attributes["brand"] == "Ubiquiti"
|
||||
assert state.attributes["model_name"] == "UVC"
|
||||
assert state.attributes["supported_features"] == CameraEntityFeature.STREAM
|
||||
@ -354,7 +354,7 @@ async def test_motion_recording_mode_properties(
|
||||
state = hass.states.get("camera.front")
|
||||
|
||||
assert state
|
||||
assert state.state == STATE_RECORDING
|
||||
assert state.state == CameraState.RECORDING
|
||||
|
||||
mock_remote.return_value.get_camera.return_value["recordingSettings"][
|
||||
"fullTimeRecordEnabled"
|
||||
@ -369,7 +369,7 @@ async def test_motion_recording_mode_properties(
|
||||
state = hass.states.get("camera.front")
|
||||
|
||||
assert state
|
||||
assert state.state != STATE_RECORDING
|
||||
assert state.state != CameraState.RECORDING
|
||||
assert state.attributes["last_recording_start_time"] == datetime(
|
||||
2021, 1, 8, 1, 56, 32, 367000, tzinfo=UTC
|
||||
)
|
||||
@ -382,7 +382,7 @@ async def test_motion_recording_mode_properties(
|
||||
state = hass.states.get("camera.front")
|
||||
|
||||
assert state
|
||||
assert state.state != STATE_RECORDING
|
||||
assert state.state != CameraState.RECORDING
|
||||
|
||||
mock_remote.return_value.get_camera.return_value["recordingIndicator"] = (
|
||||
"MOTION_INPROGRESS"
|
||||
@ -394,7 +394,7 @@ async def test_motion_recording_mode_properties(
|
||||
state = hass.states.get("camera.front")
|
||||
|
||||
assert state
|
||||
assert state.state == STATE_RECORDING
|
||||
assert state.state == CameraState.RECORDING
|
||||
|
||||
mock_remote.return_value.get_camera.return_value["recordingIndicator"] = (
|
||||
"MOTION_FINISHED"
|
||||
@ -406,7 +406,7 @@ async def test_motion_recording_mode_properties(
|
||||
state = hass.states.get("camera.front")
|
||||
|
||||
assert state
|
||||
assert state.state == STATE_RECORDING
|
||||
assert state.state == CameraState.RECORDING
|
||||
|
||||
|
||||
async def test_stream(hass: HomeAssistant, mock_remote) -> None:
|
||||
|
@ -6,7 +6,7 @@ from unittest.mock import patch
|
||||
from yalexs.const import Brand
|
||||
from yalexs.doorbell import ContentTokenExpired
|
||||
|
||||
from homeassistant.const import STATE_IDLE
|
||||
from homeassistant.components.camera import CameraState
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .mocks import _create_yale_with_devices, _mock_doorbell_from_fixture
|
||||
@ -28,7 +28,7 @@ async def test_create_doorbell(
|
||||
camera_k98gidt45gul_name_camera = hass.states.get(
|
||||
"camera.k98gidt45gul_name_camera"
|
||||
)
|
||||
assert camera_k98gidt45gul_name_camera.state == STATE_IDLE
|
||||
assert camera_k98gidt45gul_name_camera.state == CameraState.IDLE
|
||||
|
||||
url = hass.states.get("camera.k98gidt45gul_name_camera").attributes[
|
||||
"entity_picture"
|
||||
|
Loading…
x
Reference in New Issue
Block a user