misc corrections

This commit is contained in:
Emmanuel Viennet 2024-01-26 11:53:55 +01:00
parent 4c58b40eef
commit 85fdb885cc
6 changed files with 127 additions and 68 deletions

View File

@ -7,15 +7,15 @@
est normalement intégré à votre éditeur (VSCode et PyCharm sont deux choix
judicieux).
- outre Python, les principaux composants logiciels sont:
- [Flask](https://flask-sqlalchemy.palletsprojects.com/en/2.x/): le
framework Web, dont on utilise notamment:
- l'ORM [SQLAlchemy](https://www.sqlalchemy.org/)
- les templates [Jinja2](https://jinja.palletsprojects.com/en/3.0.x/)
- [Postgresql](https://www.postgresql.org/)
- [Redis](https://redis.io/) cache persistant
- [NGINX](https://www.nginx.com/) serveur Web frontal
- [gunicorn](https://gunicorn.org/) WSGI HTTP server
- et bien sûr Linux (Debian 12 en 2023-2024) et systemd.
- [Flask](https://flask-sqlalchemy.palletsprojects.com/en/2.x/): le
framework Web, dont on utilise notamment:
- l'ORM [SQLAlchemy](https://www.sqlalchemy.org/)
- les templates [Jinja2](https://jinja.palletsprojects.com/en/3.0.x/)
- [Postgresql](https://www.postgresql.org/)
- [Redis](https://redis.io/) cache persistant
- [NGINX](https://www.nginx.com/) serveur Web frontal
- [gunicorn](https://gunicorn.org/) WSGI HTTP server
- et bien sûr Linux (Debian 12 en 2023-2024) et systemd.
## Principaux objets
@ -29,9 +29,9 @@ Principales classes (les noms des classes Python sont en `CamelCase`).
- Étudiants (classe `Identite`): nom, codes INE/NIP, etc
- Formations: programmes pédagogiques, contenant
- Unités d'Enseignement (`UniteEns`);
- Matières et Modules (`Module`, avec son type standard, bonus, ressources
ou SAÉ).
- Unités d'Enseignement (`UniteEns`);
- Matières et Modules (`Module`, avec son type standard, bonus, ressources
ou SAÉ).
- FormSemestre: instanciation d'une session de formation, avec un programme
pédagogique donné (Formation), les dates de début et fin, des étudiants
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
décorateurs:
- `@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
`g.scodoc_dept_id` (l'id du dépt. courant).
- `@permission_required`: permet de contrôler l'accès, en se basant sur les
permissions définies dans la classe `Permission`.
- `@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
`g.scodoc_dept_id` (l'id du dépt. courant).
- `@permission_required`: permet de contrôler l'accès, en se basant sur les
permissions définies dans la classe `Permission`.
```
```py
@bp.route("/un_exemple")
@scodoc
@permission_required(Permission.EditFormation)

View File

@ -88,7 +88,7 @@ On a ici:
- identifiant du groupe: dans `SUMMARY`, `* - <groupe>`
- identifiant du module: on a le code `VCYR303` à trois endroits: `SUMMARY`,
`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

View File

@ -86,7 +86,7 @@ Au besoin, mémo:
- 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_),
affiche toutes les 3 secondes.

View File

@ -1042,8 +1042,10 @@ responsable et ses enseignants). La liste des moduleimpl d'un formsemestre peut
* **Résultat:** Description du moduleimpl.
* **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
* **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.
* **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**
#### Structure Partition
@ -1901,15 +1956,16 @@ Cette API est disponible à partir de ScoDoc 9.6 et remplace les absences.
| attribut | type | commentaire |
| :----------- | :------------- | :------------------------------------------------------------ |
| *justif_id* | int | identifiant unique |
| *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_fin* | string | date ISO de la fin de la période du justificatif |
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
| *raison* | string ou null | explication du justificatif si présente |
| *fichier* | string | identifiant de l'archivage des fichiers |
|*user_id* | int or null | identifiant de l'utilisateur ayant créé le justificatif |
| *entry_date* | string | date ISO de l'entrée du justificatif |
| *justif_id* | int | identifiant unique |
| *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_fin* | string | date ISO de la fin de la période du justificatif |
| *etat* | string | état du justificatif ( attente, valide, non_valide, modifie) |
| *raison* | string ou null | explication du justificatif si présente |
| *fichier* | string | identifiant de l'archivage des fichiers |
| *user_id* | int or null | id de l'utilisateur ayant créé le 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**

View File

@ -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
deuxième semestre 5S2) du DUT R&T Villetaneuse, cela donne:
* Code étape (VET): `V1RT` (l'étape est annuelle)
* Code année (ELP): `VRT1A` (cet élément contiendra exactement les mêmes
- Code étape (VET): `V1RT` (l'étape est annuelle)
- Code année (ELP): `VRT1A` (cet élément contiendra exactement les mêmes
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)
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
* **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
services (portail Apogée), tout comme ScoDoc, travaillent en utf8. Pour
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).
* **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
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
@ -118,14 +118,15 @@ Apogée.
![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.
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.
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
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é.

View File

@ -121,6 +121,8 @@ l'initialiser et la peupler de données fictives pour les tests.
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
1. Copier le fichier `scodoc/tests/api/dotenv_exemple` dans