Add very basic Flask implementation

This commit is contained in:
Jakob Moser 2025-06-22 15:15:54 +02:00
parent ee8215e7bc
commit 8afeb618d3
Signed by: jakob
GPG Key ID: 3EF2BA2851B3F53C
2 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,32 @@
import json
import logging
from karaokatalog.get_parser import get_parser
from karaokatalog.Library import Library
from karaokatalog.ui.serve.get_flask_app import get_flask_app
logging.basicConfig(
format="%(asctime)s [%(levelname)s] %(message)s", level=logging.INFO
)
if __name__ == "__main__":
args = get_parser(
"ui.serve", "Serve a web UI to browse the Karaokatalog"
).parse_args()
songs_json_path = args.library_path / "songs.json"
if songs_json_path.exists():
logging.info(f"Loading {songs_json_path}")
with songs_json_path.open("r", encoding="utf-8") as f:
songs = json.load(f)
else:
logging.info("Loading library")
library = Library.from_dir(args.library_path)
logging.info("Library loaded")
songs = [song.as_dict() for song in library.songs]
logging.info("Starting UI")
app = get_flask_app(songs)
app.run(port=5657)

View File

@ -0,0 +1,16 @@
from collections.abc import Sequence
from flask import Flask
def get_flask_app(songs: Sequence[dict[str, str]]) -> Flask:
app = Flask("karaokatalog.ui", static_url_path="/")
# This is only to make the type checker happy.
songs_list = list(songs)
@app.get("/api/songs")
def get_songs() -> list[dict[str, str]]:
return songs_list
return app