From 6840a57e0b3b8c0ee2839ba1c1875ac60876fc5c Mon Sep 17 00:00:00 2001 From: Jakob Moser Date: Fri, 20 Jun 2025 19:54:55 +0200 Subject: [PATCH] Implement JSONification --- README.md | 13 ++++++++++++- karaokatalog/jsonify/__init__.py | 0 karaokatalog/jsonify/__main__.py | 30 ++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 karaokatalog/jsonify/__init__.py create mode 100644 karaokatalog/jsonify/__main__.py diff --git a/README.md b/README.md index ed5c10a..7d2294f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,11 @@ # Karaokatalog -Tools to manage an Ultrastar DX song library. Features include: +Tools to manage an UltraStar DX song library. Features include: 1. Deduplication 2. Organization 3. Recoding +4. Jsonification ## Setup @@ -55,3 +56,13 @@ python3 -m karaokatalog.organize $SONG_LIBRARY ```bash python3 -m karaokatalog.recode $SONG_LIBRARY ``` + +### Jsonification + +**Create a `songs.json` file with some song metadata in the root library dir.** + +ℹ️ This operation is risk-free: If a `songs.json` already exists, it is kept intact (so no data loss possible). + +```bash +python3 -m karaokatalog.jsonify $SONG_LIBRARY +``` diff --git a/karaokatalog/jsonify/__init__.py b/karaokatalog/jsonify/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/karaokatalog/jsonify/__main__.py b/karaokatalog/jsonify/__main__.py new file mode 100644 index 0000000..98bc0d6 --- /dev/null +++ b/karaokatalog/jsonify/__main__.py @@ -0,0 +1,30 @@ +import json +import logging + +from karaokatalog.get_parser import get_parser +from karaokatalog.Library import Library + +logging.basicConfig( + format="%(asctime)s [%(levelname)s] %(message)s", level=logging.INFO +) + + +if __name__ == "__main__": + args = get_parser( + "jsonify", "Create a JSON file containing metadata of all songs in the library" + ).parse_args() + logging.info("Karaokatalog Jsonification started") + + logging.info("Loading library") + library = Library.from_dir(args.library_path) + logging.info("Library loaded") + + songs = [song.as_dict() for song in library.songs] + json_path = args.library_path / "songs.json" + + logging.info(f"Writing JSON to {json_path}") + + with json_path.open("x", encoding="utf-8") as f: + json.dump(songs, f, ensure_ascii=False, indent=4) + + logging.info("Karaokatalog Jsonification done")