Improve logging

This commit is contained in:
Edgar P. Burkhart 2024-04-10 13:13:52 +02:00
parent 0fd0c4911b
commit c0b9924ed3
Signed by: edpibu
GPG Key ID: 9833D3C5A25BD227
3 changed files with 105 additions and 86 deletions

View File

@ -1,4 +1,5 @@
import argparse import argparse
import logging
from pathlib import Path from pathlib import Path
from .list import generate_list, write_blacklist, write_results from .list import generate_list, write_blacklist, write_results
@ -8,83 +9,99 @@ BLACKLIST = Path("./blacklists")
RESULTS = Path("./results") RESULTS = Path("./results")
NUM_MUS = 2 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() def main():
if not args.no_api: # Lecture arguments console
from .youtube import create_playlist 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") # Configuration logs
assert args.lists.is_dir(), f"ROOT_PATH={ROOT_PATH} n'est pas un dossier" logger = logging.getLogger("musik")
if not args.blacklists.is_dir(): logging.basicConfig(
args.blacklists.mkdir() level=args.verbose, format="%(asctime)s\t%(levelname)s\t%(message)s"
if not args.results.is_dir(): )
args.results.mkdir()
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 assert args.number >= 1, "Nombre de musiques < 1"
# Faire un dossier différent pour les gens qui ne jouent pas
musik_list = generate_list(args)
if not args.no_api: # Lecture des fichiers musique dans ROOT_PATH
create_playlist(musik_list) # Faire un dossier différent pour les gens qui ne jouent pas
else: logger.info("Génération de la liste de musiques")
print("> Liste des musiques :") musik_list = generate_list(args)
for _, musik in musik_list:
print(f"> # https://www.youtube.com/watch?v={musik}")
# Écriture des résultats if not args.no_api:
print("> Écriture des résultats") create_playlist(musik_list)
write_results(musik_list, args) 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 # Écriture des résultats
if not args.no_blacklist: logger.info("Écriture des résultats")
print("> Écriture de la blacklist") write_results(musik_list, args)
write_blacklist(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()

View File

@ -1,7 +1,10 @@
import logging
import random import random
import re import re
from datetime import datetime from datetime import datetime
logger = logging.getLogger("musik.list")
def bl_path(bl, user): def bl_path(bl, user):
return bl.joinpath(user).with_suffix(".txt") return bl.joinpath(user).with_suffix(".txt")
@ -11,18 +14,17 @@ def generate_list(args):
musik_list = [] musik_list = []
user_list = [] user_list = []
print("> Génération de la liste de musiques")
for q in args.lists.iterdir(): for q in args.lists.iterdir():
_u = q.stem _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(): 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: with bl_path(args.blacklists, _u).open("r") as blf:
blacklist = blf.read().splitlines() blacklist = blf.read().splitlines()
else: else:
blacklist = [] blacklist = []
print("> > > Lecture de la liste") logger.debug("Lecture de la liste")
with q.open() as f: with q.open() as f:
_raw_musiks = [ _raw_musiks = [
(re.compile(r"[\?\&]v=(\w+)").search(_musik) or ("", _musik))[1] (re.compile(r"[\?\&]v=(\w+)").search(_musik) or ("", _musik))[1]
@ -34,12 +36,12 @@ def generate_list(args):
len(_musiks) >= args.number len(_musiks) >= args.number
), f"{_u} a {len(_musiks)} musique(s) non black-listée au lieu de {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) musik_list += random.sample(_musiks, args.number)
user_list += [_u] * args.number user_list += [_u] * args.number
# Shuffle musics # Shuffle musics
print("> Classement aléatoire des musiques") logger.info("Classement aléatoire des musiques")
user_musik_list = list(zip(user_list, musik_list)) user_musik_list = list(zip(user_list, musik_list))
random.shuffle(user_musik_list) random.shuffle(user_musik_list)
return user_musik_list return user_musik_list

View File

@ -1,13 +1,16 @@
import logging
from datetime import date from datetime import date
import google_auth_oauthlib.flow import google_auth_oauthlib.flow
import googleapiclient.discovery import googleapiclient.discovery
import googleapiclient.errors import googleapiclient.errors
logger = logging.getLogger("musik.youtube")
def create_playlist(musik_list): def create_playlist(musik_list):
# Connexion à l'API youtube, obtention d'un jeton OAuth # 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( flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(
"./secret.json", ["https://www.googleapis.com/auth/youtube.force-ssl"] "./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) youtube = googleapiclient.discovery.build("youtube", "v3", credentials=credentials)
# Création d'une playlist # Création d'une playlist
print("> Création de la playlist") logger.info("Création de la playlist")
pl_request = youtube.playlists().insert( pl_request = youtube.playlists().insert(
part="snippet,status", part="snippet,status",
body={ body={
@ -28,17 +31,15 @@ def create_playlist(musik_list):
}, },
) )
pl_response = pl_request.execute() pl_response = pl_request.execute()
print( logger.info(
"> > Playlist créée :", "Playlist créée : "
f"https://www.youtube.com/playlist?list={pl_response['id']}", f"https://www.youtube.com/playlist?list={pl_response['id']}",
) )
# Insertion des musiques dans la playlist # Insertion des musiques dans la playlist
print("> Insertion des musiques dans la playlist") logger.info("Insertion des musiques dans la playlist")
print(f"> > {'_'*len(musik_list)}")
print("> > ", end="")
for _, musik in musik_list: for _, musik in musik_list:
print("#", end="") logger.debug(musik)
request = youtube.playlistItems().insert( request = youtube.playlistItems().insert(
part="snippet", part="snippet",
body={ body={
@ -53,4 +54,3 @@ def create_playlist(musik_list):
}, },
) )
request.execute() request.execute()
print()