Add very basic Flask implementation
This commit is contained in:
parent
ee8215e7bc
commit
8afeb618d3
32
karaokatalog/ui/serve/__main__.py
Normal file
32
karaokatalog/ui/serve/__main__.py
Normal 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)
|
16
karaokatalog/ui/serve/get_flask_app.py
Normal file
16
karaokatalog/ui/serve/get_flask_app.py
Normal 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
|
Loading…
x
Reference in New Issue
Block a user