Evolution de l'API
This commit is contained in:
parent
b56018283a
commit
e94061c214
@ -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
|
|
||||||
|
|
||||||
où `SERVEUR` est l'adresse (IP ou nom) de votre serveur.
|
où `SERVEUR` est l'adresse (IP ou nom) de votre serveur.
|
||||||
La réponse doit ressembler à ceci:
|
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
|
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 l’audit.
|
|
||||||
* [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:**
|
* **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,
|
"id": 1,
|
||||||
"acronym": "TAPI",
|
"acronym": "TAPI",
|
||||||
"description": null,
|
"description": null,
|
||||||
"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 l’Internet",
|
"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,
|
||||||
"matiere_id": 3,
|
"heures_td": 0.0,
|
||||||
"heures_td": 0,
|
"heures_tp": 0.0,
|
||||||
"semestre_id": 1,
|
"id": 15,
|
||||||
"heures_tp": 0,
|
"matiere_id": 3,
|
||||||
"numero": 70,
|
"module_id": 15,
|
||||||
"code_apogee": "",
|
"module_type": 3,
|
||||||
"module_id": 17
|
"numero": 50,
|
||||||
|
"semestre_id": 1,
|
||||||
|
"titre": "Programmer en Python",
|
||||||
|
"ue_id": 3
|
||||||
},
|
},
|
||||||
|
"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`
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user