1 """DataUpdateCoordinator for the LastFM integration."""
3 from __future__
import annotations
5 from dataclasses
import dataclass
6 from datetime
import timedelta
8 from pylast
import LastFMNetwork, PyLastError, Track
15 from .const
import CONF_USERS, DOMAIN, LOGGER
19 """Format the track."""
22 return f
"{track.artist} - {track.title}"
27 """Data holder for LastFM data."""
31 now_playing: str |
None
33 last_track: str |
None
37 """A LastFM Data Update Coordinator."""
39 config_entry: ConfigEntry
40 _client: LastFMNetwork
42 def __init__(self, hass: HomeAssistant) ->
None:
43 """Initialize the LastFM data coordinator."""
54 for username
in self.
config_entryconfig_entry.options[CONF_USERS]:
55 data = await self.
hasshass.async_add_executor_job(self.
_get_user_data_get_user_data, username)
63 user = self.
_client_client.get_user(username)
65 play_count = user.get_playcount()
66 image = user.get_image()
68 top_tracks = user.get_top_tracks(limit=1)
69 last_tracks = user.get_recent_tracks(limit=1)
70 except PyLastError
as exc:
72 LOGGER.error(
"LastFM update for %s failed: %r", username, exc)
75 if len(top_tracks) > 0:
78 if len(last_tracks) > 0:
None __init__(self, HomeAssistant hass)
dict[str, LastFMUserData] _async_update_data(self)
LastFMUserData|None _get_user_data(self, str username)
str|None format_track(Track|None track)