@ -2,40 +2,69 @@ import os
import sys
import sys
from datetime import datetime
from datetime import datetime
import glob
import glob
from sys import argv
from jinja2 import Template
from jinja2 import Template
import shutil
import shutil
import libcurses
from . import constantes_document_latex as constantes
from . import constantes_document_latex as constantes
from . import lib_nettoyage_argv as nettoyage
from . import lib_annee_scolaire as annee_scolaire
from . import lib_annee_scolaire as annee_scolaire
import click
template_dir = constantes . jinja_template_dir
template_dir = constantes . jinja_template_dir
def documentex ( ) :
""" Script permettant de créer un dossier nommé numero_titre-dossier, numero ou titre dans lequel figurent les squelettes des fichiers latex correspondant au type de document demandé.
def validate_dossier ( ctx , param , value ) :
Exemple d ' utilisation :
if os . path . exists ( value ) :
documentex 01 _test td
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 :
- - - - - - - -
if len ( argv ) != 3 :
Aucune . On crée dans le dossier $ dossier tous les fichiers d ' en-tête LaTeX nécessaire en
print ( " usage : numero_nom-fichier type_document " )
fonction du type de document à créer .
quit ( )
if nettoyage . arguments ( argv [ 1 ] ) is None :
Exemple :
print ( " Le format du premier argument doit être de la forme numero_titre-dossier, numero ou titre " )
- - - - - - - - -
quit ( )
documentex 01 _algebre - lineaire td
"""
# Initialisation des variables
# Initialisation des variables
# contenu,tex_file,fancyhead,type_document,short_title,lycee,classe,title,auteur,semaine,liste_noms,td,ds_numero,annee
# 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 " )
date = datetime . now ( ) . strftime ( " % Y- % m- %d " )
nom_fichier = argv [ 1 ]
numero , titre = nettoyage . arguments ( nom_fichier )
numero , nom_fichier = dossier
tex_file = constantes . tex_file # nom du fichier dans lequel on écrit du LaTeX
tex_file = constantes . tex_file # nom du fichier dans lequel on écrit du LaTeX
type_document = argv [ 2 ]
contenu , td , fancyhead , appartenance = constantes . dictionnaire_type_document [ type_document ]
contenu , td , fancyhead , appartenance = constantes . dictionnaire_type_document [ type_document ]
short_title = type_document . upper ( ) + ' ' + numero
short_title = type_document . upper ( ) + ' ' + numero
title , semaine , nom1 , nom2 , nom3 = constantes . initialiser_variables ( ) # c'est moche...
title , semaine , nom1 , nom2 , nom3 = constantes . initialiser_variables ( ) # c'est moche...
auteur = constantes . auteur
auteur = constantes . auteur
annee = annee_scolaire . annee_scolaire ( True )
annee = annee_scolaire . annee_scolaire ( )
institution = constantes . institution
institution = constantes . institution
nom_institution = constantes . nom_institution
nom_institution = constantes . nom_institution
lycee_adresse = constantes . lycee_adresse
lycee_adresse = constantes . lycee_adresse
@ -43,7 +72,6 @@ def documentex():
auteur_lettre = constantes . auteur_lettre
auteur_lettre = constantes . auteur_lettre
auteur_titre = constantes . auteur_titre
auteur_titre = constantes . auteur_titre
auteur_adresse_mail = constantes . auteur_adresse_mail
auteur_adresse_mail = constantes . auteur_adresse_mail
promotion = constantes . promotion
if appartenance :
if appartenance :
classe = constantes . classe_appartenance
classe = constantes . classe_appartenance
@ -55,33 +83,24 @@ def documentex():
# Initialisation des variables suivant le type d'écrit
# Initialisation des variables suivant le type d'écrit
if contenu :
if contenu :
title = libcurses. saisie_message_std ( ' Quel titre long pour ce document ? ' )
title = click. prompt ( " Quel titre long pour ce document ? " )
short_title = libcurses. saisie_message_std ( ' Quel titre court pour ce document ? ' )
short_title = click. prompt ( " Quel titre court pour ce document ? " )
if type_document == ' dm ' :
if type_document == ' dm ' :
short_title + = ' : à rendre pour le '
short_title + = ' : à rendre pour le '
short_title + = libcurses. saisie_message_std ( ' à rendre pour le : ? ' )
short_title + = click. prompt ( ' à rendre pour le : ? ' )
if type_document == ' cr ' :
if type_document == ' cr ' :
lycee = libcurses. saisie_message_std ( ' Quel lycée ? ' )
lycee = click. prompt ( ' Quel lycée ? ' )
classe = libcurses. saisie_message_std ( ' Quelle classe ? ' )
classe = click. prompt ( ' Quelle classe ? ' )
semaine = libcurses. saisie_message_std ( ' Quelle semaine ? ' )
semaine = click. prompt ( ' Quelle semaine ? ' )
nom1 = libcurses. saisie_message_std ( ' Premier candidat ? ' )
nom1 = click. prompt ( ' Premier candidat ? ' )
nom2 = libcurses. saisie_message_std ( ' Deuxième candidat ? ' )
nom2 = click. prompt ( ' Deuxième candidat ? ' )
nom3 = libcurses. saisie_message_std ( ' Troisième candidat ? ' )
nom3 = click. prompt ( ' Troisième candidat ? ' )
if type_document == ' ob ' :
if type_document == ' ob ' :
nom1 = libcurses . saisie_message_std ( ' Nom du candidat ? ' )
nom1 = click . prompt ( ' Nom du candidat ? ' )
os . mkdir ( nom_fichier )
os . mkdir ( os . path . join ( nom_fichier , " Utils " ) )
try :
os . makedirs ( argv [ 1 ] )
except :
continuer = libcurses . saisie_message_std ( ' Le dossier existe déjà ! Continuer ? (o/n) ' )
if continuer != ' o ' :
quit ( )
else :
pass #le dossier existe déjà, on va ré-écrire les fichiers qui s'y trouvent
try :
os . makedirs ( os . path . join ( argv [ 1 ] , ' Utils ' ) )
except :
pass #le dossier existe déjà, on va ré-écrire les fichiers qui s'y trouvent
liste_noms = [ nom1 ,
liste_noms = [ nom1 ,
nom2 ,
nom2 ,
nom3 ,
nom3 ,
@ -102,22 +121,22 @@ def documentex():
# Génération des fichiers de base
# Génération des fichiers de base
for fichier in fichiers :
for fichier in fichiers :
nom_fichier = os . path . basename ( fichier )
nom_fichier _a_copier = os . path . basename ( fichier )
with open ( os . path . join ( tex_file_path , nom_fichier ) , ' w ' ) as outfile :
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 ) )
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 ,promotion = promotion ))
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
# Génération des fichiers Utils
for fichier in fichiers_utils :
for fichier in fichiers_utils :
nom_fichier = os . path . basename ( fichier )
nom_fichier _a_copier = os . path . basename ( fichier )
with open ( os . path . join ( os . path . join ( tex_file_path , ' Utils ' ) , nom_fichier ) , ' w ' ) as outfile :
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 ) )
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 ,promotion = promotion ))
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
# Création du dossier de correction avec les fichiers pré-remplis
fichiers = glob . glob ( os . path . join ( argv[ 1 ] , ' * ' ) )
fichiers = glob . glob ( os . path . join ( nom_fichier , ' * ' ) )
fichiers = [ fichier for fichier in fichiers if ' Utils ' not in fichier ]
fichiers = [ fichier for fichier in fichiers if ' Utils ' not in fichier ]
if type_document in constantes . type_document_correction :
if type_document in constantes . type_document_correction :
os . makedirs ( os . path . join ( argv[ 1 ] , ' Correction ' ) )
os . makedirs ( os . path . join ( nom_fichier , ' Correction ' ) )
shutil . copytree ( os . path . join ( argv[ 1 ] , ' Utils ' ) , os . path . join ( os . path . join ( argv[ 1 ] , ' Correction ' ) , ' Utils ' ) )
shutil . copytree ( os . path . join ( nom_fichier , ' Utils ' ) , os . path . join ( os . path . join ( nom_fichier , ' Correction ' ) , ' Utils ' ) )
for fichier in fichiers :
for fichier in fichiers :
shutil . copy ( fichier , os . path . join ( argv[ 1 ] , ' Correction ' ) )
shutil . copy ( fichier , os . path . join ( nom_fichier , ' Correction ' ) )