Evolution de l'API

This commit is contained in:
Emmanuel Viennet 2022-05-07 08:33:00 +02:00
parent b56018283a
commit e94061c214
2 changed files with 246 additions and 226 deletions

View File

@ -57,6 +57,55 @@ flask user-password lecteur_api
... ...
``` ```
Si vous êtes intéressé par le développement, voir [la section sur les tests
unitaires de l'API](TestsScoDoc.md#tests-de-lapi-scodoc9).
## Essais avec HTTPie
[HTTPie](https://httpie.io/) est un client universel livre et gratuit très commode, disponible
pour Windows, Linux, en ligne de commande ou interface graphique.
Exemple d'utilisation en ligne de commande et interroger votre ScoDoc pour obtenir la
liste des départements:
```
http -a USER:PASSWORD POST 'http://localhost:5000/ScoDoc/api/tokens'
```
Qui affiche:
```
HTTP/1.1 200 OK
Content-Length: 50
Content-Type: application/json
Date: Thu, 05 May 2022 04:29:33 GMT
{
"token": "jS7iVl1234cRDzboAfO5xseE0Ain6Zyz"
}
```
(remplacer USER:PASSWORD par les identifiants de votre utilisateur et adapter
l'URL qui est ici celle d'un client local sur le serveur de test).
Avec ce jeton (*token*), on peut interroger le serveur:
```
http GET http://localhost:5000/ScoDoc/api/departements "Authorization:Bearer jS7iVlH1234cRDzboAfO5xseE0Ain6Zyz"
```
qui affiche par exemple:
```
HTTP/1.1 200 OK
Content-Length: 151
Content-Type: application/json
Date: Thu, 05 May 2022 05:21:33 GMT
[
{
"acronym": "TAPI",
"date_creation": "Wed, 04 May 2022 21:09:25 GMT",
"description": null,
"id": 1,
"visible": true
}
]
```
## Fonctions d'API ScoDoc 9 (work in progress) ## Fonctions d'API ScoDoc 9 (work in progress)
Basé sur le ticket [#149](https://scodoc.org/git/viennet/ScoDoc/issues/149) Basé sur le ticket [#149](https://scodoc.org/git/viennet/ScoDoc/issues/149)
@ -78,14 +127,10 @@ Pour obtenir le jeton, il faut un compte sur ScoDoc (`user_name`et `password`).
Les autorisations et rôles sont gérés exactement comme pour l'application. Les autorisations et rôles sont gérés exactement comme pour l'application.
Exemple avec `curl` (un outil en ligne de commande présent sur la plupart des Exemple avec `curl` (un outil en ligne de commande présent sur la plupart des
systèmes): systèmes, voir plus haut pour la ême chose avec la commande `http`):
curl -u user_name:password --request POST https://SERVEUR/ScoDoc/api/tokens curl -u user_name:password --request POST https://SERVEUR/ScoDoc/api/tokens
ou la même chose avec `http`:
http --auth user_name:password POST https://SERVER/ScoDoc/api/tokens
`SERVEUR` est l'adresse (IP ou nom) de votre serveur. `SERVEUR` est l'adresse (IP ou nom) de votre serveur.
La réponse doit ressembler à ceci: La réponse doit ressembler à ceci:
``` ```
@ -102,49 +147,36 @@ Chaque appel à l'API donne lieu à une réponse retournant un code spécifique
fonction du résultat obtenu. L'analyse de ce code vous permet de vous assurer fonction du résultat obtenu. L'analyse de ce code vous permet de vous assurer
que la requête a été traitée avec succès. que la requête a été traitée avec succès.
Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succès par nos serveurs. Tous les codes >= 400 indiquent que la requête n'a pas été traitée avec succès
par le serveur ScoDoc.
* [200](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/200) : OK. * [200](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/200) : OK.
* [400](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Paramètre manquant, ou valeur incorrecte. * [400](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Paramètre manquant, ou valeur incorrecte.
* [401](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Authentification nécessaire. (jeton non précisé ou invalide) * [401](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/401) : Authentification nécessaire. (jeton non précisé ou invalide)
* [403](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/403) : Action non autorisée. (crédits épuisés, URL non autorisée, etc) * [403](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/403) : Action
* [404](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/404) : Page inaccessible. (URL inconnue / impossible d'accéder à l'adresse) non autorisée pour l'utilisateur associé au jeton
* [404](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/404) : Page
inaccessible: URL inconnue ou paramètre (id) invalide
* [406](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/406) : Le JSON indiqué en données POST n'est pas valide. * [406](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/406) : Le JSON indiqué en données POST n'est pas valide.
* [408](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/408) : Dépassement du temps maximal autorisé pour laudit.
* [500](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/500) : Erreur inconnue, contactez-nous. * [500](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/500) : Erreur inconnue, contactez-nous.
* [503](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/503) : L'API est momentanément indisponible, réessayez dans quelques minutes.
#### 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 (par exemple 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:** BUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME)
* **Modalité:** FI, FC, FA
* **"Spécialité":** S1 (ou S1D pour les semestres 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 (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` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI) ## Départements
* **`departements_ids`**
### Départements
* **`departements`**
* **Méthode:** GET * **Méthode:** GET
* **Routes:** `/departements` * **Routes:** `/departements_ids`
* **Exemple d'utilisation:** `/api/departements` * **Résultat:** Liste des id départements (visibles ou non).
* **Résultat:** Liste des départements. * **Exemple de résultat:**
```
[ 1888, 999, 165 ]
```
* **`departement`**
* **Méthode:** GET
* **Routes:** `/departement/<dept_id>`
* **Résultat:** Un département
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
[
{ {
"id": 1, "id": 1,
"acronym": "TAPI", "acronym": "TAPI",
@ -152,106 +184,106 @@ informations suivantes:
"visible": true, "visible": true,
"date_creation": "Fri, 15 Apr 2022 12:19:28 GMT" "date_creation": "Fri, 15 Apr 2022 12:19:28 GMT"
}, },
{ ```
"id": 2,
"acronym": "MMI", * **`departements`**
"description": null, * **Méthode:** GET
"visible": false, * **Routes:** `/departements`
"date_creation": "Fri, 18 Apr 2022 11:20:8 GMT" * **Exemple d'utilisation:** `/api/departements`
}, * **Résultat:** Liste des tous les départements (visibles ou non).
* **Exemple de résultat:**
```
[
{ un département }
... ...
] ]
``` ```
* **`liste_etudiants`** * **Étudiants d'un département**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `dept`, `formsemestre_id` * **Paramètres:** `dept`, `formsemestre_id`
* **Routes:** `/departements/<string:dept>/etudiants/list` ou `/api/departements/<string:dept>/etudiants/list/<int:formsemestre_id>` * **Routes:** `/departement/<string:dept>/etudiants`
* **Exemple d'utilisation:** `/api/departements/MMI/etudiants/list` * **Exemple d'utilisation:** `/api/departement/MMI/etudiants`
* **Résultat:** liste des étudiants d'un département, par défaut, ou d'un semestre si renseigné. (json) * **Résultat:** liste tous les étudiants d'un département, par défaut, ou d'un
formsemestre si renseigné. On peut spécifier l'acronyme du département
("MMI") ou son id (un entier).
Attention, la liste peut être longue: requête coûteuse à éviter.
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
[ [
{ {
"civilite": "X", "civilite": "M", // M, F ou X
"code_ine": null, "ine": "7899X61616",
"code_nip": null, "nip": "F6777H88",
"date_naissance": null, "date_naissance": null,
"email": null, "email": "toto@toto.fr",
"emailperso": null, "emailperso": null,
"etudid": 18, "etudid": 18,
"nom": "MOREL", "nom": "MOREL", // en majuscules
"prenom": "JACQUES" "prenom": "JACQUES"
}, },
{
"civilite": "X",
"code_ine": null,
"code_nip": null,
"date_naissance": null,
"email": null,
"emailperso": null,
"etudid": 19,
"nom": "FOURNIER",
"prenom": "ANNE"
},
... ...
] ]
``` ```
#### Semestres en cours
* **`liste_semestres_courant`** * **Semestres en cours**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `dept` * **Paramètres:** `dept`
* **Routes:** `/departements/<string:dept>/semestres_courants` * **Routes:** `/departement/<string:dept>/formsemestres_courants`
* **Exemple d'utilisation:** `/api/departements/MMI/semestres_courants` * **Exemple d'utilisation:** `/api/departements/MMI/formsemestres_courants`
* **Résultat:** Liste des semestres actifs d'un département donné. (_réponse sous format json_) * **Résultat:** Liste des formsemestres en cours d'un département donné.
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
[ [
{ {
"block_moyennes": false,
"bul_bgcolor": "white",
"bul_hide_xml": false,
"date_debut_iso": "2021-09-01",
"date_debut": "01/09/2021",
"date_fin_iso": "2022-08-31",
"date_fin": "31/08/2022", "date_fin": "31/08/2022",
"resp_can_edit": false,
"dept_id": 1, "dept_id": 1,
"elt_annee_apo": "V7HU",
"elt_sem_apo": null,
"ens_can_edit_eval": false,
"etat": true, "etat": true,
"resp_can_change_ens": true, "formation_id": 1,
"formsemestre_id": 1,
"gestion_compensation": false,
"gestion_semestrielle": false,
"id": 1, "id": 1,
"modalite": "FI", "modalite": "FI",
"ens_can_edit_eval": false, "resp_can_change_ens": true,
"formation_id": 1, "resp_can_edit": false,
"gestion_compensation": false,
"elt_sem_apo": null,
"semestre_id": 1,
"bul_hide_xml": false,
"elt_annee_apo": null,
"titre": "Semestre test",
"block_moyennes": false,
"scodoc7_id": null,
"date_debut": "01/09/2021",
"gestion_semestrielle": false,
"bul_bgcolor": "white",
"formsemestre_id": 1,
"titre_num": "Semestre test semestre 1",
"date_debut_iso": "2021-09-01",
"date_fin_iso": "2022-08-31",
"responsables": [ "responsables": [
12, 12,
42 42
], ],
"titre_court": "BUT MMI" "scodoc7_id": null,
"semestre_id": 1,
"titre_num": "BUT MMI semestre 1",
"titre": "BUT MMI",
"titre_formation": "BUT MMI"
}, },
... ...
] ]
``` ```
Le `titre`est celui donné par l'utilisateur dans le formsemestre, tandis que le
`titre_formation` est l'acronyme de la formation (défini dans son programme pédagogique).
### Etudiants ## Étudiants
* **`etudiants_courant`** * **`etudiants_courant`**
* **Méthode:** GET * **Méthode:** GET
* **Routes:** `/etudiants/courant` ou `/etudiants/courant/long` * **Routes:** `/etudiants/courant` ou `/etudiants/courant/long`
* **Exemple d'utilisation:** `/api/etudiants/courant` * **Exemple d'utilisation:** `/api/etudiants/courant`
* **Résultat:** Retourne la liste des étudiants courant (json). * **Résultat:** Liste des étudiants inscrits dans un formsemestre
actuellement en cours. Avec `/long`, donne tous les attributs de
l'étudiants (plus lent).
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
[ [
@ -308,7 +340,7 @@ informations suivantes:
} }
``` ```
#### Cursus
* **`etudiant_formsemestres`** * **`etudiant_formsemestres`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `etudid`, `nip`, `ine` * **Paramètres:** `etudid`, `nip`, `ine`
@ -353,13 +385,16 @@ informations suivantes:
] ]
``` ```
#### Bulletin
* **`etudiant_bulletin_semestre`** * **`etudiant_bulletin_semestre`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine` * **Paramètres:** `formsemestre_id`, `etudid`, `nip`, `ine`
* **Routes:** `/etudiant/etudid/<int:etudid>/formsemestre/<int:formsemestre_id>/bulletin` ou `/etudiant/nip/<int:nip>/formsemestre/<int:formsemestre_id>/bulletin` ou `/etudiant/ine/<int:ine>/formsemestre/<int:formsemestre_id>/bulletin` * **Routes:**
`/etudiant/etudid/<int:etudid>/formsemestre/<int:formsemestre_id>/bulletin`
ou `/etudiant/nip/<int:nip>/formsemestre/<int:formsemestre_id>/bulletin`
ou `/etudiant/ine/<int:ine>/formsemestre/<int:formsemestre_id>/bulletin`
* **Exemple d'utilisation:** `/etudiant/nip/1/formsemestre/1/bulletin` * **Exemple d'utilisation:** `/etudiant/nip/1/formsemestre/1/bulletin`
* **Résultat:** Retourne le bulletin d'un étudiant en fonction de son id et d'un semestre donné. (json) * **Résultat:** Bulletin de l'étudiant dans le formsemestre.
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
{ {
@ -575,15 +610,15 @@ informations suivantes:
* **Méthode:** GET * **Méthode:** GET
* **Routes:** `/ScoDoc/api/formations_ids` * **Routes:** `/ScoDoc/api/formations_ids`
* **Exemple d'utilisation:** `/ScoDoc/api/formations_ids` * **Exemple d'utilisation:** `/ScoDoc/api/formations_ids`
* **Résultat:** Retourne la liste de toutes les id de formations (tous départements) * **Résultat:** Retourne la liste des ids de toutes les formations (tous départements)
* **Exemple de résultat:** `[17, 99, 32]` * **Exemple de résultat:** `[17, 99, 32]`
* **`formations_by_id`** * **`formations_by_id`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formation_id` * **Paramètres:** `formation_id`
* **Routes:** `/formations/<int:formation_id>` * **Routes:** `/formation/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/1` * **Exemple d'utilisation:** `/ScoDoc/api/formation/1`
* **Résultat:** Retourne une formation en fonction d'un id donné * **Résultat:** Retourne une formation en fonction d'un id donné
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
@ -601,11 +636,12 @@ informations suivantes:
"formation_id": 1 "formation_id": 1
} }
``` ```
#### Export programme
* **`formation_export_by_formation_id`** * **`formation_export_by_formation_id`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formation_id`, `export_ids` (False par défaut. Ajouter `/with_ids` pour le passer à True) * **Paramètres:** `formation_id`, `export_ids` (False par défaut. Ajouter `/with_ids` pour le passer à True)
* **Routes:** `/formations/formation_export/<int:formation_id>` * **Routes:** `/formation/formation_export/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/formation_export/1` * **Exemple d'utilisation:** `/ScoDoc/api/formation/formation_export/1`
* **Résultat:** Retourne la formation, avec UE, matières, modules * **Résultat:** Retourne la formation, avec UE, matières, modules
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
@ -695,17 +731,18 @@ informations suivantes:
] ]
} }
``` ```
#### Référentiel de compétences
* **`referentiel_competences`** * **`referentiel_competences`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formation_id` * **Paramètres:** `formation_id`
* **Routes:** `/formations/<int:formation_id>/referentiel_competences` * **Routes:** `/formation/<int:formation_id>/referentiel_competences`
* **Exemple d'utilisation:** `api/formations/1/referentiel_competences` * **Exemple d'utilisation:** `api/formation/1/referentiel_competences`
* **Résultat:** Le référentiel de compétences d'une formation donnée (json). (_pas toujours présent_) * **Résultat:** Le référentiel de compétences d'une formation donnée (json). (_pas toujours présent_)
* XXX obtenir la liste des référentiels * XXX obtenir la liste des référentiels
### Semestres de formation ## Formsemestres
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`. Les sessions de formation (qu'elles durent une année ou un mois) sont représentées par les `formsemestre`.
* **`formsemestre`** * **`formsemestre`**
* **Méthode:** GET * **Méthode:** GET
@ -757,47 +794,76 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
``` ```
[ [
{ {
"block_moyennes": false,
"bul_bgcolor": "white",
"bul_hide_xml": false,
"date_debut_iso": "2021-09-01",
"date_debut": "01/09/2021",
"date_fin_iso": "2022-08-31",
"date_fin": "31/08/2022", "date_fin": "31/08/2022",
"resp_can_edit": false,
"dept_id": 1, "dept_id": 1,
"elt_annee_apo": null,
"elt_sem_apo": null,
"ens_can_edit_eval": false,
"etat": true, "etat": true,
"resp_can_change_ens": true, "formation_id": 1,
"formsemestre_id": 1,
"gestion_compensation": false,
"gestion_semestrielle": false,
"id": 1, "id": 1,
"modalite": "FI", "modalite": "FI",
"ens_can_edit_eval": false, "resp_can_change_ens": true,
"formation_id": 1, "resp_can_edit": false,
"gestion_compensation": false,
"elt_sem_apo": null,
"semestre_id": 1,
"bul_hide_xml": false,
"elt_annee_apo": null,
"titre": "Semestre test",
"block_moyennes": false,
"scodoc7_id": null,
"date_debut": "01/09/2021",
"gestion_semestrielle": false,
"bul_bgcolor": "white",
"formsemestre_id": 1,
"titre_num": "Semestre test semestre 1",
"date_debut_iso": "2021-09-01",
"date_fin_iso": "2022-08-31",
"responsables": [ "responsables": [
12, 12,
42 42
], ],
"titre_court": "BUT MMI" "scodoc7_id": null,
"semestre_id": 1,
"titre_court": "BUT MMI",
"titre_num": "Semestre test semestre 1",
"titre": "Semestre test",
"session_id": "MMI-BUT-FI-S1-2021",
}, },
... ...
] ]
``` ```
#### Note sur les identifiants de formsemestre
Le `session_id` peut être utilisé pour identifier de façon prévisible et
(presque) unique un un formsemestre) dans un établissement, ce qui est utile
notamment pour interfacer ScoDoc à d'autres logiciels (par exemple gestion d'emplois
du temps ou de services d'enseignement). Cet identifiant est constitué des
informations suivantes:
* **Département** (RT, GEII, INFO...) (acronyme en majuscules)
* **Nom parcours:** BUT, LP, ... (défini au niveau du parcours dans ScoDoc = NAME)
* **Modalité:** FI, FC, FA
* **"Spécialité":** S1 (ou S1D pour les semestres décalés), ou le
`code_specialite` si pas de semestres. Le code spécialité est un champ
(libre) dans la "formation" (le programme pédagogique).
* **Année:** année de début de l'année scolaire correspondante (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` équivaut à un semestre S1 d'un DUT informatique de 2014 en formation initiale (FI)
#### Étudiants inscrits
* **etudiants**
* **Méthode:** GET
* **Routes:** `/formsemestre/<int:formsemestre_id>/etudiants`
* **Résultat:** les étudiants inscrits à ce semestres XXX préciser état
(DEM, DEF))
#### Bulletins
* **`bulletins`** * **`bulletins`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formsemestre_id` * **Paramètres:** `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/bulletins` * **Routes:** `/formsemestre/<int:formsemestre_id>/bulletins`
* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/bulletins` * **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/bulletins`
* **Résultat:** Retourne les bulletins d'un formsemestre donné * **Résultat:** tous les bulletins d'un formsemestre.
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
[ [
@ -974,7 +1040,7 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
* **`jury`** * **`jury`** (**non implémentée**)
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `formsemestre_id` * **Paramètres:** `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/jury` * **Routes:** `/formsemestre/<int:formsemestre_id>/jury`
@ -985,12 +1051,13 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
XXX A COMPLETER XXX A COMPLETER
``` ```
* **`programme`** #### Programme d'un formsemestre
* **UE et modules**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `dept`, `formsemestre_id` * **Paramètres:** `dept`, `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/programme` * **Routes:** `/formsemestre/<int:formsemestre_id>/programme`
* **Exemple d'utilisation:** `api/formsemestre/1/programme` * **Exemple d'utilisation:** `api/formsemestre/1/programme`
* **Résultat:** Retourne la liste des Ues, ressources et SAE d'un semestre (json). * **Résultat:** Retourne la liste des UEs, modules, ressources et SAE d'un semestre.
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
{ {
@ -1000,13 +1067,13 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
"formation_id": 1, "formation_id": 1,
"ue_code": "UCOD11", "ue_code": "UCOD11",
"id": 1, "id": 1,
"ects": 12, "ects": 12.0,
"acronyme": "RT1.1", "acronyme": "RT1.1",
"is_external": false, "is_external": false,
"numero": 1, "numero": 1,
"code_apogee": "", "code_apogee": "",
"titre": "Administrer les réseaux et lInternet", "titre": "Administrer les r\u00e9seaux et l\u2019Internet",
"coefficient": 0, "coefficient": 0.0,
"semestre_idx": 1, "semestre_idx": 1,
"color": "#B80004", "color": "#B80004",
"ue_id": 1 "ue_id": 1
@ -1015,61 +1082,54 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
], ],
"ressources": [ "ressources": [
{ {
"titre": "Fondamentaux de la programmation", "ens": [ 10, 18 ],
"coefficient": 1, "formsemestre_id": 1,
"module_type": 2, "id": 15,
"id": 17, "module": {
"ects": null, "abbrev": "Programmer",
"abbrev": null, "code": "SAE15",
"ue_id": 3, "code_apogee": "V7GOP",
"code": "R107", "coefficient": 1.0,
"formation_id": 1, "formation_id": 1,
"heures_cours": 0, "heures_cours": 0.0,
"heures_td": 0.0,
"heures_tp": 0.0,
"id": 15,
"matiere_id": 3, "matiere_id": 3,
"heures_td": 0, "module_id": 15,
"module_type": 3,
"numero": 50,
"semestre_id": 1, "semestre_id": 1,
"heures_tp": 0, "titre": "Programmer en Python",
"numero": 70, "ue_id": 3
"code_apogee": "", },
"module_id": 17 "module_id": 15,
"moduleimpl_id": 15,
"responsable_id": 2
}, },
... ...
], ],
"saes": [ "saes": [
{ {
"titre": "Se présenter sur Internet", ...
"coefficient": 1,
"module_type": 3,
"id": 14,
"ects": null,
"abbrev": null,
"ue_id": 3,
"code": "SAE14",
"formation_id": 1,
"heures_cours": 0,
"matiere_id": 3,
"heures_td": 0,
"semestre_id": 1,
"heures_tp": 0,
"numero": 40,
"code_apogee": "",
"module_id": 14
}, },
... ...
] ],
"modules" : [ ... les modules qui ne sont ni des SAEs ni des ressources ... ]
} }
``` ```
### Modules de formation #### Module d'un formsemestre
Les moduleimpl sont les modules d'un semestre, ou les ressources, ou les SAÉs.
On peut récupérer soit un module par son id, soit la listes des modules d'un semestre. Le moduleimpl est la mise en place d'un module dans un formsemestre (avec son
responsable et ses enseignants).
* **`moduleimpl`** * **`moduleimpl`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `moduleimpl_id` * **Paramètres:** `moduleimpl_id`
* **Routes:** `/formations/moduleimpl/<int:moduleimpl_id>` * **Routes:** `/formation/moduleimpl/<int:moduleimpl_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/moduleimpl/1` * **Exemple d'utilisation:** `/ScoDoc/api/formation/moduleimpl/1`
* **Résultat:** Retourne la liste des moduleimpl * **Résultat:** Retourne la liste des moduleimpl
* **Exemple de résultat:** * **Exemple de résultat:**
``` ```
@ -1103,46 +1163,6 @@ On peut récupérer soit un module par son id, soit la listes des modules d'un s
} }
``` ```
* **`moduleimpls_sem`**
* **Méthode:** GET
* **Paramètres:** `moduleimpl_id`
* **Routes:** `/formations/moduleimpl/formsemestre/<int:formsemestre_id>/list`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/moduleimpl/formsemestre/1/list`
* **Résultat:** Retourne la liste des moduleimpl d'un semestre
* **Exemple de résultat:**
```
[
{
"id": 1,
"formsemestre_id": 1,
"computation_expr": null,
"module_id": 1,
"responsable_id": 2,
"module": {
"heures_tp": 0,
"code_apogee": "",
"titre": "Initiation aux réseaux informatiques",
"coefficient": 1,
"module_type": 2,
"id": 1,
"ects": null,
"abbrev": "Init aux réseaux informatiques",
"ue_id": 1,
"code": "R101",
"formation_id": 1,
"heures_cours": 0,
"matiere_id": 1,
"heures_td": 0,
"semestre_id": 1,
"numero": 10,
"module_id": 1
},
"moduleimpl_id": 1,
"ens": []
}
]
```
### Groupes et partitions ### Groupes et partitions
L'ensemble des étudiants d'un semestre peut être réparti selon une ou L'ensemble des étudiants d'un semestre peut être réparti selon une ou
@ -1229,7 +1249,7 @@ d'un nombre quelconque de groupes d'étudiants.
``` ```
* **`set_groups`** * **`set_groups`** **NON IMPLEMENTE**
* **Méthode:** POST * **Méthode:** POST
* **Paramètres:** `partition_id`, `groups_lists`, `groups_to_delete`, `groups_to_create` * **Paramètres:** `partition_id`, `groups_lists`, `groups_to_delete`, `groups_to_create`
* **Routes:** `/partitions/set_groups/partition/<int:partition_id>/groups/<string:groups_id>/delete/<string:groups_to_delete>/create/<string:groups_to_create>` * **Routes:** `/partitions/set_groups/partition/<int:partition_id>/groups/<string:groups_id>/delete/<string:groups_to_delete>/create/<string:groups_to_create>`
@ -1237,7 +1257,7 @@ d'un nombre quelconque de groupes d'étudiants.
* **Résultat:** Set les groups. * **Résultat:** Set les groups.
### Bulletins de notes ### Résultats des évaluations
* **`evaluations`** * **`evaluations`**
* **Méthode:** GET * **Méthode:** GET
* **Paramètres:** `moduleimpl_id` * **Paramètres:** `moduleimpl_id`

View File

@ -53,10 +53,10 @@ serveur doit avoir été configuré avec des données de test.
### Configuration du serveur pour tester l'API ### Configuration du serveur pour tester l'API
1. modifier /opt/scodoc/.env pour indiquer 1. modifier /opt/scodoc/.env pour indiquer
```
FLASK_ENV=test_api FLASK_ENV=test_api
FLASK_DEBUG=1 FLASK_DEBUG=1
```
2. En tant qu'utilisateur scodoc, lancer: 2. En tant qu'utilisateur scodoc, lancer:
``` ```
tools/create_database.sh --drop SCODOC_TEST_API tools/create_database.sh --drop SCODOC_TEST_API
@ -70,9 +70,9 @@ recréer, mettre à jour le schéma pour la dernière version de ScoDoc install
l'initialiser et la peupler de données fictives pour les tests. l'initialiser et la peupler de données fictives pour les tests.
3. Relancer ScoDoc: 3. Relancer ScoDoc:
```
flask run --host 0.0.0.0 flask run --host 0.0.0.0
```
### Configuration du client de test API ### Configuration du client de test API
1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans 1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans