From 0eea3176d6b6bf871acc7a340f748af88615637e Mon Sep 17 00:00:00 2001 From: Marc Mueller <30130371+cdce8p@users.noreply.github.com> Date: Sat, 2 Nov 2024 19:29:09 +0100 Subject: [PATCH] Minor stream typing improvements (#129691) --- homeassistant/components/stream/const.py | 8 ++++++-- homeassistant/components/stream/core.py | 4 ++-- homeassistant/components/stream/recorder.py | 5 ++++- homeassistant/components/stream/worker.py | 16 ++++++++++------ 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/homeassistant/components/stream/const.py b/homeassistant/components/stream/const.py index a2fa065e019..66455ffad1a 100644 --- a/homeassistant/components/stream/const.py +++ b/homeassistant/components/stream/const.py @@ -1,5 +1,9 @@ """Constants for Stream component.""" +from __future__ import annotations + +from typing import Final + DOMAIN = "stream" ATTR_ENDPOINTS = "endpoints" @@ -11,8 +15,8 @@ RECORDER_PROVIDER = "recorder" OUTPUT_FORMATS = [HLS_PROVIDER] -SEGMENT_CONTAINER_FORMAT = "mp4" # format for segments -RECORDER_CONTAINER_FORMAT = "mp4" # format for recorder output +SEGMENT_CONTAINER_FORMAT: Final = "mp4" # format for segments +RECORDER_CONTAINER_FORMAT: Final = "mp4" # format for recorder output AUDIO_CODECS = {"aac", "mp3"} FORMAT_CONTENT_TYPE = {HLS_PROVIDER: "application/vnd.apple.mpegurl"} diff --git a/homeassistant/components/stream/core.py b/homeassistant/components/stream/core.py index 68c08a4f072..a2ac242156e 100644 --- a/homeassistant/components/stream/core.py +++ b/homeassistant/components/stream/core.py @@ -438,11 +438,11 @@ class KeyFrameConverter: """Initialize.""" # Keep import here so that we can import stream integration - # without installingreqs + # without installing reqs # pylint: disable-next=import-outside-toplevel from homeassistant.components.camera.img_util import TurboJPEGSingleton - self._packet: Packet = None + self._packet: Packet | None = None self._event: asyncio.Event = asyncio.Event() self._hass = hass self._image: bytes | None = None diff --git a/homeassistant/components/stream/recorder.py b/homeassistant/components/stream/recorder.py index aa5e08a1594..43b3ae163a7 100644 --- a/homeassistant/components/stream/recorder.py +++ b/homeassistant/components/stream/recorder.py @@ -9,6 +9,7 @@ import os from typing import TYPE_CHECKING import av +import av.container from homeassistant.core import HomeAssistant, callback @@ -168,7 +169,9 @@ class RecorderOutput(StreamOutput): os.remove(video_path + ".tmp") def finish_writing( - segments: deque[Segment], output: av.OutputContainer, video_path: str + segments: deque[Segment], + output: av.container.OutputContainer | None, + video_path: str, ) -> None: """Finish writing output.""" # Should only have 0 or 1 segments, but loop through just in case diff --git a/homeassistant/components/stream/worker.py b/homeassistant/components/stream/worker.py index a44598b5971..7d6d11591c7 100644 --- a/homeassistant/components/stream/worker.py +++ b/homeassistant/components/stream/worker.py @@ -13,6 +13,10 @@ from threading import Event from typing import Any, Self, cast import av +import av.audio +import av.container +import av.stream +import av.video from homeassistant.core import HomeAssistant from homeassistant.util import dt as dt_util @@ -127,7 +131,7 @@ class StreamMuxer: self, hass: HomeAssistant, video_stream: av.video.VideoStream, - audio_stream: av.audio.stream.AudioStream | None, + audio_stream: av.audio.AudioStream | None, audio_bsf: av.BitStreamFilter | None, stream_state: StreamState, stream_settings: StreamSettings, @@ -138,11 +142,11 @@ class StreamMuxer: self._memory_file: BytesIO = cast(BytesIO, None) self._av_output: av.container.OutputContainer = None self._input_video_stream: av.video.VideoStream = video_stream - self._input_audio_stream: av.audio.stream.AudioStream | None = audio_stream + self._input_audio_stream: av.audio.AudioStream | None = audio_stream self._audio_bsf = audio_bsf self._audio_bsf_context: av.BitStreamFilterContext = None self._output_video_stream: av.video.VideoStream = None - self._output_audio_stream: av.audio.stream.AudioStream | None = None + self._output_audio_stream: av.audio.AudioStream | None = None self._segment: Segment | None = None # the following 3 member variables are used for Part formation self._memory_file_pos: int = cast(int, None) @@ -157,11 +161,11 @@ class StreamMuxer: memory_file: BytesIO, sequence: int, input_vstream: av.video.VideoStream, - input_astream: av.audio.stream.AudioStream | None, + input_astream: av.audio.AudioStream | None, ) -> tuple[ av.container.OutputContainer, av.video.VideoStream, - av.audio.stream.AudioStream | None, + av.audio.AudioStream | None, ]: """Make a new av OutputContainer and add output streams.""" container_options: dict[str, str] = { @@ -396,7 +400,7 @@ class StreamMuxer: self._memory_file.close() -class PeekIterator(Iterator): +class PeekIterator(Iterator[av.Packet]): """An Iterator that may allow multiple passes. This may be consumed like a normal Iterator, however also supports a