Evolution de l'API

This commit is contained in:
Emmanuel Viennet 2022-05-07 08:33:00 +02:00
parent cfb63987f9
commit 683e753b80
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)
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.
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
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.
La réponse doit ressembler à ceci:
```
@ -102,156 +147,143 @@ 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
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.
* [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)
* [403](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/403) : Action non autorisée. (crédits épuisés, URL non autorisée, etc)
* [404](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/404) : Page inaccessible. (URL inconnue / impossible d'accéder à l'adresse)
* [403](https://developer.mozilla.org/fr/docs/Web/HTTP/Status/403) : Action
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.
* [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.
* [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épartements
* **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`**
* **`departements_ids`**
* **Méthode:** GET
* **Routes:** `/departements`
* **Exemple d'utilisation:** `/api/departements`
* **Résultat:** Liste des départements.
* **Routes:** `/departements_ids`
* **Résultat:** Liste des id départements (visibles ou non).
* **Exemple de résultat:**
```
[
{
[ 1888, 999, 165 ]
```
* **`departement`**
* **Méthode:** GET
* **Routes:** `/departement/<dept_id>`
* **Résultat:** Un département
* **Exemple de résultat:**
```
{
"id": 1,
"acronym": "TAPI",
"description": null,
"visible": true,
"date_creation": "Fri, 15 Apr 2022 12:19:28 GMT"
},
{
"id": 2,
"acronym": "MMI",
"description": null,
"visible": false,
"date_creation": "Fri, 18 Apr 2022 11:20:8 GMT"
},
},
```
* **`departements`**
* **Méthode:** GET
* **Routes:** `/departements`
* **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
* **Paramètres:** `dept`, `formsemestre_id`
* **Routes:** `/departements/<string:dept>/etudiants/list` ou `/api/departements/<string:dept>/etudiants/list/<int:formsemestre_id>`
* **Exemple d'utilisation:** `/api/departements/MMI/etudiants/list`
* **Résultat:** liste des étudiants d'un département, par défaut, ou d'un semestre si renseigné. (json)
* **Routes:** `/departement/<string:dept>/etudiants`
* **Exemple d'utilisation:** `/api/departement/MMI/etudiants`
* **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:**
```
[
{
"civilite": "X",
"code_ine": null,
"code_nip": null,
"date_naissance": null,
"email": null,
"emailperso": null,
"etudid": 18,
"nom": "MOREL",
"prenom": "JACQUES"
},
{
"civilite": "X",
"code_ine": null,
"code_nip": null,
"date_naissance": null,
"email": null,
"emailperso": null,
"etudid": 19,
"nom": "FOURNIER",
"prenom": "ANNE"
"civilite": "M", // M, F ou X
"ine": "7899X61616",
"nip": "F6777H88",
"date_naissance": null,
"email": "toto@toto.fr",
"emailperso": null,
"etudid": 18,
"nom": "MOREL", // en majuscules
"prenom": "JACQUES"
},
...
]
```
* **`liste_semestres_courant`**
#### Semestres en cours
* **Semestres en cours**
* **Méthode:** GET
* **Paramètres:** `dept`
* **Routes:** `/departements/<string:dept>/semestres_courants`
* **Exemple d'utilisation:** `/api/departements/MMI/semestres_courants`
* **Résultat:** Liste des semestres actifs d'un département donné. (_réponse sous format json_)
* **Routes:** `/departement/<string:dept>/formsemestres_courants`
* **Exemple d'utilisation:** `/api/departements/MMI/formsemestres_courants`
* **Résultat:** Liste des formsemestres en cours d'un département donné.
* **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",
"resp_can_edit": false,
"dept_id": 1,
"elt_annee_apo": "V7HU",
"elt_sem_apo": null,
"ens_can_edit_eval": false,
"etat": true,
"resp_can_change_ens": true,
"formation_id": 1,
"formsemestre_id": 1,
"gestion_compensation": false,
"gestion_semestrielle": false,
"id": 1,
"modalite": "FI",
"ens_can_edit_eval": false,
"formation_id": 1,
"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",
"resp_can_change_ens": true,
"resp_can_edit": false,
"responsables": [
12,
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`**
* **Méthode:** GET
* **Routes:** `/etudiants/courant` ou `/etudiants/courant/long`
* **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:**
```
[
@ -308,7 +340,7 @@ informations suivantes:
}
```
#### Cursus
* **`etudiant_formsemestres`**
* **Méthode:** GET
* **Paramètres:** `etudid`, `nip`, `ine`
@ -353,13 +385,16 @@ informations suivantes:
]
```
#### Bulletin
* **`etudiant_bulletin_semestre`**
* **Méthode:** GET
* **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`
* **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:**
```
{
@ -575,15 +610,15 @@ informations suivantes:
* **Méthode:** GET
* **Routes:** `/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]`
* **`formations_by_id`**
* **Méthode:** GET
* **Paramètres:** `formation_id`
* **Routes:** `/formations/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/1`
* **Routes:** `/formation/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formation/1`
* **Résultat:** Retourne une formation en fonction d'un id donné
* **Exemple de résultat:**
```
@ -601,11 +636,12 @@ informations suivantes:
"formation_id": 1
}
```
#### Export programme
* **`formation_export_by_formation_id`**
* **Méthode:** GET
* **Paramètres:** `formation_id`, `export_ids` (False par défaut. Ajouter `/with_ids` pour le passer à True)
* **Routes:** `/formations/formation_export/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/formation_export/1`
* **Routes:** `/formation/formation_export/<int:formation_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formation/formation_export/1`
* **Résultat:** Retourne la formation, avec UE, matières, modules
* **Exemple de résultat:**
```
@ -695,17 +731,18 @@ informations suivantes:
]
}
```
#### Référentiel de compétences
* **`referentiel_competences`**
* **Méthode:** GET
* **Paramètres:** `formation_id`
* **Routes:** `/formations/<int:formation_id>/referentiel_competences`
* **Exemple d'utilisation:** `api/formations/1/referentiel_competences`
* **Routes:** `/formation/<int:formation_id>/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_)
* XXX obtenir la liste des référentiels
### 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`.
## Formsemestres
Les sessions de formation (qu'elles durent une année ou un mois) sont représentées par les `formsemestre`.
* **`formsemestre`**
* **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",
"resp_can_edit": false,
"dept_id": 1,
"elt_annee_apo": null,
"elt_sem_apo": null,
"ens_can_edit_eval": false,
"etat": true,
"resp_can_change_ens": true,
"formation_id": 1,
"formsemestre_id": 1,
"gestion_compensation": false,
"gestion_semestrielle": false,
"id": 1,
"modalite": "FI",
"ens_can_edit_eval": false,
"formation_id": 1,
"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",
"resp_can_change_ens": true,
"resp_can_edit": false,
"responsables": [
12,
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`**
* **Méthode:** GET
* **Paramètres:** `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/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:**
```
[
@ -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
* **Paramètres:** `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/jury`
@ -984,13 +1050,14 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
```
XXX A COMPLETER
```
* **`programme`**
#### Programme d'un formsemestre
* **UE et modules**
* **Méthode:** GET
* **Paramètres:** `dept`, `formsemestre_id`
* **Routes:** `/formsemestre/<int:formsemestre_id>/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:**
```
{
@ -1000,13 +1067,13 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
"formation_id": 1,
"ue_code": "UCOD11",
"id": 1,
"ects": 12,
"ects": 12.0,
"acronyme": "RT1.1",
"is_external": false,
"numero": 1,
"code_apogee": "",
"titre": "Administrer les réseaux et lInternet",
"coefficient": 0,
"titre": "Administrer les r\u00e9seaux et l\u2019Internet",
"coefficient": 0.0,
"semestre_idx": 1,
"color": "#B80004",
"ue_id": 1
@ -1015,61 +1082,54 @@ Les sessions de formation (dénommées "semestres" même si elles durent une ann
],
"ressources": [
{
"titre": "Fondamentaux de la programmation",
"coefficient": 1,
"module_type": 2,
"id": 17,
"ects": null,
"abbrev": null,
"ue_id": 3,
"code": "R107",
"formation_id": 1,
"heures_cours": 0,
"matiere_id": 3,
"heures_td": 0,
"semestre_id": 1,
"heures_tp": 0,
"numero": 70,
"code_apogee": "",
"module_id": 17
"ens": [ 10, 18 ],
"formsemestre_id": 1,
"id": 15,
"module": {
"abbrev": "Programmer",
"code": "SAE15",
"code_apogee": "V7GOP",
"coefficient": 1.0,
"formation_id": 1,
"heures_cours": 0.0,
"heures_td": 0.0,
"heures_tp": 0.0,
"id": 15,
"matiere_id": 3,
"module_id": 15,
"module_type": 3,
"numero": 50,
"semestre_id": 1,
"titre": "Programmer en Python",
"ue_id": 3
},
"module_id": 15,
"moduleimpl_id": 15,
"responsable_id": 2
},
...
],
"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
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.
#### Module d'un formsemestre
Le moduleimpl est la mise en place d'un module dans un formsemestre (avec son
responsable et ses enseignants).
* **`moduleimpl`**
* **Méthode:** GET
* **Paramètres:** `moduleimpl_id`
* **Routes:** `/formations/moduleimpl/<int:moduleimpl_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formations/moduleimpl/1`
* **Routes:** `/formation/moduleimpl/<int:moduleimpl_id>`
* **Exemple d'utilisation:** `/ScoDoc/api/formation/moduleimpl/1`
* **Résultat:** Retourne la liste des moduleimpl
* **Exemple de résultat:**
```
@ -1102,47 +1162,7 @@ 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
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
* **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>`
@ -1237,7 +1257,7 @@ d'un nombre quelconque de groupes d'étudiants.
* **Résultat:** Set les groups.
### Bulletins de notes
### Résultats des évaluations
* **`evaluations`**
* **Méthode:** GET
* **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
1. modifier /opt/scodoc/.env pour indiquer
```
FLASK_ENV=test_api
FLASK_DEBUG=1
```
2. En tant qu'utilisateur scodoc, lancer:
```
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.
3. Relancer ScoDoc:
```
flask run --host 0.0.0.0
```
### Configuration du client de test API
1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans