import os import sys from datetime import datetime import glob from jinja2 import Template import shutil from . import constantes_document_latex as constantes from . import lib_annee_scolaire as annee_scolaire import click from PyInquirer.prompt import prompt template_dir = constantes.jinja_template_dir def validate_dossier(ctx, param, value): if os.path.exists(value): raise click.BadParameter("Le dossier existe déjà !") try: if len(value.split("_")) == 2: numero, nom = value.split("_") int(numero) return numero, f"{numero}_{nom}" if len(value.split("_")) == 1: try: int(value) return value, value except: return "", value else: raise click.BadParameter("Le dossion doit être au format numéro_nom ou nom") except ValueError: raise click.BadParameter("Le dossier doit être au format nom ou numéro_nom") @click.command() @click.argument("dossier", type=click.UNPROCESSED, callback=validate_dossier) @click.argument("type_document", type=click.Choice([key for key in constantes.dictionnaire_type_document])) def documentex(dossier: str, type_document: str): """ Entrée: ------- dossier : chaîne de caractère spécifiant le nom du dossier à créer type_document : chaîne de caractère spécifiant le type de document à créer Sortie : -------- Aucune. On crée dans le dossier $dossier tous les fichiers d'en-tête LaTeX nécessaire en fonction du type de document à créer. Exemple : --------- documentex 01_algebre-lineaire td """ # Initialisation des variables # contenu,tex_file,fancyhead,type_document,short_title,lycee,classe,title,auteur,semaine,liste_noms,td,ds_numero,annee date = datetime.now().strftime("%Y-%m-%d") title = "" semaine = "" nom1 = "" nom2 = "" nom3 = "" classe = "" lycee = "" ds_numero = "" numero, nom_fichier = dossier tex_file = constantes.tex_file # nom du fichier dans lequel on écrit du LaTeX contenu, td, fancyhead, appartenance = constantes.dictionnaire_type_document[type_document] short_title = type_document.upper()+' '+numero auteur = constantes.auteur annee = annee_scolaire.annee_scolaire() institution = constantes.institution nom_institution = constantes.nom_institution lycee_adresse = constantes.lycee_adresse lycee_complement_adresse = constantes.lycee_complement_adresse auteur_lettre = constantes.auteur_lettre auteur_titre = constantes.auteur_titre auteur_adresse_mail = constantes.auteur_adresse_mail if appartenance: classe = constantes.classe_appartenance lycee = constantes.lycee_appartenance # Initialisation des variables suivant le type d'écrit if contenu: questions = [ { "type": "input", "name": "title", "message": "Titre LONG du document", }, { "type": "input", "name": "short_title", "message": "Titre COURT du document", } ] answers = prompt(questions) title = answers["title"] short_title = answers["short_title"] if type_document == 'dm': questions = [ { "type": "input", "name": "date", "message": "À rendre pour le : ", } ] short_title += ' : à rendre pour le ' answers = prompt(questions) short_title += answers["date"] if type_document == 'cr': questions = [ { "type": "list", "name": "lycee", "message": "Nom du lycée", "choices": [ "LLW", "Lycée de Cachan", "Lycée Raspail", ] }, { "type": "list", "name": "classe", "message": "Nom de la classe", "choices": [ "TSI2", "PTSI", "PT*", "PT", ] }, { "type": "input", "name": "semaine", "message": "Numéro de la semaine", "validate": constantes.entier, }, { "type": "input", "name": "nom1", "message": "Nom du premier candidat", "default": "", }, { "type": "input", "name": "nom2", "message": "Nom du deuxième candidat", "default": "", }, { "type": "input", "name": "nom3", "message": "Nom du troisième candidat", "default": "", }, ] answers = prompt(questions) lycee = answers["lycee"] classe = answers["classe"] semaine = answers["semaine"] nom1 = answers["nom1"] nom2 = answers["nom2"] nom3 = answers["nom3"] if type_document == 'ob': questions = [ { "type": "input", "name": "nom1", "message": "Nom du candidat ", } ] answers = prompt(questions) nom1 = answers["nom1"] os.mkdir(nom_fichier) os.mkdir(os.path.join(nom_fichier, "Utils")) liste_noms = [nom1, nom2, nom3, ] tex_file_path = nom_fichier ressource_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),template_dir) # dossier des templates fichiers = glob.glob(os.path.join(ressource_dir,'*')) fichiers = [fichier for fichier in fichiers if 'Utils' not in fichier ] image = [fichier for fichier in fichiers if 'raspail.png' in fichier][0] fichiers.remove(image) #on enlève l'image raspail.png des fichiers fichiers_utils = glob.glob(os.path.join(os.path.join(ressource_dir,'Utils'),'*')) if type_document in ['ds','let']: shutil.copy(image,os.path.join(tex_file_path,'raspail.png')) if type_document == 'ds': ds_numero = constantes.dictionnaire_numero_ds[numero] ## attention mettre numéro épreuve (?) # Génération des fichiers de base for fichier in fichiers: nom_fichier_a_copier = os.path.basename(fichier) with open(os.path.join(tex_file_path,nom_fichier_a_copier),'w') as outfile: template = constantes.latex_jinja_env.get_template(os.path.abspath(fichier)) outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail)) # Génération des fichiers Utils for fichier in fichiers_utils: nom_fichier_a_copier = os.path.basename(fichier) with open(os.path.join(os.path.join(tex_file_path,'Utils'),nom_fichier_a_copier),'w') as outfile: template = constantes.latex_jinja_env.get_template(os.path.abspath(fichier)) outfile.write(template.render(date=date,contenu=contenu,tex_file=tex_file,fancyhead=fancyhead,type_ecrit=type_document,short_title=short_title,lycee=lycee,classe=classe,title=title,auteur=auteur,semaine=semaine,liste_noms=liste_noms,td=td,ds_numero=ds_numero,annee=annee,institution=institution,nom_institution=nom_institution,lycee_adresse=lycee_adresse,lycee_complement_adresse=lycee_complement_adresse,auteur_lettre=auteur_lettre,auteur_titre=auteur_titre,auteur_adresse_mail=auteur_adresse_mail)) # Création du dossier de correction avec les fichiers pré-remplis fichiers = glob.glob(os.path.join(nom_fichier,'*')) fichiers = [fichier for fichier in fichiers if 'Utils' not in fichier ] if type_document in constantes.type_document_correction: os.makedirs(os.path.join(nom_fichier,'Correction')) shutil.copytree(os.path.join(nom_fichier,'Utils'),os.path.join(os.path.join(nom_fichier,'Correction'),'Utils')) for fichier in fichiers: shutil.copy(fichier,os.path.join(nom_fichier,'Correction')) click.secho(f"Le dossier LaTeX {nom_fichier} a été crée !", fg="red")