Fix incorrectly return type on bad_identifier in UniFi Protect (#85050)
This commit is contained in:
parent
171e114ec1
commit
c1a6f83f12
1 changed files with 14 additions and 21 deletions
|
@ -5,7 +5,7 @@ from __future__ import annotations
|
|||
import asyncio
|
||||
from datetime import date, datetime, timedelta
|
||||
from enum import Enum
|
||||
from typing import Any, cast
|
||||
from typing import Any, NoReturn, cast
|
||||
|
||||
from pyunifiprotect.data import (
|
||||
Camera,
|
||||
|
@ -107,18 +107,13 @@ def _get_month_start_end(start: datetime) -> tuple[datetime, datetime]:
|
|||
|
||||
|
||||
@callback
|
||||
def _bad_identifier(identifier: str, err: Exception | None = None) -> BrowseMediaSource:
|
||||
def _bad_identifier(identifier: str, err: Exception | None = None) -> NoReturn:
|
||||
msg = f"Unexpected identifier: {identifier}"
|
||||
if err is None:
|
||||
raise BrowseError(msg)
|
||||
raise BrowseError(msg) from err
|
||||
|
||||
|
||||
@callback
|
||||
def _bad_identifier_media(identifier: str, err: Exception | None = None) -> PlayMedia:
|
||||
return cast(PlayMedia, _bad_identifier(identifier, err))
|
||||
|
||||
|
||||
@callback
|
||||
def _format_duration(duration: timedelta) -> str:
|
||||
formatted = ""
|
||||
|
@ -164,20 +159,20 @@ class ProtectMediaSource(MediaSource):
|
|||
|
||||
parts = item.identifier.split(":")
|
||||
if len(parts) != 3 or parts[1] not in ("event", "eventthumb"):
|
||||
return _bad_identifier_media(item.identifier)
|
||||
_bad_identifier(item.identifier)
|
||||
|
||||
thumbnail_only = parts[1] == "eventthumb"
|
||||
try:
|
||||
data = self.data_sources[parts[0]]
|
||||
except (KeyError, IndexError) as err:
|
||||
return _bad_identifier_media(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
event = data.api.bootstrap.events.get(parts[2])
|
||||
if event is None:
|
||||
try:
|
||||
event = await data.api.get_event(parts[2])
|
||||
except NvrError as err:
|
||||
return _bad_identifier_media(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
else:
|
||||
# cache the event for later
|
||||
data.api.bootstrap.events[event.id] = event
|
||||
|
@ -241,15 +236,15 @@ class ProtectMediaSource(MediaSource):
|
|||
try:
|
||||
data = self.data_sources[parts[0]]
|
||||
except (KeyError, IndexError) as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
if len(parts) < 2:
|
||||
return _bad_identifier(item.identifier)
|
||||
_bad_identifier(item.identifier)
|
||||
|
||||
try:
|
||||
identifier_type = IdentifierType(parts[1])
|
||||
except ValueError as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
if identifier_type in (IdentifierType.EVENT, IdentifierType.EVENT_THUMB):
|
||||
thumbnail_only = identifier_type == IdentifierType.EVENT_THUMB
|
||||
|
@ -271,7 +266,7 @@ class ProtectMediaSource(MediaSource):
|
|||
try:
|
||||
event_type = SimpleEventType(parts.pop(0).lower())
|
||||
except (IndexError, ValueError) as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
if len(parts) == 0:
|
||||
return await self._build_events_type(
|
||||
|
@ -281,17 +276,17 @@ class ProtectMediaSource(MediaSource):
|
|||
try:
|
||||
time_type = IdentifierTimeType(parts.pop(0))
|
||||
except ValueError as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
if len(parts) == 0:
|
||||
return _bad_identifier(item.identifier)
|
||||
_bad_identifier(item.identifier)
|
||||
|
||||
# {nvr_id}:browse:all|{camera_id}:all|{event_type}:recent:{day_count}
|
||||
if time_type == IdentifierTimeType.RECENT:
|
||||
try:
|
||||
days = int(parts.pop(0))
|
||||
except (IndexError, ValueError) as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
return await self._build_recent(
|
||||
data, camera_id, event_type, days, build_children=True
|
||||
|
@ -302,7 +297,7 @@ class ProtectMediaSource(MediaSource):
|
|||
try:
|
||||
start, is_month, is_all = self._parse_range(parts)
|
||||
except (IndexError, ValueError) as err:
|
||||
return _bad_identifier(item.identifier, err)
|
||||
_bad_identifier(item.identifier, err)
|
||||
|
||||
if is_month:
|
||||
return await self._build_month(
|
||||
|
@ -336,9 +331,7 @@ class ProtectMediaSource(MediaSource):
|
|||
try:
|
||||
event = await data.api.get_event(event_id)
|
||||
except NvrError as err:
|
||||
return _bad_identifier(
|
||||
f"{data.api.bootstrap.nvr.id}:{subtype}:{event_id}", err
|
||||
)
|
||||
_bad_identifier(f"{data.api.bootstrap.nvr.id}:{subtype}:{event_id}", err)
|
||||
|
||||
if event.start is None or event.end is None:
|
||||
raise BrowseError("Event is still ongoing")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue