System Gen94 @ 2025-08-01-00:58:27 by jonas@monolith

This commit is contained in:
Jonas Röger 2025-08-01 00:58:27 +02:00
parent 9a056ce6b0
commit 1616d78385
4 changed files with 79 additions and 0 deletions

View File

@ -0,0 +1,4 @@
from spotify_shortcuts.run import main
if __name__ == "__main__":
main()

View File

@ -0,0 +1,7 @@
from spotify_shortcuts.spotify_like import SpotifyLike
from spotify_shortcuts.spotify_pl_add import SpotifyPlAdd
SHORTCUT_REGISTRY = {
"like": SpotifyLike(),
"pl_add": SpotifyPlAdd(),
}

View File

@ -0,0 +1,47 @@
from spotify_shortcuts.config import Config, load_config
from spotify_shortcuts.shortcut import Shortcut
from spotify_shortcuts.spotify_auth import authenticated_session
from itertools import chain
def all_scopes() -> list[str]:
from spotify_shortcuts.registry import SHORTCUT_REGISTRY
return list(
set(
chain.from_iterable(
shortcut.get_scopes() for shortcut in SHORTCUT_REGISTRY.values()
)
)
)
def run_shortcut(shortcut: Shortcut, config: Config):
client = authenticated_session(
config, scopes=all_scopes() # use all scopes to avoid re-authentication
)
shortcut.execute(client, config)
def main():
from spotify_shortcuts.registry import SHORTCUT_REGISTRY
import sys
if len(sys.argv) < 2:
print(f"Usage: {sys.argv[0]} <shortcut_name>")
sys.exit(1)
shortcut_name = sys.argv[1]
if shortcut_name not in SHORTCUT_REGISTRY:
print(f"Shortcut '{shortcut_name}' not found.")
sys.exit(1)
shortcut = SHORTCUT_REGISTRY[shortcut_name]
config = load_config(args=sys.argv[2:])
run_shortcut(shortcut, config)
if __name__ == "__main__":
main()

View File

@ -0,0 +1,21 @@
from abc import ABC, abstractmethod
from spotify_shortcuts.config import Config
from spotipy import Spotify
class Shortcut(ABC):
@abstractmethod
def execute(self, client: Spotify, config: Config):
"""Execute the shortcut action."""
pass
@abstractmethod
def get_help(self) -> str:
"""Return a description of the shortcut."""
pass
@abstractmethod
def get_scopes(self) -> list[str]:
"""Return the spotify API scopes required for the shortcut."""
pass