From 4f63eb89510a3a0ee944ef55f21e84b8921c020d Mon Sep 17 00:00:00 2001 From: viennet Date: Tue, 14 Sep 2021 12:31:16 +0200 Subject: [PATCH] infos sur ScoDoc 9 --- docs/GuideConfig.md | 126 ++++- docs/GuideDeveloppeurs.md | 8 +- docs/GuideInstallDebian11.md | 9 + docs/MigrationScoDoc7a9.md | 8 +- docs/PreferencesScoDoc.md | 29 +- docs/ScoDoc9API.md | 945 +++++++++++++++++++++++++++++++++++ docs/ScoDocAPI.md | 2 +- 7 files changed, 1104 insertions(+), 23 deletions(-) create mode 100644 docs/ScoDoc9API.md diff --git a/docs/GuideConfig.md b/docs/GuideConfig.md index d499418ad..cc6e6e279 100644 --- a/docs/GuideConfig.md +++ b/docs/GuideConfig.md @@ -17,7 +17,7 @@ départements. Le reste des paramétrages (création de comptes, de formations, d'étudiants, etc) se fait à partir du logiciel (web). L'administration se fait dans un terminal connecté au serveur (en général via -ssh), en tant qu'utilisateur `scodoc` (et non `root`). +ssh), en tant qu'utilisateur `scodoc` (*et non* `root`). Se connecter et initialiser la session ainsi: @@ -29,6 +29,8 @@ Se connecter et initialiser la session ainsi: source venv/bin/activate Après quoi, vous pouvez utiliser les commandes décrites ci-dessous. +*Attention: le lancement de chaque commande est assez long (quelques secondes) +car toute l'application scodoc est initialisée à chaque fois.* ## Création d'un département @@ -45,8 +47,8 @@ immédiatement après la création. flask delete-dept DEPT ## Création d'un utilisateur -Cette opération s'effectue en général depuyis le logiciel, via un formulaire -ou un import excel. Depuis la consoile, faire: +Cette opération s'effectue en général depuis le logiciel, via un formulaire +ou un import excel. Pour créer un utilisateur depuis le terminal, lancer: flask user-create LOGIN ROLE DEPT @@ -72,6 +74,21 @@ console: où `LOGIN` est le pseudo de l'utilisateur. Le mot de passe est demandé sur la ligne de commande. +## Création d'un nouveau rôle + + flask create-role role_name [permissions...] + +Exemple: création d'une rôle "Observateur" ayant juste la persmision de "voir": + + flask create-role Observateur ScoView + +## Édition d'un rôle (ajout/retrait permissions) + + flask edit-role [-a permission] [-r permission] role_name + +Ajoute ou retire une permission. + + ## Migration des données de ScoDoc 7 Les données dans ScoDoc 9 ayant un format et une organisation très différents de ScoDoc 7, une étape de conversion (migration) est nécessaire. Elle est automatique @@ -79,7 +96,9 @@ mais prends du temps. Se reporter à [MigrationScoDoc7a9](MigrationScoDoc7a9.md) -Au besoin (cas rare), utiliser les commandes ci-dessous. +Ces commandes sont utilisées par le script de migration de ScoDoc 7 à ScoDoc 9. +*Ne pas utiliser sauf si vous savez vraiment ce que vous faites.* + ### Comptes utilisateurs Toujours migrer les comptes utilisateurs avant d'importer les @@ -88,7 +107,6 @@ départements. flask import-scodoc7-users ### Départements - Pour migrer un seul département: flask import-scodoc7-dept DEPT DBNAME @@ -97,6 +115,92 @@ Exemple: flask import-scodoc7-dept InfoComm DBINFOCOMM +## Liste des commandes Flask/ScoDoc +``` +Commands: + clear-cache Clear ScoDoc cache (currently Redis) + create-dept Create new departement + delete-dept Delete existing departement + edit-role Add [-a] and/or remove [-r] a permission to/from a role + import-scodoc7-dept Import département ScoDoc 7 + import-scodoc7-users Import users defined in ScoDoc7 postgresql + sco-db-init Initialize the database. + user-create Create a new user + user-db-clear Erase all users and roles from the database ! + user-password Set (or change) user's password + +Usage: app sco-db-init [OPTIONS] + + Initialize the database. Starts from an existing database and create all the + necessary SQL tables and functions. + +Usage: app user-db-clear [OPTIONS] + + Erase all users and roles from the database ! + +Usage: app user-create [OPTIONS] USERNAME ROLE DEPT + + Create a new user + +Options: + -n, --nom TEXT + -p, --prenom TEXT + + +Usage: app user-password [OPTIONS] USERNAME + + Set (or change) user's password + +Options: + --password TEXT + + +Usage: app edit-role [OPTIONS] ROLENAME + + Add [-a] and/or remove [-r] a permission to/from a role. In ScoDoc, + permissions are not associated to users but to roles. Each user has a set of + roles in each departement. + + Example: `flask edit-role -a ScoEditApo Ens` + +Options: + -a, --add TEXT + -r, --remove TEXT + + +Usage: app delete-dept DEPT + + Delete existing departement + + +Usage: app create-dept DEPT + + Create new departement + + +Usage: app import-scodoc7-users + + Import used defined in ScoDoc7 postgresql database into ScoDoc 9 The old + database SCOUSERS must be alive and readable by the current user. This + script is typically run as unix user "scodoc". The original SCOUSERS + database is left unmodified. + + +Usage: app import-scodoc7-dept DEPT DEPT_DB_NAME + + Import département ScoDoc 7: dept: InfoComm, dept_db_name: SCOINFOCOMM + + +Usage: app clear-cache + + Clear ScoDoc cache This cache (currently Redis) is persistent between + invocation and it may be necessary to clear it during development or tests. + +Options: + --help Show this message and exit. +``` + + ## Changement des logos apparaissant sur les documents @@ -112,18 +216,24 @@ dans le répertoire avec les noms `logo_header.jpg` (habituellement le logo de votre composante) et `logo_footer.jpg` (habituellement le logo de votre université ou école). -Ensuite, éditez le fichier +On peut fournir des logos par département en créant des sous-répertoires + + /opt/scodoc-data/config/logos/logo_/ + +pour y placer les fichiers images `logo_header.jpg` et `logo_footer.jpg`. + + Enfin, redémarrez ScoDoc après avoir vidé les caches: flask clear-cache - systemctl restart scodoc9 + sudo systemctl restart scodoc9 # Utilisation via le Web diff --git a/docs/GuideDeveloppeurs.md b/docs/GuideDeveloppeurs.md index f460cb82a..b39c4b698 100644 --- a/docs/GuideDeveloppeurs.md +++ b/docs/GuideDeveloppeurs.md @@ -17,7 +17,7 @@ Informations pour les développeurs souhaitant étendre ou modifier ScoDoc. ## Développer sur ScoDoc -Quelques conseils, indications et mémos pour les développeurs sur ScoDoc version 7.x et 8. +Quelques conseils, indications et mémos pour les développeurs sur ScoDoc version 9. ### Installation d'un serveur de développement [Quelques conseils mouvants pour configurer votre serveur de développement](ConseilServeurDev.md) @@ -26,7 +26,8 @@ Quelques conseils, indications et mémos pour les développeurs sur ScoDoc versi L'ancienneté de la base de code a rendu le style un peu incohérent, mais cela s'améliore avec ScoDoc 9 (respect PEP 8). -Le code doit être formatté avec [`black`](https://black.readthedocs.io/) avant tout commit (configurez votre éditeur pour appeler `black` à l'enregistrement). +Le code doit être formatté avec [`black`](https://black.readthedocs.io/) avant +tout commit (configurez votre éditeur pour appeler `black` à l'enregistrement). #### Documentation On adoptera le style "Google": @@ -57,7 +58,8 @@ Exemple: Le dépot est -La branche `master` est celle de ScoDoc 9 (pas encore en production). La branche `Scodoc7` est l'ancienne (actuelle jusqu'à septembre 2021) en production. +La branche `master` est celle de ScoDoc 9 (pas encore en production). La branche +`Scodoc7` est l'ancienne (actuelle jusqu'à septembre 2021) en production. Ci-dessous quelques pense-bête qui peuvent servir. #### Hot fixes (internes) diff --git a/docs/GuideInstallDebian11.md b/docs/GuideInstallDebian11.md index 6038904cc..67ec3ef6e 100644 --- a/docs/GuideInstallDebian11.md +++ b/docs/GuideInstallDebian11.md @@ -127,6 +127,15 @@ ou le créer contenant juste cette ligne: - Installer le logiciel: apt-get update + apt-get install nginx + + S'assurer que le logiciel `nginx`s'est bien installé. En cas de problème se + référer à sa doc (par exemple, si + [votre serveur ne supporte pas + IPv6](https://techglimpse.com/nginx-error-address-family-solution/)). + + Ensuite: + apt-get install scodoc9 Notez que l'installation du paquet `scodoc9` va créer automatiquement un diff --git a/docs/MigrationScoDoc7a9.md b/docs/MigrationScoDoc7a9.md index eb88e7b6e..a1bf667ad 100644 --- a/docs/MigrationScoDoc7a9.md +++ b/docs/MigrationScoDoc7a9.md @@ -24,13 +24,13 @@ Dans ce cas, la migration va se faire en suivant les étapes: Installer le nouveau serveur avec Debian 11 et ScoDoc 9. -Voir https://scodoc.org/GuideInstallDebian11 +Voir [GuideInstallDebian11](GuideInstallDebian11.md). Vérifier que tout fonctionne avant d'aller plus loin. ### Étape 2: Sauvegarder les données du serveur ScoDoc 7 -Se connecter en tant que `root`sur l'ancien serveur ScoDoc 7. +Ouvrir un terminal en tant que `root`sur l'ancien serveur ScoDoc 7. cd /opt/scodoc/Products/ScoDoc/config # Mise à jour indispensable pour avoir le script de migration @@ -176,8 +176,8 @@ ou accentués dans les logins. ### 5. Vérifier que tout fonctionne -Vos départements et utiisateurs devraient être accessibles. -L'utilisateur àdmin`créé à l'installation de ScoDoc 9 doit avoir accès à tout. +Vos départements et utilisateurs devraient être accessibles. +L'utilisateur `admin` créé à l'installation de ScoDoc 9 doit avoir accès à tout. Vérifiez que les semestres, étudiants, photos, archives et comptes utilisateurs sont bien là. diff --git a/docs/PreferencesScoDoc.md b/docs/PreferencesScoDoc.md index 7c3879003..cc91f6a72 100644 --- a/docs/PreferencesScoDoc.md +++ b/docs/PreferencesScoDoc.md @@ -1,23 +1,37 @@ ## Préférences -Les préférences sont des paramètres stockés dans la base de données d'un département. Les préférences s'appliquent à tout un département (tous les semestres), ou bien à un semestre particulier. Chaque département a son propre jeu de préférences (c'est parfois regrettable, car certaines préférences concernent tout l'établissement). +Les préférences sont des paramètres stockés dans la base de données d'un +département. Les préférences s'appliquent à tout un département (tous les +semestres), ou bien à un semestre particulier. Chaque département a son propre +jeu de préférences (c'est parfois regrettable, car certaines préférences +concernent tout l'établissement). -Si un semestre ne défini pas de valeur pour un paramètre (eg marge, police, paramétrage du bulletin de notes...), ScoDoc utilisera les préférences globales pour le département. +Si un semestre ne défini pas de valeur pour un paramètre (eg marge, police, +paramétrage du bulletin de notes...), ScoDoc utilisera les préférences globales +pour le département. Donc: - * Pour affecter tous les semestres sauf ceux qui ont dit autrement: suivre le lien "Paramétrage" dans la marge gauche (visible uniquement si vous en avez la permission). + * Pour affecter tous les semestres sauf ceux qui ont dit autrement: suivre le + lien "Paramétrage" dans la marge gauche (visible uniquement si vous en avez + la permission). - * Pour affecter seulement un semestre: menu "Semestre", "Réglages bulletins" ou "Préférences du semestre". + * Pour affecter seulement un semestre: menu "Semestre", "Réglages bulletins" ou + "Préférences du semestre". -On accède aux préférences via le lien "Paramétrage", qui est présent dans la marge gauche seulement si l'on a le droit de modifier les préférences (la permission `Sco Change Preferences`, normalement associée au rôle `Admin` possédé par chef du département, voir [ConfigPermissions](ConfigPermissions.md)). +On accède aux préférences via le lien "Paramétrage", qui est présent dans la +marge gauche seulement si l'on a le droit de modifier les préférences (la +permission `Sco Change Preferences`, normalement associée au rôle `Admin` +possédé par chef du département, voir +[ConfigPermissions](ConfigPermissions.md)). On distingue plusieurs groupes de préférences: * Générales: nom de l'Université, du directeur, etc... - * Absences: alarmes si beaucoup d'absences, statut des samedis... (voir détails sur [GestionAbsences](GestionAbsences.md)) + * Absences: alarmes si beaucoup d'absences, statut des samedis... (voir détails + sur [GestionAbsences](GestionAbsences.md)) * Liaison avec le portail: URL du portail, code du département, ... @@ -28,5 +42,6 @@ On distingue plusieurs groupes de préférences: Voir la liste des préférences sur la page [NomsPreferences](NomsPreferences.md). -Note: les préférences et leurs valeurs par défaut sont définies dans le fichier `sco_preferences.py`. +Note pour les développeurs: les préférences et leurs valeurs par défaut sont +définies dans le fichier `sco_preferences.py`. diff --git a/docs/ScoDoc9API.md b/docs/ScoDoc9API.md new file mode 100644 index 000000000..6639113ae --- /dev/null +++ b/docs/ScoDoc9API.md @@ -0,0 +1,945 @@ + +# API pour ScoDoc 9 +L'API ScoDoc permet à des applications tierces d'interroger ScoDoc. Elle offre un accès aux informations aux formats XML et JSON. + +La version ScoDoc 9 a introduit une nouvelle API avec un nouveau mécanisme d'authentification. +**Les clients de l'ancienne API ScoDoc 7 doivent être adaptés pour fonctionner avec ScoDoc 9.** + +Cette API est encore incomplète: n'hésitez pas à demander de nouveaux accès en écrivant à la liste de diffusion. + +L'API fournit des données JSON, sauf exception (bulletins). + +Les objets ScoDoc manipulables sont identifiés par des id: + + * etudid: étudiant + * formation_id: un programme de formation (page "programmes"); + * ue_id: une UE dans un programme; + * matiere_id: une matière dans un programme; + * module_id: un module dans un programme. + * formsmestre_id: un "semestre" de formation. + + +L'URL complète est de la forme: `https://scodoc.example.com/ScoDoc/api/fonction + +# Fonctions de l'API ScoDoc 7 portées en ScoDoc 9 + +Afin de garantir l'interopérabilité avec les clients ScoDoc 7 (ENT, etc), les +fonctions suivantes sont disponibles avec le mécanisme d'authentification +basique de ScoDoc 7. Elles sont considérées comme *obsolètes* ("deprecated") et +disparaitront en juillet 2022. + +Certaines ont plusieurs "routes" (URl), car ScoDoc 7 tolérait divers accès. + + - `Absences/XMLgetBilletsEtud` + - `Absences/listeBillets` + - `Absences/XMLgetAbsEtud` + - `Notes/formsemestre_list` + - `Notes/formsemestre_bulletinetud` + - `Notes/XMLgetFormsemestres` + - `etud_info` ou `XMLgetEtudInfos` ou `Absences/XMLgetEtudInfos` ou `Notes/XMLgetEtudInfos` + +les routes ci-dessus s'entendent à partir de l'URL de base de votre ScoDoc, c'est +à dire `https://votre.site.fr/ScoDoc//Scolarite/`, et répondent en GET et +en POST. + + +# XXX à rédiger XXX Fonctions d'accès aux données +## Départements + * **`list_depts`** + * Paramètres: `viewable` (optionnel, si faux liste aussi les départements non accessible à l'utilisateur courant), `format` (json, xml) + * Résultat: liste des id de départements. + +## Programmes de formations + * **`formation_list`** + * Paramètres: `formation_id` (optionnel, si absent liste toutes les formations) + * Résultat: liste de formations. + + * **`formation_export`** + * Paramètres: `formation_id`, `export_ids` (défaut "faux") + * Résultat: la formation, avec UE, matières, modules (un arbre). + + +## Semestres de formation +Les sessions de formation (dénommées "semestres" même si elles durent une année ou un mois) sont représentées par les `formsemestre`. + + * **`formsemestre_list`** + * Paramètres (tous optionnels): `formsemestre_id`, `formation_id`, `etape_apo`, `etape_apo2` + * Résultat: liste des semestres correspondant. + * Exemple: `formsemestre_list?format=xml&etape_apo=V1RT` + +Note sur les identifiants de sessions: le `session_id` peut être utilisé pour identifier de façon prévisible et (presque) unique une session dans un établissement, ce qui est utile notamment pour interfacer ScoDoc à d'autres logiciels (eg gestion d'emplois du temps ou de services d'enseignement). Cet identifiant est constitué des informations suivantes: + + * Département (RT, GEII, INFO...) (= paramètre `DeptName`, en majuscules) + * Nom parcours: DUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME) + * Modalité: FI, FC, FA + * "Spécialité" : S1 (ou S1D pour les sem. décalés), ou le `code_specialite` si pas de semestres. Le code spécialité est un champ (libre) nouveau dans la "formation" (programme pédagogique). + * Année: année de début de l'année scolaire correspondante (eg 2014 pour une session appartenant à l'année scolaire 2014-2015, même si elle commence en mars 2015). + +Exemple: `INFO-DUT-FI-S1-2014` : semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) + + + + +## Groupes et partitions +L'ensemble des étudiants d'un semestre peut être réparti selon une ou plusieurs partitions (types de groupes). Chaque partition est constituée d'un nombre quelconque de groupes d'étudiants. + + * **`formsemestre_partition_list`** + * Paramètres: `formsemestre_id` + * Résultat: + * Exemple: ici au format JSON +``` +[ + { + "formsemestre_id": "SEM12781", + "partition_id": "P23840", + "partition_name": "TD" + "group": [ + { + "formsemestre_id": "SEM12781", + "partition_id": "P23840", + "group_name": "A", + "group_id": "G23841", + "partition_name": "TD" + }, + { + "formsemestre_id": "SEM12781", + "partition_id": "P23840", + "group_name": "B", + "group_id": "G23843", + "partition_name": "TD" + }, + ], + }, + { + "formsemestre_id": "SEM12781", + "partition_id": "P23941", + "partition_name": "TP" + "group": [ + { + "formsemestre_id": "SEM12781", + "partition_id": "P23941", + "group_name": "A1", + "group_id": "G23942", + "partition_name": "TP" + }, + { + "formsemestre_id": "SEM12781", + "partition_id": "P23941", + "group_name": "A2", + "group_id": "G23943", + "partition_name": "TP" + }, + ], + }, + { + "formsemestre_id": "SEM12781", + "partition_id": "P22833", + "partition_name": null + "group": [ + { + "formsemestre_id": "SEM12781", + "partition_id": "P22833", + "group_name": null, + "group_id": "G22834", + "partition_name": null + } + ], + } +] +``` + * **`groups_view`** + * Paramètres: `formsemestre_id `ou `group_ids` (peut être répété), `with_codes=0|1`, `all_groups=0|1`, `etat=None|I` + * Résultat: liste des étudiants dans un groupe. + * Exemple: ici au format XML avec `with_codes=1`: +``` + + + + + + + + + + + + + + + + + + + + + + +``` +Et un autre exemple en format JSON: +``` +[ + { + "etat":"I", + "emailperso":null, + "prenom":"Dalil", + "nom_disp":"CLINTO", + "email":"xxx@example.com", + "P62029":"A", + "P62032":null, + "P62031":"G1", + "P62030":"A1" + }, + { + "etat":"I", + "emailperso":null, + "prenom":"Georges", + "nom_disp":"BUSH", + "email":"bush@example.com", + "P62029":"A", + "P62032":null, + "P62031":"G1", + "P62030":"A1" + }, + ... +] +``` + + +## Etudiants + * **`etud_info`** + * Paramètres: `etudid` ou `code_nip` ou `code_ine` + * Résultat: informations sur cette étudiant et les semestres dans lesquels il est (ou a été) inscrit. + * Exemple: `etud_info?format=json&etudid=12345` +``` +{ + "nom": "Mutis", + "sexe": "M.", + "email": "alvaro.mutis@example.com", + "prenom": "ALVARO", + "nomprenom": "M. Alvaro MUTIS", + "insemestre": [ + { + "etat": "I", + "formsemestre_id": "SEM12781", + "date_fin": "2010-07-30", + "date_debut": "2010-01-25" + }, + { + "etat": "I", + "formsemestre_id": "SEM8396", + "date_fin": "2009-01-16", + "date_debut": "2008-09-01" + } + ], + "code_ine": "", + "etudid": "EID8768", + "code_nip": "10991002", + "photo_url": "/ScoDoc/static/photos/F13/RT_EID8768.h90.jpg", + + "domicile": "2 Rue Madame", + "villedomicile": "Paris", + "telephonemobile": "" + "fax": "", + + "annee_bac": "2010", + "bac": "S", + "specialite": "SCIENTIFIQUE", + + "nomlycee": "", + "villelycee": "", + "codelycee": "0950650R", + "codepostallycee": "", + +} +``` + + + +## Bulletins de notes + * **`Notes/formsemestre_bulletinetud`** + * Paramètres: `formsemestre_id`, `etudid`, `format` (`xml`ou `json`), `version` (`short`, `selectedevals`ou `long`) + * Résultat: bulletin de notes + * Exemple: ici au format JSON, pour une version courte (`version=short`) +``` +{ + "rang": { + "ninscrits": 52, + "value": "1" + }, + "etape_apo2": "", + "etape_apo3": "", + "etape_apo4": "", + "etudiant": { + "nom": "BOLANO", + "prenom": "Roberto", + "sexe": "M.", + "code_ine": "", + "etudid": "EID9860", + "code_nip": "123456789", + "email": "roberto@santateresa.mx", + "photo_url": "\/ScoDoc\/static\/photos\/F68\/RT_EID29960.h90.jpg" + }, + "bonus_sport_culture": { + "value": 0 + }, + "absences": { + "nbabsjust": 0, + "nbabs": 1 + }, + "decision": { + "etat": "I", + "code": "ADM", + "compense_formsemestre_id" : "SEM12345" /* si ce semestre en compense un autre */ + }, + "note": { + "max": "15.51", + "moy": "10.80", + "value": "15.51", + "min": "07.29" + }, + "etudid": "EID9860", + "decision_ue": [ + { + "acronyme": "UE11", + "code": "ADM", + "ects": "16.0", + "titre": "D\u00e9couverte m\u00e9tiers", + "numero": "11", + "ue_id": "UE21456" + }, + { + "acronyme": "UE12", + "code": "ADM", + "ects": "14.0", + "titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques", + "numero": "12", + "ue_id": "UE21478" + } + ], + "ue_capitalisee": [ + + ], + "publie": 1, + "autorisation_inscription": [ + { + "semestre_id": 2 + } + ], + "appreciation": [ + + ], + "note_max": { + "value": 20 + }, + "date": "2014-07-12T17:38:47.693262", + "rang_group": [ + { + "ninscrits": 26, + "value": "1", + "group_type": "TD", + "group_name": "B" + }, + { + "ninscrits": 13, + "value": "1", + "group_type": "TP", + "group_name": "B1" + }, + { + "ninscrits": 4, + "value": "1", + "group_type": "G", + "group_name": "G4" + }, + { + "ninscrits": "", + "value": "", + "group_type": "tutorat", + "group_name": "" + }, + { + "ninscrits": "", + "value": "", + "group_type": "App", + "group_name": "" + }, + { + "ninscrits": "", + "value": "", + "group_type": "sport", + "group_name": "" + } + ], + "formsemestre_id": "SEM12345", + "etape_apo": "V1RT", + "ue": [ + { + "acronyme": "UE11", + "rang": "1", + "code_apogee": "VRTU11", + "ects": "16", + "numero": "11", + "note": { + "max": "16.17", + "value": "16.17", + "min": "06.56" + }, + "module": [ + { + "coefficient": 3, + "rang": { + "value": "1" + }, + "code": "M1101", + "code_apogee": "VRT1101", + "numero": 1101, + "note": { + "moy": "08.94", + "nb_notes": 51, + "nb_missing": 0, + "max": "19.18", + "min": "03.70", + "nb_valid_evals": 3, + "value": "19.18" + }, + "abbrev": "R\u00e9seaux d'entreprises", + "effectif": { + "value": 51 + }, + "titre": "Initiation aux r\u00e9seaux d'entreprises", + "evaluation": [ + + ], + "id": "MIP27427" + }, + { + "coefficient": 2, + "rang": { + "value": "2" + }, + "code": "M1102", + "code_apogee": "VRT1102", + "numero": 1102, + "note": { + "moy": "12.58", + "nb_notes": 50, + "nb_missing": 1, + "max": "16.79", + "min": "02.50", + "nb_valid_evals": 2, + "value": "16.50" + }, + "abbrev": "Initiation \u00e0 la t\u00e9l\u00e9phonie", + "effectif": { + "value": 51 + }, + "titre": "Initiation \u00e0 la t\u00e9l\u00e9phonie d'entreprise", + "evaluation": [ + + ], + "id": "MIP27437" + }, + { + "coefficient": 1.5, + "rang": { + "value": "1" + }, + "code": "M1103", + "code_apogee": "VRT1103", + "numero": 1103, + "note": { + "moy": "08.26", + "nb_notes": 51, + "nb_missing": 0, + "max": "13.41", + "min": "00.94", + "nb_valid_evals": 2, + "value": "13.41" + }, + "abbrev": "Architecture des \u00e9quipements informatiques", + "effectif": { + "value": 51 + }, + "titre": "Architecture des \u00e9quipements informatiques", + "evaluation": [ + + ], + "id": "MIP27451" + }, + { + "coefficient": 2, + "rang": { + "value": "1" + }, + "code": "M1104", + "code_apogee": "VRT1104", + "numero": 1104, + "note": { + "moy": "10.77", + "nb_notes": 51, + "nb_missing": 0, + "max": "17.90", + "min": "04.63", + "nb_valid_evals": 3, + "value": "17.90" + }, + "abbrev": "Principe et architecture des r\u00e9seaux", + "effectif": { + "value": 51 + }, + "titre": "Principe et architecture des r\u00e9seaux", + "evaluation": [ + + ], + "id": "MIP27431" + }, + { + "coefficient": 2, + "rang": { + "value": "1" + }, + "code": "M1105", + "code_apogee": "VRT1105", + "numero": 1105, + "note": { + "moy": "11.00", + "nb_notes": 51, + "nb_missing": 0, + "max": "17.83", + "min": "04.98", + "nb_valid_evals": 2, + "value": "17.83" + }, + "abbrev": "Bases des syst\u00e8mes d'exploitation", + "effectif": { + "value": 51 + }, + "titre": "Bases des syst\u00e8mes d'exploitation", + "evaluation": [ + + ], + "id": "MIP27433" + }, + { + "coefficient": 1.5, + "rang": { + "value": "6" + }, + "code": "M1106", + "code_apogee": "VRT1106", + "numero": 1106, + "note": { + "moy": "13.05", + "nb_notes": 51, + "nb_missing": 0, + "max": "17.79", + "min": "07.08", + "nb_valid_evals": 1, + "value": "16.25" + }, + "abbrev": "Initiation au d\u00e9veloppement Web", + "effectif": { + "value": 51 + }, + "titre": "Initiation au d\u00e9veloppement Web", + "evaluation": [ + + ], + "id": "MIP27449" + }, + { + "coefficient": 1.5, + "rang": { + "value": "9" + }, + "code": "M1107", + "code_apogee": "VRT1107", + "numero": 1107, + "note": { + "moy": "09.36", + "nb_notes": 51, + "nb_missing": 0, + "max": "14.21", + "min": "04.17", + "nb_valid_evals": 3, + "value": "11.66" + }, + "abbrev": "Initiation \u00e0 la mesure du signal", + "effectif": { + "value": 51 + }, + "titre": "Initiation \u00e0 la mesure du signal", + "evaluation": [ + + ], + "id": "MIP27440" + }, + { + "coefficient": 1.5, + "rang": { + "value": "7" + }, + "code": "M1108", + "code_apogee": "VRT1108", + "numero": 1108, + "note": { + "moy": "10.49", + "nb_notes": 51, + "nb_missing": 0, + "max": "16.31", + "min": "05.39", + "nb_valid_evals": 4, + "value": "13.22" + }, + "abbrev": "Acquisition et codage de l'information", + "effectif": { + "value": 51 + }, + "titre": "Acquisition et codage de l'information", + "evaluation": [ + + ], + "id": "MIP27453" + }, + { + "coefficient": 1, + "rang": { + "value": "4 ex" + }, + "code": "M1109", + "code_apogee": "VRT1109", + "numero": 1109, + "note": { + "moy": "12.46", + "nb_notes": 51, + "nb_missing": 0, + "max": "16.00", + "min": "09.00", + "nb_valid_evals": 1, + "value": "15.00" + }, + "abbrev": "PT : Recherche documentaire", + "effectif": { + "value": 51 + }, + "titre": "PT : Recherche documentaire", + "evaluation": [ + + ], + "id": "MIP27444" + } + ], + "effectif": "51", + "titre": "D\u00e9couverte m\u00e9tiers", + "id": "UE21456" + }, + { + "acronyme": "UE12", + "rang": "5", + "code_apogee": "VRTU12", + "ects": "14", + "numero": "12", + "note": { + "max": "15.20", + "value": "14.63", + "min": "07.94" + }, + "module": [ + { + "coefficient": 2, + "rang": { + "value": "3 ex" + }, + "code": "M1201", + "code_apogee": "VRT1201", + "numero": 10, + "note": { + "moy": "13.02", + "nb_notes": 51, + "nb_missing": 0, + "max": "16.00", + "min": "10.00", + "nb_valid_evals": 1, + "value": "14.00" + }, + "abbrev": "Anglais", + "effectif": { + "value": 51 + }, + "titre": "Anglais g\u00e9n\u00e9ral de communication et initiation au vocabulaire technique", + "evaluation": [ + + ], + "id": "MIP27430" + }, + { + "coefficient": 2, + "rang": { + "value": "16 ex" + }, + "code": "M1202", + "code_apogee": "VRT1202", + "numero": 20, + "note": { + "moy": "12.74", + "nb_notes": 51, + "nb_missing": 0, + "max": "17.75", + "min": "04.00", + "nb_valid_evals": 2, + "value": "14.00" + }, + "abbrev": "Expression", + "effectif": { + "value": 51 + }, + "titre": "EC: \u00c9l\u00e9ments fondamentaux de la communication", + "evaluation": [ + + ], + "id": "MIP27439" + }, + { + "coefficient": 1, + "rang": { + "value": "1 ex" + }, + "code": "M1203", + "code_apogee": "VRT1203", + "numero": 30, + "note": { + "moy": "NA", + "nb_notes": 0, + "nb_missing": 51, + "max": "-", + "min": "-", + "nb_valid_evals": 0, + "value": "-" + }, + "abbrev": "PPP: Connaitre son champ d'activit\u00e9", + "effectif": { + "value": 51 + }, + "titre": "PPP: Connaitre son champ d'activit\u00e9", + "evaluation": [ + + ], + "id": "MIP27436" + }, + { + "coefficient": 2, + "rang": { + "value": "6" + }, + "code": "M1204", + "code_apogee": "VRT1204", + "numero": 40, + "note": { + "moy": "10.66", + "nb_notes": 51, + "nb_missing": 0, + "max": "16.35", + "min": "05.73", + "nb_valid_evals": 8, + "value": "14.09" + }, + "abbrev": "Mise \u00e0 niveau en num\u00e9ration et calculs", + "effectif": { + "value": 51 + }, + "titre": "Mise \u00e0 niveau en num\u00e9ration et calculs", + "evaluation": [ + + ], + "id": "MIP27454" + }, + { + "coefficient": 2, + "rang": { + "value": "23" + }, + "code": "M1205", + "code_apogee": "VRT1205", + "numero": 50, + "note": { + "moy": "10.37", + "nb_notes": 51, + "nb_missing": 0, + "max": "18.69", + "min": "05.01", + "nb_valid_evals": 5, + "value": "10.58" + }, + "abbrev": "Connaissances et Outils pour le signal", + "effectif": { + "value": 51 + }, + "titre": "Harmonisation des connaissances et des outils pour le signal", + "evaluation": [ + + ], + "id": "MIP27432" + }, + { + "coefficient": 2, + "rang": { + "value": "3 ex" + }, + "code": "M1206", + "code_apogee": "VRT1206", + "numero": 60, + "note": { + "moy": "11.22", + "nb_notes": 51, + "nb_missing": 0, + "max": "16.76", + "min": "03.91", + "nb_valid_evals": 6, + "value": "15.12" + }, + "abbrev": "Circuits \u00e9lectroniques : mise \u00e0 niveau", + "effectif": { + "value": 51 + }, + "titre": "Circuits \u00e9lectroniques : mise \u00e0 niveau", + "evaluation": [ + + ], + "id": "MIP27435" + }, + { + "coefficient": 2, + "rang": { + "value": "1 ex" + }, + "code": "M1207", + "code_apogee": "VRT1207", + "numero": 70, + "note": { + "moy": "08.39", + "nb_notes": 51, + "nb_missing": 0, + "max": "20.00", + "min": "00.00", + "nb_valid_evals": 1, + "value": "20.00" + }, + "abbrev": "Programmation 1", + "effectif": { + "value": 51 + }, + "titre": "Bases de la programmation", + "evaluation": [ + + ], + "id": "MIP27445" + }, + { + "coefficient": 1, + "rang": { + "value": "1 ex" + }, + "code": "M1208", + "code_apogee": "VRT1208", + "numero": 80, + "note": { + "moy": "NA", + "nb_notes": 0, + "nb_missing": 51, + "max": "-", + "min": "-", + "nb_valid_evals": 0, + "value": "-" + }, + "abbrev": "M\u00e9thodologie Universitaire 1", + "effectif": { + "value": 51 + }, + "titre": "Adaptation et m\u00e9thodologie pour la r\u00e9ussite Universitaire", + "evaluation": [ + + ], + "id": "MIP27434" + } + ], + "effectif": "51", + "titre": "Mise \u00e0 niveau des comp\u00e9tences transversales et scientifiques", + "id": "UE21478" + }, + { + "acronyme": "UE 1S", + "rang": "1 ex", + "code_apogee": "", + "ects": "0", + "numero": "13", + "note": { + "max": "00.00", + "value": "00.00", + "min": "00.00" + }, + "module": [ + + ], + "effectif": "51", + "titre": "Sport & Culture", + "id": "UE23716" + } + ], + "situation": "Inscrit le 02\/09\/2015. D\u00e9cision jury: Valid\u00e9. UE acquises: UE11, UE12. Autoris\u00e9 \u00e0 s'inscrire en S2." +} +``` + +## Absences + * **`Absences/ListeAbsEtud`** + * Paramètres: `etudid, absjust_only, format`. `absjust_only` spécifie si on veut les absences justifiées ou non. + * Résultat: liste d'absences. Exemple: + ```{jour: "2021-02-10", ampm: "0", description: "M2202", }``` + (`ampm` vaut 1 le matin et 0 l'après-midi). + + * **`Absences/doSignaleAbsence`** + * Paramètres: ```datedebut, datefin, moduleimpl_id=None, demijournee=2, estjust=False,description, etudid``` + * Résultat: *html* + * Remarques: dates au format `dd/mm/yyyy`. Date de fin non incluse. `demijournee`: 2 si journée complète, 1 matin, 0 après-midi. + + * **`Absences/doAnnuleAbsence`** + * Paramètres: ```datedebut, datefin, demijournee, etudid``` + * Résultat: *html* + + * **`Absences/doAnnuleJustif`** + * Paramètres: ```context, datedebut0, datefin0, demijournee``` + * Résultat: *html* + + * **`Absences/EtatAbsencesGr`** + * Liste les absences d'un ou plusieurs groupes entre deux dates. + * Paramètres: ```group_ids, debut, fin, with_boursier=True, format=html``` + * Résultat: liste des absences. Si `format="json"`, cela donne par exemple: + ```[ { + boursier: "N", + nbabs: "9", + nbabsjust: "2", + nbabsnonjust: "7", + nbjustifs_noabs: "0", + nomprenom: "Mme Poisson Dodouce", + etudid: "EID12345" + }, + ... + ]``` + * Remarque: on peut spécifier plusieurs groupes. + +## Modules + * **`Notes/do_moduleimpl_list`** + * Paramètres: `[formsemestre_id, moduleimpl_id, module_id]` + * Résultat: liste de moduleimpl + + * **`Notes/do_moduleimpl_withmodule_list`** + * Paramètres: `[formsemestre_id, moduleimpl_id, module_id]` + * Résultat: liste triée de moduleimpl, avec l'attribut `module` + + +## En savoir plus +Voir l'exemple complet d'utilisation de l'API JSON en Python, dans `misc/example-api-1.py` + + + + + diff --git a/docs/ScoDocAPI.md b/docs/ScoDocAPI.md index aa8b97646..48e25d37d 100644 --- a/docs/ScoDocAPI.md +++ b/docs/ScoDocAPI.md @@ -1,5 +1,5 @@ -# API pour ScoDoc +# API pour ScoDoc 7 L'API ScoDoc permet à des applications tierces d'interroger ScoDoc. Elle offre un accès aux informations aux formats XML et JSON. Cette API est encore incomplète: n'hésitez pas à demander de nouveaux accès en écrivant à la liste de diffusion.