You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

232 lines
8.6 KiB
Python

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")