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