misc corrections
This commit is contained in:
parent
4c58b40eef
commit
85fdb885cc
@ -7,15 +7,15 @@
|
|||||||
est normalement intégré à votre éditeur (VSCode et PyCharm sont deux choix
|
est normalement intégré à votre éditeur (VSCode et PyCharm sont deux choix
|
||||||
judicieux).
|
judicieux).
|
||||||
- outre Python, les principaux composants logiciels sont:
|
- outre Python, les principaux composants logiciels sont:
|
||||||
- [Flask](https://flask-sqlalchemy.palletsprojects.com/en/2.x/): le
|
- [Flask](https://flask-sqlalchemy.palletsprojects.com/en/2.x/): le
|
||||||
framework Web, dont on utilise notamment:
|
framework Web, dont on utilise notamment:
|
||||||
- l'ORM [SQLAlchemy](https://www.sqlalchemy.org/)
|
- l'ORM [SQLAlchemy](https://www.sqlalchemy.org/)
|
||||||
- les templates [Jinja2](https://jinja.palletsprojects.com/en/3.0.x/)
|
- les templates [Jinja2](https://jinja.palletsprojects.com/en/3.0.x/)
|
||||||
- [Postgresql](https://www.postgresql.org/)
|
- [Postgresql](https://www.postgresql.org/)
|
||||||
- [Redis](https://redis.io/) cache persistant
|
- [Redis](https://redis.io/) cache persistant
|
||||||
- [NGINX](https://www.nginx.com/) serveur Web frontal
|
- [NGINX](https://www.nginx.com/) serveur Web frontal
|
||||||
- [gunicorn](https://gunicorn.org/) WSGI HTTP server
|
- [gunicorn](https://gunicorn.org/) WSGI HTTP server
|
||||||
- et bien sûr Linux (Debian 12 en 2023-2024) et systemd.
|
- et bien sûr Linux (Debian 12 en 2023-2024) et systemd.
|
||||||
|
|
||||||
## Principaux objets
|
## Principaux objets
|
||||||
|
|
||||||
@ -29,9 +29,9 @@ Principales classes (les noms des classes Python sont en `CamelCase`).
|
|||||||
|
|
||||||
- Étudiants (classe `Identite`): nom, codes INE/NIP, etc
|
- Étudiants (classe `Identite`): nom, codes INE/NIP, etc
|
||||||
- Formations: programmes pédagogiques, contenant
|
- Formations: programmes pédagogiques, contenant
|
||||||
- Unités d'Enseignement (`UniteEns`);
|
- Unités d'Enseignement (`UniteEns`);
|
||||||
- Matières et Modules (`Module`, avec son type standard, bonus, ressources
|
- Matières et Modules (`Module`, avec son type standard, bonus, ressources
|
||||||
ou SAÉ).
|
ou SAÉ).
|
||||||
- FormSemestre: instanciation d'une session de formation, avec un programme
|
- FormSemestre: instanciation d'une session de formation, avec un programme
|
||||||
pédagogique donné (Formation), les dates de début et fin, des étudiants
|
pédagogique donné (Formation), les dates de début et fin, des étudiants
|
||||||
inscrits, des responsables, divers codes, et les ModuleImpl mis en œuvre.
|
inscrits, des responsables, divers codes, et les ModuleImpl mis en œuvre.
|
||||||
@ -46,13 +46,13 @@ Principales classes (les noms des classes Python sont en `CamelCase`).
|
|||||||
Une vue ordinaire (Web) pourrait ressembler à cela. Noter la présence de
|
Une vue ordinaire (Web) pourrait ressembler à cela. Noter la présence de
|
||||||
décorateurs:
|
décorateurs:
|
||||||
|
|
||||||
- `@scodoc` récupère le département (présent dans l'URL) et initialise quelques
|
- `@scodoc` récupère le département (présent dans l'URL) et initialise quelques
|
||||||
trucs, notamment `g.scodoc_dept` (l'acronyme du département courant) et
|
trucs, notamment `g.scodoc_dept` (l'acronyme du département courant) et
|
||||||
`g.scodoc_dept_id` (l'id du dépt. courant).
|
`g.scodoc_dept_id` (l'id du dépt. courant).
|
||||||
- `@permission_required`: permet de contrôler l'accès, en se basant sur les
|
- `@permission_required`: permet de contrôler l'accès, en se basant sur les
|
||||||
permissions définies dans la classe `Permission`.
|
permissions définies dans la classe `Permission`.
|
||||||
|
|
||||||
```
|
```py
|
||||||
@bp.route("/un_exemple")
|
@bp.route("/un_exemple")
|
||||||
@scodoc
|
@scodoc
|
||||||
@permission_required(Permission.EditFormation)
|
@permission_required(Permission.EditFormation)
|
||||||
@ -66,8 +66,8 @@ def un_exemple():
|
|||||||
# Effectuer au besoin un traitement
|
# Effectuer au besoin un traitement
|
||||||
resultat = ...
|
resultat = ...
|
||||||
# Afficher le résultat
|
# Afficher le résultat
|
||||||
return render_template(
|
return render_template(
|
||||||
"exemple_template.html",
|
"exemple_template.html",
|
||||||
resultat=resultat, # par exemple
|
resultat=resultat, # par exemple
|
||||||
formation=formation,
|
formation=formation,
|
||||||
... # etc
|
... # etc
|
||||||
|
@ -88,7 +88,7 @@ On a ici:
|
|||||||
- identifiant du groupe: dans `SUMMARY`, `* - <groupe>`
|
- identifiant du groupe: dans `SUMMARY`, `* - <groupe>`
|
||||||
- identifiant du module: on a le code `VCYR303` à trois endroits: `SUMMARY`,
|
- identifiant du module: on a le code `VCYR303` à trois endroits: `SUMMARY`,
|
||||||
`DESCRIPTION`, `X-ALT-DESC`.
|
`DESCRIPTION`, `X-ALT-DESC`.
|
||||||
- identifiant de l'enseignant: `SUMMARY`, `DESCRIPTION`, `X-ALT-DESC`.
|
- identifiant de l'enseignant: ici `1234`, présent dans `SUMMARY`, `DESCRIPTION` et `X-ALT-DESC`.
|
||||||
|
|
||||||
## Extraction des identifiants: semestres, groupes, modules, enseignants
|
## Extraction des identifiants: semestres, groupes, modules, enseignants
|
||||||
|
|
||||||
|
@ -86,7 +86,7 @@ Au besoin, mémo:
|
|||||||
|
|
||||||
- afficher les clés: `redis-cli KEYS '*'`
|
- afficher les clés: `redis-cli KEYS '*'`
|
||||||
|
|
||||||
- `redis-cli TTL key` affiche le TTL d'un clé, -1 si infini.
|
- `redis-cli TTL key` affiche le TTL d'une clé, -1 si infini.
|
||||||
|
|
||||||
- `redis-cli -r -1 -i 3 KEYS '*_NT_*'` surveille certaines clés (ici _NT_),
|
- `redis-cli -r -1 -i 3 KEYS '*_NT_*'` surveille certaines clés (ici _NT_),
|
||||||
affiche toutes les 3 secondes.
|
affiche toutes les 3 secondes.
|
||||||
@ -112,7 +112,7 @@ bibliothèques, ou autres expériences de ce genre, vous pouvez le récréer ain
|
|||||||
Puis soit vous installez les versions "officielles" (testées)
|
Puis soit vous installez les versions "officielles" (testées)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pip install -r requirements-3.9.txt
|
pip install -r requirements-3.9.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
Soit vous prenez les versions les plus à jour disponibles. Une façon rapide de
|
Soit vous prenez les versions les plus à jour disponibles. Une façon rapide de
|
||||||
|
@ -87,7 +87,7 @@ Si vous êtes intéressé par le développement, voir
|
|||||||
*Autorise connexion via CAS si CAS est activé*
|
*Autorise connexion via CAS si CAS est activé*
|
||||||
dans leur formulaire de configuration.
|
dans leur formulaire de configuration.
|
||||||
|
|
||||||
* Si l'utilisateur est associé à un département (cas des comptes créés via l'interface Web),
|
* Si l'utilisateur est associé à un département (cas des comptes créés via l'interface Web),
|
||||||
il ne pourra accéder à l'API que via une *route départementale*, c'est à dire une route comprenant
|
il ne pourra accéder à l'API que via une *route départementale*, c'est à dire une route comprenant
|
||||||
l'acronyme de son département, de la forme `https://...//ScoDoc/DEPARTEMENT/api/...`.
|
l'acronyme de son département, de la forme `https://...//ScoDoc/DEPARTEMENT/api/...`.
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ Exemple avec `curl` (un outil en ligne de commande présent sur la plupart des
|
|||||||
systèmes, voir plus haut pour la même chose avec la commande `http`):
|
systèmes, voir plus haut pour la même chose avec la commande `http`):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -u user_name:password --request POST https://SERVEUR/ScoDoc/api/tokens
|
curl -u user_name:password --request POST https://SERVEUR/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.
|
||||||
@ -368,7 +368,7 @@ Pour uniformiser les résultats des exemples, ceux sont soumis à quelques post-
|
|||||||
- **Exemple d'utilisation:** `/api/departements`
|
- **Exemple d'utilisation:** `/api/departements`
|
||||||
- **Résultat:** Liste de tous les départements (visibles ou non).
|
- **Résultat:** Liste de tous les départements (visibles ou non).
|
||||||
- **Exemple de résultat:** [departements.json](samples/sample_departements.json.md)
|
- **Exemple de résultat:** [departements.json](samples/sample_departements.json.md)
|
||||||
|
|
||||||
#### **departements-ids**
|
#### **departements-ids**
|
||||||
|
|
||||||
- **Méthode:** GET
|
- **Méthode:** GET
|
||||||
@ -1042,8 +1042,10 @@ responsable et ses enseignants). La liste des moduleimpl d'un formsemestre peut
|
|||||||
* **Résultat:** Description du moduleimpl.
|
* **Résultat:** Description du moduleimpl.
|
||||||
* **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl.json.md)
|
* **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl.json.md)
|
||||||
|
|
||||||
#### **`moduleimpl-inscriptions`**
|
Note: la liste des `ModuleImpl` d'un `FormSemestre` peut être obtenue via
|
||||||
|
[formsemestre-programme](#formsemestre-programme).
|
||||||
|
|
||||||
|
#### **`moduleimpl-inscriptions`**
|
||||||
|
|
||||||
* **Méthode:** GET
|
* **Méthode:** GET
|
||||||
* **Permission: `ScoView`**
|
* **Permission: `ScoView`**
|
||||||
@ -1053,6 +1055,59 @@ responsable et ses enseignants). La liste des moduleimpl d'un formsemestre peut
|
|||||||
* **Résultat:** Liste des inscriptions à ce moduleimpl.
|
* **Résultat:** Liste des inscriptions à ce moduleimpl.
|
||||||
* **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl_inscriptions.json.md)
|
* **Exemple de résultat:** [moduleimpl.json](samples/sample_moduleimpl_inscriptions.json.md)
|
||||||
|
|
||||||
|
#### **`moduleimpl-evaluations`**
|
||||||
|
|
||||||
|
* **Méthode:** GET
|
||||||
|
* **Permission: `ScoView`**
|
||||||
|
* **Paramètres:** `moduleimpl_id`
|
||||||
|
* **Routes:** `/moduleimpl/<int:moduleimpl_id>/evaluations`
|
||||||
|
* **Exemple d'utilisation:** `/ScoDoc/api/moduleimpl/1/evaluations`
|
||||||
|
* **Résultat:** Liste ordonnée des évaluations dans ce moduleimpl.
|
||||||
|
|
||||||
|
#### **`moduleimpl-notes`**
|
||||||
|
|
||||||
|
* **Méthode:** GET
|
||||||
|
* **Permission: `ScoView`**
|
||||||
|
* **Paramètres:** `moduleimpl_id`
|
||||||
|
* **Routes:** `/moduleimpl/<int:moduleimpl_id>/notes`
|
||||||
|
* **Exemple d'utilisation:** `/ScoDoc/api/moduleimpl/1/notes`
|
||||||
|
* **Résultat:** Liste des notes dans ce moduleimpl.
|
||||||
|
|
||||||
|
Exemple en formation classique:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"etudid": 18270,
|
||||||
|
"nom": "Ball",
|
||||||
|
"prenom": "Jane",
|
||||||
|
"38083": 11.0, // Note evaluation d'id 38083
|
||||||
|
"38084": 14.5, // Note evaluation 38084
|
||||||
|
"moymod": 12.75 // Moyenne au module
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple de résultat en BUT:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"etudid": 17776, // code de l'étudiant
|
||||||
|
"nom": "DUPONT",
|
||||||
|
"prenom": "Luz",
|
||||||
|
"38411": 16.0, // Note dans l'évaluation d'id 38411
|
||||||
|
"38410": 15.0,
|
||||||
|
"moymod": 15.5, // Moyenne INDICATIVE module
|
||||||
|
"moy_ue_2875": 15.5, // Moyenne vers l'UE 2875
|
||||||
|
"moy_ue_2876": 15.5, // Moyenne vers l'UE 2876
|
||||||
|
"moy_ue_2877": 15.5 // Moyenne vers l'UE 2877
|
||||||
|
},
|
||||||
|
...
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
### **API Partition**
|
### **API Partition**
|
||||||
|
|
||||||
#### Structure Partition
|
#### Structure Partition
|
||||||
@ -1207,7 +1262,7 @@ d'un autre).
|
|||||||
* **Data:** `{ "permissions" : [ permission, ... ] }`
|
* **Data:** `{ "permissions" : [ permission, ... ] }`
|
||||||
* **Routes:** `/role/create/<str:role_name>`
|
* **Routes:** `/role/create/<str:role_name>`
|
||||||
* **Exemple d'utilisation:** `/role/create/LaveurDecarreaux`
|
* **Exemple d'utilisation:** `/role/create/LaveurDecarreaux`
|
||||||
|
|
||||||
> `{ "permissions" : [ 'ScoView', 'UsersView' ] }`
|
> `{ "permissions" : [ 'ScoView', 'UsersView' ] }`
|
||||||
|
|
||||||
* **Résultat:** Crée un nouveau rôle, avec les permissions indiquées.
|
* **Résultat:** Crée un nouveau rôle, avec les permissions indiquées.
|
||||||
@ -1229,7 +1284,7 @@ d'un autre).
|
|||||||
* **Data:** `{ "permissions" : [ permission, ... ] }`
|
* **Data:** `{ "permissions" : [ permission, ... ] }`
|
||||||
* **Routes:** `/role/edit/<str:role_name>`
|
* **Routes:** `/role/edit/<str:role_name>`
|
||||||
* **Exemple d'utilisation:** `/role/create/LaveurDecarreaux`
|
* **Exemple d'utilisation:** `/role/create/LaveurDecarreaux`
|
||||||
|
|
||||||
> `{ "name" : "LaveurDeVitres", "permissions" : [ 'ScoView' ] }`
|
> `{ "name" : "LaveurDeVitres", "permissions" : [ 'ScoView' ] }`
|
||||||
|
|
||||||
* **Résultat:** Modifie le rôle: son nom et/ou ses permissions.
|
* **Résultat:** Modifie le rôle: son nom et/ou ses permissions.
|
||||||
@ -1398,15 +1453,15 @@ mais pas JSON compliant à cause des `NaN`.
|
|||||||
(format court spécial BUT, disponible en format PDF seulement).
|
(format court spécial BUT, disponible en format PDF seulement).
|
||||||
* format `json` ou `pdf` (`json` par défaut, ajoutez `/pdf` pour la version
|
* format `json` ou `pdf` (`json` par défaut, ajoutez `/pdf` pour la version
|
||||||
pdf)
|
pdf)
|
||||||
|
|
||||||
(*à vérifier*) Pour les formations classiques (toutes sauf BUT), les bulletins
|
(*à vérifier*) Pour les formations classiques (toutes sauf BUT), les bulletins
|
||||||
JSON peuvent ou non indiquer les matières. Par défaut (version `long`), il est
|
JSON peuvent ou non indiquer les matières. Par défaut (version `long`), il est
|
||||||
structuré en `UEs / modules`.
|
structuré en `UEs / modules`.
|
||||||
|
|
||||||
Les notes moyennes de matières ne sont calculées que si l'option
|
Les notes moyennes de matières ne sont calculées que si l'option
|
||||||
"*Afficher les matières sur les bulletins*" est activée pour le formsemestre
|
"*Afficher les matières sur les bulletins*" est activée pour le formsemestre
|
||||||
considéré (sinon, la note vaut toujours "*nd*"). `
|
considéré (sinon, la note vaut toujours "*nd*"). `
|
||||||
|
|
||||||
Les versions PDF sont par défaut identiques à celles servies dans ScoDoc. Avec
|
Les versions PDF sont par défaut identiques à celles servies dans ScoDoc. Avec
|
||||||
l'option `/pdf/nosig`, les signatures en fin de bulletin sont omises.
|
l'option `/pdf/nosig`, les signatures en fin de bulletin sont omises.
|
||||||
|
|
||||||
@ -1424,13 +1479,13 @@ mais pas JSON compliant à cause des `NaN`.
|
|||||||
* **Routes:** `/formsemestre/<int:formsemestre_id>/programme`
|
* **Routes:** `/formsemestre/<int:formsemestre_id>/programme`
|
||||||
* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/programme`
|
* **Exemple d'utilisation:** `/ScoDoc/api/formsemestre/1/programme`
|
||||||
* **Résultat:** Retourne la structure d'un formsemestre sous 5 entrées d'un dictionnaire:
|
* **Résultat:** Retourne la structure d'un formsemestre sous 5 entrées d'un dictionnaire:
|
||||||
|
|
||||||
* **`ues`**: liste des UEs
|
* **`ues`**: liste des UEs
|
||||||
* **`ressources`**: liste des ressources (BUT)
|
* **`ressources`**: liste des ressources (BUT)
|
||||||
* **`saes`**: liste des SAÉs (BUT)
|
* **`saes`**: liste des SAÉs (BUT)
|
||||||
* **`modules`**: liste des modules classiques (DUT ou sport/culture)
|
* **`modules`**: liste des modules classiques (DUT ou sport/culture)
|
||||||
* **`malus`**: listes des modules de type bonus/malus.
|
* **`malus`**: listes des modules de type bonus/malus.
|
||||||
|
|
||||||
* **Exemple de résultat:** [formsemestre-programme.json](samples/sample_formsemestre-programme.json.md)
|
* **Exemple de résultat:** [formsemestre-programme.json](samples/sample_formsemestre-programme.json.md)
|
||||||
|
|
||||||
#### **formsemestre-resultats**
|
#### **formsemestre-resultats**
|
||||||
@ -1561,15 +1616,15 @@ valeurs numériques mais pas JSON compliant à cause des `NaN`.
|
|||||||
* **Permission: `ScoSuperAdmin`**
|
* **Permission: `ScoSuperAdmin`**
|
||||||
* **Paramètres:** Aucun
|
* **Paramètres:** Aucun
|
||||||
* **Route :**
|
* **Route :**
|
||||||
|
|
||||||
* `/departement/<string:dept>/logos`
|
* `/departement/<string:dept>/logos`
|
||||||
* `/departement/id/<int:departement_id>/logos`
|
* `/departement/id/<int:departement_id>/logos`
|
||||||
|
|
||||||
* **Exemple d'utilisation :**
|
* **Exemple d'utilisation :**
|
||||||
|
|
||||||
* `/departement/<string:dept>/logos`
|
* `/departement/<string:dept>/logos`
|
||||||
* `/departement/id/<int:departement_id>/logos`
|
* `/departement/id/<int:departement_id>/logos`
|
||||||
|
|
||||||
* **Résultat :** Liste des noms des logos définis pour le département visé qui peut être désigné par son id ou par son acronyme (selon la forme de la route).
|
* **Résultat :** Liste des noms des logos définis pour le département visé qui peut être désigné par son id ou par son acronyme (selon la forme de la route).
|
||||||
* **Exemple de résultat:** [departement-logos.json](samples/sample_departement-logos.json.md)
|
* **Exemple de résultat:** [departement-logos.json](samples/sample_departement-logos.json.md)
|
||||||
|
|
||||||
@ -1582,10 +1637,10 @@ valeurs numériques mais pas JSON compliant à cause des `NaN`.
|
|||||||
* `/departement/<string:dept>/logo/<string:nom>`
|
* `/departement/<string:dept>/logo/<string:nom>`
|
||||||
* `/departement/id/<int:departement_id>/logo/<string:nom>`
|
* `/departement/id/<int:departement_id>/logo/<string:nom>`
|
||||||
* **Exemple d'utilisation:**
|
* **Exemple d'utilisation:**
|
||||||
|
|
||||||
* `/ScoDoc/api/departement/MMI/logo/header`
|
* `/ScoDoc/api/departement/MMI/logo/header`
|
||||||
* `/ScoDoc/api/departement/id/3/logo/header`
|
* `/ScoDoc/api/departement/id/3/logo/header`
|
||||||
|
|
||||||
* **Résultat :** l'image (format png ou jpg)
|
* **Résultat :** l'image (format png ou jpg)
|
||||||
* **Exemple de résultat:** [departement-logo.json](samples/sample_departement-logo.json.md)
|
* **Exemple de résultat:** [departement-logo.json](samples/sample_departement-logo.json.md)
|
||||||
|
|
||||||
@ -1626,7 +1681,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
* **Méthode:** GET
|
* **Méthode:** GET
|
||||||
* **Permission: `ScoView`**
|
* **Permission: `ScoView`**
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
* `etudid`
|
* `etudid`
|
||||||
* `nip`
|
* `nip`
|
||||||
* `ine`
|
* `ine`
|
||||||
@ -1658,7 +1713,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
* **Méthode:** GET
|
* **Méthode:** GET
|
||||||
* **Permission: `ScoView`**
|
* **Permission: `ScoView`**
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
* `etudid`
|
* `etudid`
|
||||||
* `nip`
|
* `nip`
|
||||||
* `ine`
|
* `ine`
|
||||||
@ -1767,7 +1822,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
```json
|
```json
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
"etudid":<int>,
|
"etudid":<int>,
|
||||||
|
|
||||||
"date_debut": <string>,
|
"date_debut": <string>,
|
||||||
@ -1793,7 +1848,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
* **Méthode:** POST
|
* **Méthode:** POST
|
||||||
* **Permission: `ScoAbsChange`**
|
* **Permission: `ScoAbsChange`**
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
* `etudid`
|
* `etudid`
|
||||||
* `nip`
|
* `nip`
|
||||||
* `ine`
|
* `ine`
|
||||||
@ -1901,15 +1956,16 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
| attribut | type | commentaire |
|
| attribut | type | commentaire |
|
||||||
| :----------- | :------------- | :------------------------------------------------------------ |
|
| :----------- | :------------- | :------------------------------------------------------------ |
|
||||||
| *justif_id* | int | identifiant unique |
|
| *justif_id* | int | identifiant unique |
|
||||||
| *etudid* | int | identifiant unique de l'étudiant concerné par le justificatif |
|
| *etudid* | int | identifiant unique de l'étudiant concerné par le justificatif |
|
||||||
| *date_debut* | string | date ISO du début de la période du justificatif |
|
| *date_debut* | string | date ISO du début de la période du justificatif |
|
||||||
| *date_fin* | string | date ISO de la fin de la période du justificatif |
|
| *date_fin* | string | date ISO de la fin de la période du justificatif |
|
||||||
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
|
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
|
||||||
| *raison* | string ou null | explication du justificatif si présente |
|
| *raison* | string ou null | explication du justificatif si présente |
|
||||||
| *fichier* | string | identifiant de l'archivage des fichiers |
|
| *fichier* | string | identifiant de l'archivage des fichiers |
|
||||||
|*user_id* | int or null | identifiant de l'utilisateur ayant créé le justificatif |
|
| *user_id* | int or null | id de l'utilisateur ayant créé le justificatif |
|
||||||
| *entry_date* | string | date ISO de l'entrée du justificatif |
|
| *user_name* | str ou null | login de l'utilisateur ayant créé le justificatif |
|
||||||
|
| *entry_date* | string | date ISO de l'entrée du justificatif |
|
||||||
|
|
||||||
#### **justificatif**
|
#### **justificatif**
|
||||||
|
|
||||||
@ -1925,7 +1981,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
* **Méthode:** GET
|
* **Méthode:** GET
|
||||||
* **Permission: `ScoView`**
|
* **Permission: `ScoView`**
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
* `etudid`
|
* `etudid`
|
||||||
* `nip`
|
* `nip`
|
||||||
* `ine`
|
* `ine`
|
||||||
@ -1953,7 +2009,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
* **Méthode:** POST
|
* **Méthode:** POST
|
||||||
* **Permission: `ScoAbsChange`**
|
* **Permission: `ScoAbsChange`**
|
||||||
* **Paramètres:**
|
* **Paramètres:**
|
||||||
* `etudid`
|
* `etudid`
|
||||||
* `nip`
|
* `nip`
|
||||||
* `ine`
|
* `ine`
|
||||||
@ -1973,7 +2029,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
|
|
||||||
> Un fichier justificatif peut être importé dans scodoc après avoir créer l'objet justificatif voir [importer un justificatif](FichiersJustificatifs.md#importer-un-fichier)
|
> Un fichier justificatif peut être importé dans scodoc après avoir créer l'objet justificatif voir [importer un justificatif](FichiersJustificatifs.md#importer-un-fichier)
|
||||||
|
|
||||||
* **Routes:**
|
* **Routes:**
|
||||||
* `/justificatif/<int:etudid>/create`
|
* `/justificatif/<int:etudid>/create`
|
||||||
* `/justificatif/etudid/<etudid>/create`
|
* `/justificatif/etudid/<etudid>/create`
|
||||||
* `/justificatif/nip/<nip>/create`
|
* `/justificatif/nip/<nip>/create`
|
||||||
@ -2094,7 +2150,7 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
|
|||||||
* **Paramètres:** `justif_id`
|
* **Paramètres:** `justif_id`
|
||||||
* **Routes:** `/justificatif/<int:justif_id>/list`
|
* **Routes:** `/justificatif/<int:justif_id>/list`
|
||||||
* **Exemple d'utilisation:** `/api/justificatif/1/list`
|
* **Exemple d'utilisation:** `/api/justificatif/1/list`
|
||||||
* **Résultat:**
|
* **Résultat:**
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"filenames" : [
|
"filenames" : [
|
||||||
|
@ -59,10 +59,10 @@ Par ailleurs, chaque semestre est associé à une étape Apogée (VET), et, en
|
|||||||
option, à un code d'élément annuel et un code d'élément semestre. Pour le
|
option, à un code d'élément annuel et un code d'élément semestre. Pour le
|
||||||
deuxième semestre 5S2) du DUT R&T Villetaneuse, cela donne:
|
deuxième semestre 5S2) du DUT R&T Villetaneuse, cela donne:
|
||||||
|
|
||||||
* Code étape (VET): `V1RT` (l'étape est annuelle)
|
- Code étape (VET): `V1RT` (l'étape est annuelle)
|
||||||
* Code année (ELP): `VRT1A` (cet élément contiendra exactement les mêmes
|
- Code année (ELP): `VRT1A` (cet élément contiendra exactement les mêmes
|
||||||
informations que le VET)
|
informations que le VET)
|
||||||
* Code semestre (ELP): `VRTW2` (la note de ces élément sera la moyenne générale
|
- Code semestre (ELP): `VRTW2` (la note de ces élément sera la moyenne générale
|
||||||
du semestre)
|
du semestre)
|
||||||
|
|
||||||
Notez que la nomenclature est variable et souvent peu prévisible, même au sein
|
Notez que la nomenclature est variable et souvent peu prévisible, même au sein
|
||||||
@ -97,13 +97,13 @@ Apogée.
|
|||||||
|
|
||||||
### Précautions à prendre et remarques diverses
|
### Précautions à prendre et remarques diverses
|
||||||
|
|
||||||
* **Codage des fichiers**: Apogée (du moins à l'Université Paris 13) exporte et
|
- **Codage des fichiers**: Apogée (du moins à l'Université Paris 13) exporte et
|
||||||
importe des fichiers maquettes codés en latin-1 (ISO-8859-1). Les web
|
importe des fichiers maquettes codés en latin-1 (ISO-8859-1). Les web
|
||||||
services (portail Apogée), tout comme ScoDoc, travaillent en utf8. Pour
|
services (portail Apogée), tout comme ScoDoc, travaillent en utf8. Pour
|
||||||
faciliter les échanges, les fichiers maquettes importés et exportés de ScoDoc
|
faciliter les échanges, les fichiers maquettes importés et exportés de ScoDoc
|
||||||
sont en latin-1 (sauf celui reçu du portail Apogée).
|
sont en latin-1 (sauf celui reçu du portail Apogée).
|
||||||
|
|
||||||
* **Format des nombres** (notes): les notes sont calculées par ScoDoc en haute
|
- **Format des nombres** (notes): les notes sont calculées par ScoDoc en haute
|
||||||
précision, mais affichées avec deux chiffres après la virgule dans
|
précision, mais affichées avec deux chiffres après la virgule dans
|
||||||
l'application (ce qui donne 4 chiffres significatifs, par exemple *12,34*,
|
l'application (ce qui donne 4 chiffres significatifs, par exemple *12,34*,
|
||||||
soit une précision de un pour dix mille, ce qui semble plus que suffisant
|
soit une précision de un pour dix mille, ce qui semble plus que suffisant
|
||||||
@ -118,14 +118,15 @@ Apogée.
|
|||||||
|
|
||||||
![Config. précision exports Apogée](screens/apo-precision.png)
|
![Config. précision exports Apogée](screens/apo-precision.png)
|
||||||
|
|
||||||
* **Étudiants démissionnaires**: on note les démissions dans ScoDoc (sur la fiche
|
- **Étudiants démissionnaires**: on note les démissions dans ScoDoc (sur la fiche
|
||||||
de l'étudiant), mais en général pas dans Apogée. Le résultat Apogée sera DEF.
|
de l'étudiant), mais en général pas dans Apogée. Le résultat Apogée sera DEF.
|
||||||
Ne jamais désinscrire du semestre ScoDoc les démissionnaires !
|
Ne jamais désinscrire du semestre ScoDoc les démissionnaires !
|
||||||
|
|
||||||
* Exports à **mi-année** (après jurys de janvier): Si `periode==1` (jury de janvier),
|
- Exports à **mi-année** (après jurys de janvier): Si `periode==1` (jury de janvier),
|
||||||
alors l'étape Apogée (annuelle) n'est pas terminée.
|
alors l'étape Apogée (annuelle) n'est pas terminée.
|
||||||
Donc on ne remplit pas le code annuel (`elt_annee_apo`, comme `VRT1A`) ni le
|
Donc on ne remplit pas le code annuel (`elt_annee_apo`, comme `VRT1A`) ni le
|
||||||
`VET` sauf si l'année est en fait validée grâce à un semestre de l'an
|
`VET` sauf si l'année est en fait validée grâce à un semestre de l'an
|
||||||
précédent: (voir r1525)
|
précédent: (voir r1525)
|
||||||
* jury de fin de S1: si le S2 est validé;
|
|
||||||
* jury de fin de S3: si le S4 est validé.
|
- jury de fin de S1: si le S2 est validé;
|
||||||
|
- jury de fin de S3: si le S4 est validé.
|
||||||
|
@ -42,7 +42,7 @@ première erreur, et `--pdb` lance directement le debugger sur l'erreur.
|
|||||||
Ainsi,
|
Ainsi,
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pytest --pdb -x tests/api/test_api_departements.py
|
pytest --pdb -x tests/api/test_api_departements.py
|
||||||
```
|
```
|
||||||
|
|
||||||
lancera un test en mode "interactif", utile pour les mises au point.
|
lancera un test en mode "interactif", utile pour les mises au point.
|
||||||
@ -78,7 +78,7 @@ même hôte, donc `http://localhost:8678`.
|
|||||||
Lancement:
|
Lancement:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
/opt/scodoc/tools/fakeportal/fakeportal.py
|
/opt/scodoc/tools/fakeportal/fakeportal.py
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tests de l'API ScoDoc9
|
## Tests de l'API ScoDoc9
|
||||||
@ -121,6 +121,8 @@ l'initialiser et la peupler de données fictives pour les tests.
|
|||||||
flask run --host 0.0.0.0 --debug
|
flask run --host 0.0.0.0 --debug
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Le script `tests/api/start_api_server.sh -p 5555` fait tout cela pour vous !
|
||||||
|
|
||||||
### 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