Clarify documentation

This commit is contained in:
Jean-Christophe Dubacq 2024-11-01 16:21:56 +01:00
parent d98be6618c
commit 5f6276ade4
2 changed files with 40 additions and 14 deletions

View File

@ -101,9 +101,25 @@ source venv/bin/activate
Puis
```bash
./get.py [--techno] [--base 2021] dept ...
./get.py [--options] dept ...
```
Il est possible d'utiliser aussi un fichier JSON qui contient soit un tableau associatif avec une clé nommée CLI qui est une liste de chaînes, soit directement une liste de chaînes. Ces chaînes remplacent simplement les arguments de la ligne de commande.
### Options principales
|Option|Défaut|utilisation sommaire|
|------|------|--------------------------------|
| --baseyear,-b |2021| L'année de début de la cohorte |
| --base_techno |Faux| L'effectif principal doit avoir un bac techno|
| --base_women |Faux| L'effectif principal doit être féminin |
| --secondary_techno |Vrai| L'effectif focus doit avoir un bac techno |
| --secondary_women |Faux| L'effectif focus doit être féminin |
| **--optimize** |Oui|Utilise un algorithme pour optimiser l'ordre des paquets en repartant de l'état précédent|
| --reuse |Non| N'optimise pas l'ordre des paquets : réutilise le précédent (si présent)|
| --restart|Non|Utilise un algorithme pour optimiser l'ordre des paquets|
| --loops|300|Nombre d'itérations de l'algorithme|
## FICHIERS
### get.py
@ -112,13 +128,6 @@ C'est l'exécutable. Il prend en argument des acronymes de département (par exe
Il faut un environnement virtuel pour que soient accessibles les bibliothèques Python pycairo, drawsvg, requests. A priori libcairo est optionnel, mais le graphe marchera moins bien sans. La bibliothèque (système) `libcairo2` doit aussi être installée (`apt install libcairo-dev` ou équivalent).
On peut rajouter l'option `--techno` pour n'avoir que les bacs technos.
Liste complète des options :
* `--techno` : ne sélectionne que les bacs technos
* `--base` *year* : prend la cohorte constituée de tous les élèves qui ont touché le S1 ou le S2 dans l'année *year*, le S3 ou le S4 dans l'année *year+1*, et le S5 ou le S6 dans l'année *year+2*.
* *dept1* (acronyme d'un département, suivi éventuellement d'autres acronymes de département) : sélectionne les départements mentionnés. Si aucun département n'est mentionné, donne l'aide.
### redirect.csv
@ -147,13 +156,16 @@ Ce fichier offre la ossibilité de choisir les couleurs pour chacune des catégo
TRANSPARENT,#FFFFFF.0
RED,#000000
### <dept>.json
### <dept>_x_y.json
Ce fichier permet de configurer plus finement le graphique pour le département (ou la combinaison de département, séparés par des `_`) indiqué dans son nom de fichier.
Ce fichier permet de mettre les options autrement que sur la ligne de commande, pour permettre une utilisation plus aisée (notamment en cas d'utilisation d'une autre interface pour générer les options).
Les valeurs `x` et `y` sont basées sur les populations primaires et secondaires.
**Format :** format JSON (utiliser un éditeur qui sait repérer les erreurs de format est recommandé).
**Liste des clés :** à venir.
**Liste des clés :**
* `cli` : liste de chaînes de caractères qui sont des options de la ligne de commande.
### <dept>.svg
@ -161,4 +173,8 @@ Ce fichier est la sortie du programme. C'est un graphique au format SVG, facile
### best-<dept>.json
Ce fichier contient le résultat d'une recherche heuristique pour avoir un graphe visuellement plus satisfaisant. Il peut être supprimé si le graphe ne s'améliore pas par des lancements successifs. Il peut aussi être modifié à la main. C'est essentiellement l'ordre des balises
Ce fichier contient le résultat d'une recherche heuristique pour avoir un graphe visuellement plus satisfaisant. Il peut être supprimé si le graphe ne s'améliore pas par des lancements successifs. Il peut aussi être modifié à la main. C'est essentiellement l'ordre des balises
### cache.json
Un fichier global qui stocke de façon temporaire les données issues de scodoc. Il peut être supprimé sans pertes (sauf de temps).

14
get.py
View File

@ -446,11 +446,21 @@ def cli_check():
json_file = sys.argv[1]
with open(json_file, "r") as f:
fakeclisource = json.load(f)
fakecli = [str(x) for x in fakeclisource]
except FileNotFoundError:
die(f"Error: File '{json_file}' not found.", 1)
except json.JSONDecodeError:
die(f"Error: File '{json_file}' is not valid JSON.", 1)
if (
type(fakeclisource) == dict
and "cli" in fakeclisource
and type(fakeclisource["cli"]) == list
):
fakecli = [str(x) for x in fakeclisource["cli"]]
elif type(fakeclisource) == list:
fakecli = [str(x) for x in fakeclisource]
else:
die(f"Error: File '{json_file}' has no CLI arguments.")
args = parser.parse_args(args=fakecli)
else:
args = parser.parse_args()
@ -1561,7 +1571,7 @@ def ordernodes(layers, orders, edges):
for j, n in enumerate(layernodes):
node_position[n] = j
node_layer[n] = layer
debug("Solution has weight" + str(crossweight(node_position, node_layer, edges)))
debug("Solution has weight " + str(crossweight(node_position, node_layer, edges)))
return node_position, node_layer, newls