From c0b9924ed338d29578ddf8808a1fe37e0672e06d Mon Sep 17 00:00:00 2001 From: "Edgar P. Burkhart" Date: Wed, 10 Apr 2024 13:13:52 +0200 Subject: [PATCH] Improve logging --- musik/__main__.py | 159 +++++++++++++++++++++++++--------------------- musik/list.py | 14 ++-- musik/youtube.py | 18 +++--- 3 files changed, 105 insertions(+), 86 deletions(-) diff --git a/musik/__main__.py b/musik/__main__.py index a7a5158..17e9c44 100644 --- a/musik/__main__.py +++ b/musik/__main__.py @@ -1,4 +1,5 @@ import argparse +import logging from pathlib import Path from .list import generate_list, write_blacklist, write_results @@ -8,83 +9,99 @@ BLACKLIST = Path("./blacklists") RESULTS = Path("./results") NUM_MUS = 2 -# Lecture arguments console -parser = argparse.ArgumentParser( - prog="python -m musik", - description="Lancer une partie de Musik", - formatter_class=argparse.ArgumentDefaultsHelpFormatter, -) -parser.add_argument( - "-a", - "--no-api", - action="store_true", - help="Désactiver l'API Youtube ; affiche la liste des liens", -) -parser.add_argument( - "-b", - "--no-blacklist", - action="store_true", - help="Désactiver le méchanisme de blacklist en lecture et écriture", -) -parser.add_argument( - "-n", - "--number", - type=int, - default=NUM_MUS, - help="Modifier le nombre de musiques par joueur", -) -parser.add_argument( - "--lists", - type=Path, - default=ROOT_PATH, - help="Sélectionner le dossier contenant les listes de musiques", -) -parser.add_argument( - "--blacklists", - type=Path, - default=BLACKLIST, - help="Sélectionner le dossier contenant les blacklist", -) -parser.add_argument( - "--results", - type=Path, - default=RESULTS, - help="Sélectionner le dossier pour stocker les résultats", -) -args = parser.parse_args() -if not args.no_api: - from .youtube import create_playlist +def main(): + # Lecture arguments console + parser = argparse.ArgumentParser( + prog="python -m musik", + description="Lancer une partie de Musik", + formatter_class=argparse.ArgumentDefaultsHelpFormatter, + ) + parser.add_argument( + "-a", + "--no-api", + action="store_true", + help="Désactiver l'API Youtube ; affiche la liste des liens", + ) + parser.add_argument( + "-b", + "--no-blacklist", + action="store_true", + help="Désactiver le méchanisme de blacklist en lecture et écriture", + ) + parser.add_argument( + "-n", + "--number", + type=int, + default=NUM_MUS, + help="Modifier le nombre de musiques par joueur", + ) + parser.add_argument( + "--lists", + type=Path, + default=ROOT_PATH, + help="Sélectionner le dossier contenant les listes de musiques", + ) + parser.add_argument( + "--blacklists", + type=Path, + default=BLACKLIST, + help="Sélectionner le dossier contenant les blacklist", + ) + parser.add_argument( + "--results", + type=Path, + default=RESULTS, + help="Sélectionner le dossier pour stocker les résultats", + ) + parser.add_argument( + "-v", + "--verbose", + action="store_const", + const=logging.DEBUG, + default=logging.INFO, + ) -print("--- DÉBUT ---") + args = parser.parse_args() + if not args.no_api: + from .youtube import create_playlist -print("> Vérification") -assert args.lists.is_dir(), f"ROOT_PATH={ROOT_PATH} n'est pas un dossier" -if not args.blacklists.is_dir(): - args.blacklists.mkdir() -if not args.results.is_dir(): - args.results.mkdir() + # Configuration logs + logger = logging.getLogger("musik") + logging.basicConfig( + level=args.verbose, format="%(asctime)s\t%(levelname)s\t%(message)s" + ) -assert args.number >= 1, "Nombre de musiques < 1" + logger.info("Vérification") + assert args.lists.is_dir(), f"ROOT_PATH={ROOT_PATH} n'est pas un dossier" + if not args.blacklists.is_dir(): + args.blacklists.mkdir() + if not args.results.is_dir(): + args.results.mkdir() -# Lecture des fichiers musique dans ROOT_PATH -# Faire un dossier différent pour les gens qui ne jouent pas -musik_list = generate_list(args) + assert args.number >= 1, "Nombre de musiques < 1" -if not args.no_api: - create_playlist(musik_list) -else: - print("> Liste des musiques :") - for _, musik in musik_list: - print(f"> # https://www.youtube.com/watch?v={musik}") + # Lecture des fichiers musique dans ROOT_PATH + # Faire un dossier différent pour les gens qui ne jouent pas + logger.info("Génération de la liste de musiques") + musik_list = generate_list(args) -# Écriture des résultats -print("> Écriture des résultats") -write_results(musik_list, args) + if not args.no_api: + create_playlist(musik_list) + else: + logger.info("Liste des musiques :") + for _, musik in musik_list: + logger.info(f"# https://www.youtube.com/watch?v={musik}") -# Écriture de la blacklist -if not args.no_blacklist: - print("> Écriture de la blacklist") - write_blacklist(musik_list, args) + # Écriture des résultats + logger.info("Écriture des résultats") + write_results(musik_list, args) -print("--- FIN ---") + # Écriture de la blacklist + if not args.no_blacklist: + logger.info("Écriture de la blacklist") + write_blacklist(musik_list, args) + + +if __name__ == "__main__": + main() diff --git a/musik/list.py b/musik/list.py index a7f3817..2cf0a83 100644 --- a/musik/list.py +++ b/musik/list.py @@ -1,7 +1,10 @@ +import logging import random import re from datetime import datetime +logger = logging.getLogger("musik.list") + def bl_path(bl, user): return bl.joinpath(user).with_suffix(".txt") @@ -11,18 +14,17 @@ def generate_list(args): musik_list = [] user_list = [] - print("> Génération de la liste de musiques") for q in args.lists.iterdir(): _u = q.stem - print(f"> > Musiques de {_u}") + logger.info(f"Musiques de {_u}") if (not args.no_blacklist) and bl_path(args.blacklists, _u).exists(): - print("> > > Blacklist") + logger.debug("Blacklist") with bl_path(args.blacklists, _u).open("r") as blf: blacklist = blf.read().splitlines() else: blacklist = [] - print("> > > Lecture de la liste") + logger.debug("Lecture de la liste") with q.open() as f: _raw_musiks = [ (re.compile(r"[\?\&]v=(\w+)").search(_musik) or ("", _musik))[1] @@ -34,12 +36,12 @@ def generate_list(args): len(_musiks) >= args.number ), f"{_u} a {len(_musiks)} musique(s) non black-listée au lieu de {args.number}" - print("> > > Ajout des musiques à la liste") + logger.debug("Ajout des musiques à la liste") musik_list += random.sample(_musiks, args.number) user_list += [_u] * args.number # Shuffle musics - print("> Classement aléatoire des musiques") + logger.info("Classement aléatoire des musiques") user_musik_list = list(zip(user_list, musik_list)) random.shuffle(user_musik_list) return user_musik_list diff --git a/musik/youtube.py b/musik/youtube.py index 83fa9a6..a2e2874 100644 --- a/musik/youtube.py +++ b/musik/youtube.py @@ -1,13 +1,16 @@ +import logging from datetime import date import google_auth_oauthlib.flow import googleapiclient.discovery import googleapiclient.errors +logger = logging.getLogger("musik.youtube") + def create_playlist(musik_list): # Connexion à l'API youtube, obtention d'un jeton OAuth - print("> Connexion à l'API Youtube") + logger.info("Connexion à l'API Youtube") flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file( "./secret.json", ["https://www.googleapis.com/auth/youtube.force-ssl"] ) @@ -15,7 +18,7 @@ def create_playlist(musik_list): youtube = googleapiclient.discovery.build("youtube", "v3", credentials=credentials) # Création d'une playlist - print("> Création de la playlist") + logger.info("Création de la playlist") pl_request = youtube.playlists().insert( part="snippet,status", body={ @@ -28,17 +31,15 @@ def create_playlist(musik_list): }, ) pl_response = pl_request.execute() - print( - "> > Playlist créée :", + logger.info( + "Playlist créée : " f"https://www.youtube.com/playlist?list={pl_response['id']}", ) # Insertion des musiques dans la playlist - print("> Insertion des musiques dans la playlist") - print(f"> > {'_'*len(musik_list)}") - print("> > ", end="") + logger.info("Insertion des musiques dans la playlist") for _, musik in musik_list: - print("#", end="") + logger.debug(musik) request = youtube.playlistItems().insert( part="snippet", body={ @@ -53,4 +54,3 @@ def create_playlist(musik_list): }, ) request.execute() - print()