56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
"""Mock Spotify backend (logical)."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from storage.secret_store import SecretStore
|
|
from spotify.base import SpotifyBackend
|
|
|
|
|
|
class MockSpotifyBackend(SpotifyBackend):
|
|
def __init__(self, secret_store: SecretStore) -> None:
|
|
self._secret_store = secret_store
|
|
self._tokens: dict[str, Any] = {}
|
|
self._load()
|
|
|
|
def set_tokens(
|
|
self,
|
|
access_token: str,
|
|
refresh_token: str,
|
|
expires_at: int,
|
|
account_id: str | None = None,
|
|
) -> None:
|
|
self._tokens = {
|
|
"access_token": access_token,
|
|
"refresh_token": refresh_token,
|
|
"expires_at": expires_at,
|
|
}
|
|
if account_id is not None:
|
|
self._tokens["account_id"] = account_id
|
|
self._save()
|
|
|
|
def clear(self) -> None:
|
|
self._tokens = {}
|
|
secrets = self._secret_store.load_secrets()
|
|
if "spotify" in secrets:
|
|
secrets.pop("spotify")
|
|
self._secret_store.save_secrets(secrets)
|
|
|
|
@property
|
|
def status(self) -> str:
|
|
if not self._tokens:
|
|
return "NOT_CONFIGURED"
|
|
return "READY"
|
|
|
|
def _load(self) -> None:
|
|
secrets = self._secret_store.load_secrets()
|
|
tokens = secrets.get("spotify")
|
|
if isinstance(tokens, dict):
|
|
self._tokens = dict(tokens)
|
|
|
|
def _save(self) -> None:
|
|
secrets = self._secret_store.load_secrets()
|
|
secrets["spotify"] = dict(self._tokens)
|
|
self._secret_store.save_secrets(secrets)
|