# Grade generator
*Language : python*
*Authors : ASM 2022*
Ce générateur a pour objectif de générer des notes à partir d'un fichier de configuration et de tests sous format JSON.
Son utilisation se doit d'être simple et lisible pour le correcteur.
## YAML file config
Le YAML file servira de configuration pour lancer la génération de note.
### Format
Dedans nous préciserons :
- Les "catégories" de tests,
- Le nom des fonctionnalitées testées,
- Le barème donné sur le fichier excel par M. Bouchet,
- Nos coefs par niveau de difficulté.
**Exemple**
```yaml
- test_basics
- test_hello_c : 2
- basic : "mandatory"
intermediate : 0.6
hard : 0.4
- test_hello_id_c : 3
- basic : 0.4
- intermediate : 0.4
- hard : 0.2
```
### Tags et options
Afin de pouvoir moduler les coefficiens de certains tests, et leurs donner plus d'importance, il est possible de donner des valeurs aux parties **Basic**, **Intermediate** et **Hard**.
- Un coef doit se trouver strictement entre 0 et 1.
- La somme des trois parties doit faire 1.
Cependant, il existe le tag **"mandatory"** qui oblige une partie de devoir être validé entièrement pour ne pas avoir 0.
*Dans l'exemple précédent, si un élève ne valide pas 100% des tests basic pour "test_hello_c", alors il aura 0 pour l'ensemble des tests de cette sous partie.*
:::warning
:warning: Ce tag n'est à utiliser **que pour des fonctions de base et triviales** (etc hash_new, is_primary...)
Il peut s'avérer trop puissant, puisqu'il s'applique sur une catégorie **ENTIÈRE**.
Dans le cas d'un où des tests présents dans une catégorie ne sont pas éliminatoires, merci de privilégier l'usage des **coefficients**.
[Si vous avez des avis concernant ce tag, n'hésitez pas.]
:::
## Usage
:::danger
Cette partie risque **d'être modifiée**.
:::
L'utilisation de ce générateur de note se doit d'être simple d'utilisation.
Il prend deux arguments :
- **dir_json_students** : Dossier contenant les traces des étudiants sous format json.
- **config_file.yaml** : Fichier de configuration décrit plus haut.
- **tp_id** : Identifiant du TP (ex : TP5 etc.). Utilisé dans le nommage des dossiers/fichiers.
```shell
42sh$ ./note_generator.py tp_id dir_json_students/ config_file.yaml
```
Un dossier *[tp_id]_student_grades* sera généré et contiendra un fichier par étudiant, nommé *login_grades*, décrivant les notes résultants des tests qu'il a passé.
Format *login_grades* :
```yaml
login - tp_id
test_hello_c : 1/2
[...]
test_hello_id_c : 3/3
result : 19/20
```
------
Création d'un fichier CSV afin de faciliter la création du format excel ?