---
# System prepended metadata

title: Grade generator

---

# 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 ?