Skip to content

Commit a656b6e

Browse files
authored
Use HassKey in media_source (home-assistant#148011)
1 parent 691681a commit a656b6e

File tree

4 files changed

+23
-12
lines changed

4 files changed

+23
-12
lines changed

homeassistant/components/media_source/__init__.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
DOMAIN,
3131
MEDIA_CLASS_MAP,
3232
MEDIA_MIME_TYPES,
33+
MEDIA_SOURCE_DATA,
3334
URI_SCHEME,
3435
URI_SCHEME_REGEX,
3536
)
@@ -78,7 +79,7 @@ def generate_media_source_id(domain: str, identifier: str) -> str:
7879

7980
async def async_setup(hass: HomeAssistant, config: ConfigType) -> bool:
8081
"""Set up the media_source component."""
81-
hass.data[DOMAIN] = {}
82+
hass.data[MEDIA_SOURCE_DATA] = {}
8283
websocket_api.async_register_command(hass, websocket_browse_media)
8384
websocket_api.async_register_command(hass, websocket_resolve_media)
8485
frontend.async_register_built_in_panel(
@@ -97,7 +98,7 @@ async def _process_media_source_platform(
9798
platform: MediaSourceProtocol,
9899
) -> None:
99100
"""Process a media source platform."""
100-
hass.data[DOMAIN][domain] = await platform.async_get_media_source(hass)
101+
hass.data[MEDIA_SOURCE_DATA][domain] = await platform.async_get_media_source(hass)
101102

102103

103104
@callback
@@ -109,10 +110,10 @@ def _get_media_item(
109110
item = MediaSourceItem.from_uri(hass, media_content_id, target_media_player)
110111
else:
111112
# We default to our own domain if its only one registered
112-
domain = None if len(hass.data[DOMAIN]) > 1 else DOMAIN
113+
domain = None if len(hass.data[MEDIA_SOURCE_DATA]) > 1 else DOMAIN
113114
return MediaSourceItem(hass, domain, "", target_media_player)
114115

115-
if item.domain is not None and item.domain not in hass.data[DOMAIN]:
116+
if item.domain is not None and item.domain not in hass.data[MEDIA_SOURCE_DATA]:
116117
raise UnknownMediaSource(
117118
translation_domain=DOMAIN,
118119
translation_key="unknown_media_source",

homeassistant/components/media_source/const.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
"""Constants for the media_source integration."""
22

3+
from __future__ import annotations
4+
35
import re
6+
from typing import TYPE_CHECKING
47

58
from homeassistant.components.media_player import MediaClass
9+
from homeassistant.util.hass_dict import HassKey
10+
11+
if TYPE_CHECKING:
12+
from .models import MediaSource
613

714
DOMAIN = "media_source"
15+
MEDIA_SOURCE_DATA: HassKey[dict[str, MediaSource]] = HassKey(DOMAIN)
816
MEDIA_MIME_TYPES = ("audio", "video", "image")
917
MEDIA_CLASS_MAP = {
1018
"audio": MediaClass.MUSIC,

homeassistant/components/media_source/local_source.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import mimetypes
77
from pathlib import Path
88
import shutil
9-
from typing import Any
9+
from typing import Any, cast
1010

1111
from aiohttp import web
1212
from aiohttp.web_request import FileField
@@ -18,7 +18,7 @@
1818
from homeassistant.core import HomeAssistant, callback
1919
from homeassistant.util import raise_if_invalid_filename, raise_if_invalid_path
2020

21-
from .const import DOMAIN, MEDIA_CLASS_MAP, MEDIA_MIME_TYPES
21+
from .const import DOMAIN, MEDIA_CLASS_MAP, MEDIA_MIME_TYPES, MEDIA_SOURCE_DATA
2222
from .error import Unresolvable
2323
from .models import BrowseMediaSource, MediaSource, MediaSourceItem, PlayMedia
2424

@@ -30,7 +30,7 @@
3030
def async_setup(hass: HomeAssistant) -> None:
3131
"""Set up local media source."""
3232
source = LocalSource(hass)
33-
hass.data[DOMAIN][DOMAIN] = source
33+
hass.data[MEDIA_SOURCE_DATA][DOMAIN] = source
3434
hass.http.register_view(LocalMediaView(hass, source))
3535
hass.http.register_view(UploadMediaView(hass, source))
3636
websocket_api.async_register_command(hass, websocket_remove_media)
@@ -352,7 +352,7 @@ async def websocket_remove_media(
352352
connection.send_error(msg["id"], websocket_api.ERR_INVALID_FORMAT, str(err))
353353
return
354354

355-
source: LocalSource = hass.data[DOMAIN][DOMAIN]
355+
source = cast(LocalSource, hass.data[MEDIA_SOURCE_DATA][DOMAIN])
356356

357357
try:
358358
source_dir_id, location = source.async_parse_identifier(item)

homeassistant/components/media_source/models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
from __future__ import annotations
44

55
from dataclasses import dataclass
6-
from typing import Any, cast
6+
from typing import TYPE_CHECKING, Any
77

88
from homeassistant.components.media_player import BrowseMedia, MediaClass, MediaType
99
from homeassistant.core import HomeAssistant, callback
1010

11-
from .const import DOMAIN, URI_SCHEME, URI_SCHEME_REGEX
11+
from .const import MEDIA_SOURCE_DATA, URI_SCHEME, URI_SCHEME_REGEX
1212

1313

1414
@dataclass(slots=True)
@@ -70,7 +70,7 @@ async def async_browse(self) -> BrowseMediaSource:
7070
can_play=False,
7171
can_expand=True,
7272
)
73-
for source in self.hass.data[DOMAIN].values()
73+
for source in self.hass.data[MEDIA_SOURCE_DATA].values()
7474
),
7575
key=lambda item: item.title,
7676
)
@@ -85,7 +85,9 @@ async def async_resolve(self) -> PlayMedia:
8585
@callback
8686
def async_media_source(self) -> MediaSource:
8787
"""Return media source that owns this item."""
88-
return cast(MediaSource, self.hass.data[DOMAIN][self.domain])
88+
if TYPE_CHECKING:
89+
assert self.domain is not None
90+
return self.hass.data[MEDIA_SOURCE_DATA][self.domain]
8991

9092
@classmethod
9193
def from_uri(

0 commit comments

Comments
 (0)