diff --git a/README.md b/README.md index d35dca5..5cbc0ec 100644 --- a/README.md +++ b/README.md @@ -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 -### .json +### _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. ### .svg @@ -161,4 +173,8 @@ Ce fichier est la sortie du programme. C'est un graphique au format SVG, facile ### best-.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 \ No newline at end of file +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). \ No newline at end of file diff --git a/get.py b/get.py index 885faa7..36ec502 100755 --- a/get.py +++ b/get.py @@ -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