import os import click import yaml import eyed3 from eyed3.core import Date @click.command() @click.option("--config", prompt="Config path", help="A path to the yaml config") def run(config): config_dir = os.path.dirname(config) data = read_one_block_of_yaml_data(config) if isinstance(data, list): for idx, track in enumerate(data): print(track["title"]) audiofile = eyed3.load(f"{config_dir}/{track["file"]}") audiofile.initTag() # Set tags audiofile.tag.artist = track["artist"] audiofile.tag.album = track["album"] audiofile.tag.title = track["title"] audiofile.tag.track_num = idx + 1 audiofile.tag.comment = track["comment"] date_str = track["release_date"] date_obj = Date.parse(date_str) audiofile.tag.original_release_date = date_obj with open(f"{config_dir}/{track["cover"]}", "rb") as cover_art: audiofile.tag.images.set( 3, cover_art.read(), "image/png", "Cover (front)" ) with open(f"{config_dir}/{track["lyrics"]}", "r", encoding="utf-8") as f: text = f.read() audiofile.tag.lyrics.set(text) audiofile.tag.save() else: raise Exception("Wrong data type, expected list") def read_one_block_of_yaml_data(filename): with open(filename) as f: return yaml.safe_load(f) raise Exception("File doesn't exist") if __name__ == "__main__": run()