Compare commits

...

40 Commits

Author SHA1 Message Date
Arthur ZHU c900c4f411 Merge branch 'master' of https://scodoc.org/git/viennet/DocScoDoc 2021-12-30 15:00:59 +01:00
Emmanuel Viennet 7e32332f4c mise en forme 2021-12-30 13:40:30 +01:00
Emmanuel Viennet f41ff469f8 Merge pull request 'typos + compléments' (#14) from jmplace/DocScoDoc:doc_PR#3 into master
Reviewed-on: viennet/DocScoDoc#14
2021-12-30 13:34:41 +01:00
Jean-Marie PLACE 126c034c58 typos + compléments 2021-12-30 11:42:18 +01:00
Emmanuel Viennet e7ae9a6a91 blocs de code: mode bash 2021-12-30 10:55:32 +01:00
Emmanuel Viennet ccb90ef8b9 mise en forme 2021-12-30 10:15:20 +01:00
Emmanuel Viennet 78a51f8697 ajouts et corrections 2021-12-30 09:58:58 +01:00
Emmanuel Viennet 6f032db036 Merge pull request 'complémennts pull_request' (#13) from jmplace/DocScoDoc:PR#2 into master
Reviewed-on: viennet/DocScoDoc#13
2021-12-30 09:48:50 +01:00
leonard_montalbano c893c96b3b complémennts pull_request 2021-12-29 23:29:24 +01:00
Emmanuel Viennet 5ffd0749ea Merge pull request 'modification suite à la réunion du 20/12/2021' (#11) from leonard.montalbano/DocScoDoc:master into master
Reviewed-on: viennet/DocScoDoc#11
2021-12-21 17:22:54 +01:00
Emmanuel Viennet 4b9a044bb2 maj liste commandes + détails internes 2021-12-21 17:12:58 +01:00
leonard_montalbano d7df642b71 modification suite à la réunion du 20/12/2021 2021-12-21 15:56:23 +01:00
Emmanuel Viennet 1f9a09c70c Ajout commande user-role 2021-12-21 00:03:35 +01:00
Emmanuel Viennet bb1caaf32c Merge remote-tracking branch 'origin' 2021-12-20 19:40:59 +01:00
Emmanuel Viennet 6d1e4d1ece début doc interne développeurs 2021-12-20 19:34:55 +01:00
Emmanuel Viennet 69c5ad9b23 Merge pull request 'complements_logos' (#9) from jmplace/DocScoDoc:complements_logos into master
Reviewed-on: viennet/DocScoDoc#9
2021-12-20 19:30:09 +01:00
Jean-Marie PLACE 4d56488159 ajout api logos 2021-12-20 17:44:45 +01:00
Jean-Marie PLACE 6360782fb4 correctif mise en forme doc logo 2021-12-20 17:23:45 +01:00
Emmanuel Viennet e62c81338d petites corrections 2021-12-18 14:39:55 +01:00
Arthur ZHU 0e79f99e1a modif fiche relations entreprises 2021-12-18 14:39:55 +01:00
Emmanuel Viennet 7cd56f4059 corrections et questions 2021-12-18 14:39:55 +01:00
Arthur ZHU 7f64c8c111 modif page relations entreprires 2021-12-18 14:39:55 +01:00
Arthur ZHU bec9f78764 modif page relations entreprises 2021-12-18 14:39:55 +01:00
Arthur ZHU aed7133ab2 ajout page relations entreprises 2021-12-18 14:39:55 +01:00
Emmanuel Viennet a039e71c06 Merge pull request 'complément doc sur logos' (#8) from jmplace/DocScoDoc:complete_doc_logos into master
Reviewed-on: viennet/DocScoDoc#8
2021-12-13 12:42:05 +01:00
Jean-Marie Place e76e441e90 complément doc sur logos 2021-12-12 23:16:21 +01:00
Emmanuel Viennet 69e528a5bc ajout methode donnant les groupes d'un étudiant 2021-11-19 17:14:58 +01:00
Emmanuel Viennet d409fd66a9 mise en page + qq remarques sur l'API 2021-11-19 16:36:03 +01:00
Emmanuel Viennet fe583938e0 Documention future API REST 2021-11-19 11:18:02 +01:00
Emmanuel Viennet 8be16fa32e Merge pull request 'master' (#6) from leonard.montalbano/DocScoDoc:master into master
Reviewed-on: viennet/DocScoDoc#6
2021-11-19 10:34:08 +01:00
leonard_montalbano ca7a2fe546 revision doc api scodoc9 2021-11-18 17:16:04 +01:00
leonard_montalbano f280ecf541 amélioration suite au retour du pdf 2021-11-16 15:17:07 +01:00
leonard_montalbano 873c038640 petit ajustement a droite a gauche de la doc api scodoc 9 2021-11-15 16:14:16 +01:00
Emmanuel Viennet 3825e37fbb Merge pull request 'enrichissement API scodoc9' (#4) from leonard.montalbano/DocScoDoc:master into master
Reviewed-on: viennet/DocScoDoc#4

(penser à virer le gitignore)
2021-11-12 10:15:50 +01:00
leonard_montalbano a176adf27b ajout d'informations complémentaires sur la doc scodoc9 2021-11-10 13:22:10 +01:00
Emmanuel Viennet 2db0930bca ajout evaluation_listenotes et indique noms dans future API) 2021-11-09 22:24:57 +01:00
Emmanuel Viennet 2d4b651ec7 debut doc nouvelel API à reformatter 2021-11-09 21:37:37 +01:00
Emmanuel Viennet b125025eca roadmap 2021-11-09 21:36:36 +01:00
Emmanuel Viennet d5f2acd896 added groups_view 2021-11-01 19:06:52 +01:00
Emmanuel Viennet 6ed0ab6ab7 modif page API 2021-10-28 10:23:28 +02:00
14 changed files with 1299 additions and 915 deletions

View File

@ -43,7 +43,7 @@ niveaux) et UEs.
## Calcul des notes
Les rôles des SAÉ et ressources étant symétriques, on appellera dans al suite (et
Les rôles des SAÉ et ressources étant symétriques, on appellera dans la suite (et
dans ScoDoc) *module* un objet de type SAÉ _ou_ ressource.
Dans la suite, on considère les poids et coefficients toujours positifs ou
@ -80,7 +80,7 @@ réduit d'apprentissages critiques:
La note (moyenne) d'un module (SAÉ ou ressource) se calcule à partir de ses
évaluations. Chaque évaluation est pondérée, par un poids $p$ est fixé par
l'enseignant. ce poids joue le même rôle que le coefficient d'une évaluation
l'enseignant. Ce poids joue le même rôle que le coefficient d'une évaluation
classique, mais peut se décliner en plusieurs valeurs, une par UE associée au
module.
@ -96,7 +96,7 @@ une UE $u$ *doit* être non nulle; si ce n'est pas le cas, le module sera décla
### Moyenne de module (SAÉ ou ressource)
La moyenne d'un module est un vecteur, car on a une note moyenne par UE:
La moyenne d'un étudiant dans un module est un vecteur, car on a une note moyenne par UE:
$$\mu_{m, u} = \frac{\sum_e p_{e,u} \, n_e}{\sum_{e} \, p_{u,e}}$$
@ -110,7 +110,7 @@ $$\mu_m = \frac{\sum_e (\sum_u p_{e,u}) \, n_e}{\sum_{u,e} \, p_{u,e}}$$
On va considérer les coefficients de modules et d'évaluations:
$$\mu_u = \frac{1}{\sum_m c_{u,m}} \, \sum_{m \in u} c_{u,m} \, \frac{\sum_e p_{e,u} \, n_e}{\sum_{e} \, p_{u,e}}$$
$$\mu_u = \frac{1}{\sum_m c_{u,m}} \, \sum_{m \in u} c_{u,m} \, \frac{\sum_e p_{e,u} \, n_e}{\sum_{e} \, p_{e,u}}$$
L'exemple suivant illustre ce mode de calcul:

View File

@ -34,7 +34,7 @@ référer à [GuideInstallDebianDix](GuideInstallDebianDix.md) ou
## Utilisation avancée
* [Interfaçage avec Apogée](ScoDocApogee.md)
* [API](ScoDocAPI.md) : API JSON ou XML pour interfaçage avec d'autres applications
* [API](ScoDoc9API.md) : API JSON ou XML pour interfaçage avec d'autres applications
* [ServicesXml](ServicesXml.md) : web services XML pour interfaçage avec d'autres applications (obsolète).
* [AdminUsers](AdminUsers.md) : gestion des utilisateurs
* [InterrogationPortail](InterrogationPortail.md) : liaison avec portail

View File

@ -88,6 +88,20 @@ Exemple: création d'une rôle "Observateur" ayant juste la persmision de "voir"
Ajoute ou retire une permission.
## Ajout/retrait d'un rôle à un utilisateur
flask user-role username [-d departement] [-a RoleAAjouter] [-r RoleARetirer]
Exemple:
flask user-role dupont -d MMI -a Observateur
donne le rôle `Observateur` (qui doit déjà exister) à l'utilisateur `dupont` dans
le département `MMI`.
Si le département n'est pas spécifié, le rôle est donné dans *tous* les
départements (utile pour certains compte administrateurs ou utilisés en lecture
par des clients de l'API).
## Migration des données de ScoDoc 7
Les données dans ScoDoc 9 ayant un format et une organisation très différents
@ -118,26 +132,44 @@ Exemple:
## Liste des commandes Flask/ScoDoc
```
Commands:
clear-cache Clear ScoDoc cache (currently Redis)
create-dept Create new departement
delete-dept Delete existing departement
edit-role Add [-a] and/or remove [-r] a permission to/from a role
import-scodoc7-dept Import département ScoDoc 7
import-scodoc7-users Import users defined in ScoDoc7 postgresql
sco-db-init Initialize the database.
user-create Create a new user
user-db-clear Erase all users and roles from the database !
user-password Set (or change) user's password
clear-cache Clear ScoDoc cache This cache (currently...
create-dept Create new departement
create-role Create a new role
delete-role Delete a role
delete-dept Delete existing departement
dumphelp
edit-role Add [-a] and/or remove [-r] a permission...
import-scodoc7-dept Import département ScoDoc 7: dept:...
import-scodoc7-users Import users defined in ScoDoc7...
list-depts If dept exists, print it, else nothing.
localize-logo Make local to a dept a global logo (both...
migrate-scodoc7-dept-archives Post-migration: renomme les archives en...
migrate-scodoc7-dept-logos Post-migration: renomme les logos en...
photos-import-files
profile Start the application under the code...
sco-db-init Initialize the database.
scodoc-database print the database connexion string
user-create Create a new user
user-db-clear Erase all users and roles from the...
user-password Set (or change) user's password
user-role Add or remove a role to the given user...
Usage: app sco-db-init [OPTIONS]
Initialize the database. Starts from an existing database and create all the
necessary SQL tables and functions.
Options:
--erase / --no-erase
--help Show this message and exit.
Usage: app user-db-clear [OPTIONS]
Erase all users and roles from the database !
Options:
--help Show this message and exit.
Usage: app user-create [OPTIONS] USERNAME ROLE DEPT
Create a new user
@ -145,7 +177,7 @@ Usage: app user-create [OPTIONS] USERNAME ROLE DEPT
Options:
-n, --nom TEXT
-p, --prenom TEXT
--help Show this message and exit.
Usage: app user-password [OPTIONS] USERNAME
@ -153,7 +185,14 @@ Usage: app user-password [OPTIONS] USERNAME
Options:
--password TEXT
--help Show this message and exit.
Usage: app create-role [OPTIONS] ROLENAME [PERMISSIONS]...
Create a new role
Options:
--help Show this message and exit.
Usage: app edit-role [OPTIONS] ROLENAME
@ -166,42 +205,117 @@ Usage: app edit-role [OPTIONS] ROLENAME
Options:
-a, --add TEXT
-r, --remove TEXT
--help Show this message and exit.
Usage: app user-role [OPTIONS] USERNAME
Usage: app delete-dept DEPT
Add or remove a role to the given user in the given dept
Options:
-d, --dept TEXT
-a, --add TEXT
-r, --remove TEXT
--help Show this message and exit.
Usage: app delete-dept [OPTIONS] DEPT
Delete existing departement
Options:
--help Show this message and exit.
Usage: app create-dept DEPT
Usage: app create-dept [OPTIONS] DEPT
Create new departement
Options:
--help Show this message and exit.
Usage: app import-scodoc7-users
Usage: app list-depts [OPTIONS] [DEPTS]...
Import used defined in ScoDoc7 postgresql database into ScoDoc 9 The old
If dept exists, print it, else nothing. Called without arguments, list all
depts along with their ids.
Options:
--help Show this message and exit.
Usage: app scodoc-database [OPTIONS]
print the database connexion string
Options:
-n, --name show database name instead of connexion string (required for
dropdb/createdb commands)
--help Show this message and exit.
Usage: app import-scodoc7-users [OPTIONS]
Import users defined in ScoDoc7 postgresql database into ScoDoc 9 The old
database SCOUSERS must be alive and readable by the current user. This
script is typically run as unix user "scodoc". The original SCOUSERS
database is left unmodified.
Options:
--help Show this message and exit.
Usage: app import-scodoc7-dept DEPT DEPT_DB_NAME
Usage: app import-scodoc7-dept [OPTIONS] DEPT DEPT_DB_NAME
Import département ScoDoc 7: dept: InfoComm, dept_db_name: SCOINFOCOMM
Options:
--help Show this message and exit.
Usage: app clear-cache
Usage: app migrate-scodoc7-dept-archives [OPTIONS] [DEPT]
Post-migration: renomme les archives en fonction des id de ScoDoc 9
Options:
--help Show this message and exit.
Usage: app migrate-scodoc7-dept-logos [OPTIONS] [DEPT]
Post-migration: renomme les logos en fonction des id / dept de ScoDoc 9
Options:
--help Show this message and exit.
Usage: app localize-logo [OPTIONS] LOGO DEPT
Make local to a dept a global logo (both logo and dept names are mandatory)
Options:
--help Show this message and exit.
Usage: app photos-import-files [OPTIONS] FORMSEMESTRE_ID XLSFILE ZIPFILE
Options:
--help Show this message and exit.
Usage: app clear-cache [OPTIONS]
Clear ScoDoc cache This cache (currently Redis) is persistent between
invocation and it may be necessary to clear it during development or tests.
Options:
--help Show this message and exit.
Usage: app dumphelp [OPTIONS]
Options:
--help Show this message and exit.
Usage: app profile [OPTIONS]
Start the application under the code profiler.
Options:
-h, --host TEXT The interface to bind to.
-p, --port INTEGER The port to bind to.
--length INTEGER Number of functions to include in the profiler report.
--profile-dir TEXT Directory where profiler data files are saved.
--help Show this message and exit.
```
## Changement des logos apparaissant sur les documents
*Note: après migration, vos logos de ScoDoc 7 sont installés dans ScoDoc 9*.

View File

@ -9,7 +9,7 @@ Informations pour les développeurs souhaitant étendre ou modifier ScoDoc.
un serveur Discord ouvert sur invitation aux développeur actifs. Contacter Emmanuel.
* [Générer de nouveaux formats de bulletins PDF](ApiGenerationBulletinsPdf.md)
* [Créer de nouveaux types de "parcours"](ApiCreationParcours.md)
* [API](ScoDocAPI.md) : API JSON ou XML pour interfaçage avec d'autres applications
* [API](ScoDoc9API.md) : API JSON ou XML pour interfaçage avec d'autres applications
* Notes diverses
* [Discussions pour la future gestion des absences](IdeesGestionAbsences.md)
* [Anciennes discussions sur la gestion des plannings](IdeesGestionPlannings.md)
@ -56,7 +56,7 @@ Exemple:
### Git
Le dépot est <https://scodoc.org/git/viennet/ScoDoc>
Le dépôt est <https://scodoc.org/git/viennet/ScoDoc>
La branche `master` est celle de ScoDoc 9. La branche `Scodoc7` est l'ancienne
(jusqu'à septembre 2021) version en production.
@ -86,8 +86,9 @@ basique:
Vous travaillez dans votre branche `ma_branche`. Pour lui appliquer les mises à
jour de `master` (remote):
```bash
git pull origin master
```
#### Commandes utiles, en vrac
@ -97,29 +98,275 @@ jour de `master` (remote):
#### Refactoring
Lint tous les fichiers modifiés:
```bash
git status | grep modified | grep .py | awk '{print $2}' | xargs pylint -E
```
Restore les modes au besoin (SAMBA les changent parfois):
```bash
git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply
```
Affiche les variables non définies dans un fichier:
```bash
pylint --disable=all -e E sco_parcours_dut.py | grep undefined-variable | awk '{print $4;}' | sort | uniq | tr -d \'
```
Prépare un sed pour renommer les variables non définies:
```bash
for f in *.py
do
pylint --disable=all -e E "$f" | grep undefined-variable | awk '{print "sed -i .bak s/"$4"/scu."$4"/ '$f'";}' | sort | uniq | tr -d \'
done
```
Note pour travailler sur VirtualBox:
addgroup scodoc vboxsf
### Tests
### Préparation d'une PR (Pull Request)
#### Principes généraux
Les remarques de cette section visent à obtenir une relecture facile de votre
demande d'ajout (*pull request*, dite "PR"):
* Éviter les modifications de forme qui ne changent pas le sens du code. L'utilisation de
[`black`](https://black.readthedocs.io/) est obligatoire : elle permet de normaliser la présentation
du code. cela évite de générer des différences ne représentant que des
changements de mise en forme (indentation, passages à la ligne). Cela évite
aussi au développeur d'avoir à y réfléchir, autant de temps gagné !
* Avoir un nombre d'étapes de validation faible (idéalement un seul commit pour
les PR courantes - peu volumineuses).
* La PR doit toujours être énoncée par rapport au dernier commit de la branche
que vous visez (en général `master` du dépôt original).
#### Manipulations
Les manipulations sont décrites selon quatre phases du développement : l'installation,
la mise en place, le suivi et la livraison.
##### l'installation
Il est pratique d'avoir en ligne les deux dépôts git distants que vous pouvez
utiliser : votre dépôt personnel (`https://scodoc.org/git/<user>/<dépôt>.git`) et
le dépôt officiel (`https://scodoc.org/git/ScoDoc/ScoDoc.git`).
pour ajouter une référence (et lui donner un nom) vers un dépôt distant, entrez
la commande:
```bash
git remote add nom_remote https://scodoc.org/git/ScoDoc/<dépôt>.git
```
Par la suite vous aurez donc une référence vers votre dépôt personnel (`perso`)
et une référence vers le dépôt officiel (`officiel`). Si vous avez initialement
cloné l'un des deux dépôts, la référence vers le dépot d'origine existe et a pour nom
`origin`.
La commande vous exposant tous les dépôts connus est :
```bash
git remote -v
```
#### Mise en place
L'objectif de ce paragraphe est de créer une branche locale basée sur le master
du dépôt officiel et bien sur de lui donner un nom.
pour cela (**attention cela va écraser les éventuels fichiers modifiés**. Si vous souhaitez conserver les
modifications en cours, encadrez les lignes suivantes par `git stash` (avant) et `git stash apply` (après) :
```bash
git reset --hard officiel/master
git checkout -b ma_modif
```
À partir de là, vous pouvez modifier, tester, développer et commit votre travail.
#### Suivi
Si votre développement prend plusieurs jours, il est probable que la branche
principale évolue pendant ce temps.
Pour garder la cohérence, il est nécessaire de réintégrer en local les
modifications de la branche principale. Ceci peut se faire de deux façons.
- Une fusion (`merge`) applique toutes les modifications en un seul commit).
C'est la méthode couramment utilisée.
- Un `rebase` rejoue tous les commits de la nouvelle branche par dessus l'état
le plus à jour de la branche principale (il en résulte un historique plus
linéaire).
Les commandes git correspondantes :
```bash
git fetch officiel
git merge officiel/master
```
ou
```bash
git fetch officiel
git rebase officiel/merge
```
#### La livraison
Ça y est. Vous avez terminé le développement. IL n'y a plus qu'à demander
l'intégration. Ceci se fait en plusieurs étapes (vous êtes bien sûr toujours sur
la branche locale `ma_modif` et toutes vos modifications ont été commitées).
##### Étape 1 : faire l'inventaire des fichiers impliqués
```bash
git fetch officiel/master
git diff --name-only officiel/master
```
##### Étape 2 : passer black sur les fichiers modifiés
Cette étape est automatique avec les bons réglages sous VSCode (pas trouvé
l'équivalent sous *pyCharm*).
À défaut les lignes suivantes réalisent le même travail :
```bash
for fn in $(git diff --name-only officiel/master)
do
python3 -m black $fn
done
```
Faire une première lecture rapide pour vérifier qu'il ne reste pas de fichiers
modifiés accidentellement.
Pour obtenir la modification sur un fichier spécifique (`app/fichier.py` par exemple)
```bash
git diff officiel/master app/fichier.py
```
Utilisateurs Windows : Vérifiez bien que les réglages de fin de ligne suivent
bien les règles Linux (pas de retour chariot (noté CR ou `\r`) en fin de ligne mais un seul caractère line feed
(noté LF ou `\n`).
Le cas échéant, réglez votre IDE pour cela.
À ce niveau là de la procèdure, vous n'avez plus dans votre branche locale que les différences strictement
nécessaires à votre correctif.
##### Étape 3 : résumez tous les commits depuis le point de divergence en un seul commit
Repérez le point de divergence de votre branche locale avec officiel/master
(normalement `git merge-base HEAD officiel/master`)
Demander un `rebase` interactif depuis ce point :
```bash
git rebase -i $(git merge-base HEAD officiel/master)
```
*Explications*:
_Le rebase interactif permet d'enregistrer un suite de manipulation de commit dans un seul fichier texte._
_Le fichier texte qui reprend tels quels tous les commits concernés (et donc qui ne fait rien)_
_est préparé par la commande `-i` de la commande_ `git rebase`
_Vous pouvez ensuite modifier ce fichier dans votre editeur favori (ou pas) (à régler par `git config`) pour décrire_
_votre intention (réordonner, changer le message, fusionner, ...) sur l'ensemble des commits_
_Quand votre édition est terminée, git reprend la main est exécute chacune de vos opérations. Il est possible_
_(bien que très rare) que des conflits apparaissent à ce moment-là. Les_
_commandes habituelles de correction accompagnées des commandes :_
```bash
git rebase --continue # pour poursuivre le processus
git rebase --abort # pour tout abandonner
```
_vous permettront de résoudre ces problèmes exceptionnels_.
Application:
```bash
git rebase -i $(git merge-base HEAD officiel/master)
```
Vous devez obtenir dans un éditeur de texte la liste des commits opéré depuis le
début du développement sous cette forme (c'est un exemple : le nombre de lignes
peut varier) :
```bash
pick eb8cbec modif 1
pick 83eb79e modif 2
# Rebase 5ffd074..83eb79e onto 5ffd074 (2 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup [-C | -c] <commit> = like "squash" but keep only the previous
# commit's log message, unless -C is used, in which case
# keep only this commit's message; -c is same as -C but
# opens the editor
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# . create a merge commit using the original merge commit's
# . message (or the oneline, if no original merge commit was
# . specified); use -c <commit> to reword the commit message
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
```
Vous pouvez réorganiser tous les commits (changer l'ordre, fusionner) en
changeant la commande pick au début de chaque ligne. L'idée ici est de fusionner
toutes les lignes avec la première en remplaçant le 'pick' à partir de la ligne
2 par `fixup`. Optionnellement, vous pouvez reformuler le message de commit
(commande `reword` sur la première ligne).
Vous construirez par exemple :
```bash
reword eb8cbec Correctif: Api - gestion des formation
fixup 83eb79e modif 2
...
```
Quand vous sortez de l'éditeur, git effectue toutes les opérations demandées.
À ce niveau-là de la procédure :
* vous avez un seul commit pour l'ensemble du correctif proposé;
* toutes les différences entre officiel/master et votre branche locale sont
signifiantes.
##### Étape 4 :
Vous pouvez maintenant pousser votre branche locale sur votre dépôt personnel
(vers une branche de même nom):
```bash
git push --set-upstream perso ma_branche
```
Si vous avez déjà fait cette opération auparavant il est possible que le push
soit refusé (car le rebase a modifié des commits qui avaient déjà été poussés).
Dans ce cas l'option `--force` du push vous permette de passer outre, mais
assurez-vous avant d'être le seul à travailler sur cette branche.
##### Etape 5 : La dernière étape se passe sur le site [scodoc.org/git](https://scodoc.org/git/)
* Identifiez-vous
* Placez-vous sur la branche nouvellement créée
* À l'aide de l'interface du serveur, vous pouvez comparer l'état de votre
branche par rapport au master officiel, et si cela vous convient, il vous reste à formuler
une demande d'intégration (*pull request*). En remplissant les informations demandées.
## Tests et tests unitaires
Voir [TestsScoDoc](TestsScoDoc.md)

View File

@ -138,6 +138,7 @@ Puis créer un dossier `/etc/systemd/system/redis.service.d` contenant le fichie
ProtectKernelTunables=no
ProtectKernelModules=no
ReadWritePaths=
ReadOnlyDirectories=
Ensuite

75
docs/Internals.md Normal file
View File

@ -0,0 +1,75 @@
# Code de ScoDoc 9
Quelques informations pour les développeurs.
- le code est écrit en Python 3.9 (passage à 3.10 prévu en 2022).
- le code doit être formatté par [black](https://pypi.org/project/black/) qui
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) et systemd.
# Principaux objets
Les objets manipulés par ScoDoc sont pour la plupart stockés en base postgres et
accédé soit directement en SQL (anciennes parties de ScoDoc), soit à travers
l'ORM SQLAlchemy (recommandé pour tout nouveau code).
Les modèles correspondant sont déclarés dans `/opt/scodoc/app/models/`.
Principales classes (le nom de certaines classes Python est donné en
`CaractèresCommeCa`).
- É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É).
- 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.
- ModuleImpl: la mise en place d'un module pédagogique (le ModuleImpl est au
Module ce que le FormSemestre est à la Formation): lié à un module, avec un
enseignant responsable et des étudiants inscrits.
- Inscriptions: tables d'association avec codes et/ou état (démission,
défaillant): FormsemestreInscription ModuleImplInscription.
# Vues et décorateurs
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;
- `@permission_required`: permet de contrôler l'accès, en se basant sur les
permissions définies dans la classe `Permission`.
```
@bp.route("/un_exemple")
@scodoc
@permission_required(Permission.ScoChangeFormation)
def un_exemple():
# Récupérer le ou les arguments: exemple avec formation_id
formation_id = int(request.args["formation_id"])
# Charger le ou les objets utilies:
formation = models.Formation.query.get(
formation_id=formation_id
).first_or_404()
# Effectuer au besoin un traitement
resultat = ...
# Afficher le résultat
return render_template(
"exemple_template.html",
resultat=resultat, # par exemple
formation=formation,
... # etc
)
```

View File

@ -96,10 +96,42 @@ Le balisage XML est celui de [ReportLab](http://www.reportlab.com/) (intra-parag
### Logos
Une balise supplémentaire est interprétée par ScoDoc pour insérer des logos (images).
Les logos doivent être des images au format JPEG (extension `.jpg` uniquement), placées dans le répertoire `.../logos/`, et nommées `logo_xxx.jpg`.
Les logos sont des images au format JPEG (extension `.jpg` ou `.jpeg`) ou PNG (expension `.png`), téléversés sur le serveur scodoc et intégrables dans les documents html ou pdf.
La balise `<logo name="xxx" width="44mm" height="22mm" valign="+5mm"/>`, placée dans un paragraphe, insère alors le logo `xxx` avec les dimensions indiquées. Le paramètre `valign` règle le positionnement vertical par rapport à la ligne de texte courante.
Principes généraux :
* Un logo est désigné par un identifiant (nom) et peut être défini soit globalement, soit pour un département;
* le nom d'un logo est exclusiement composé de caractères alphanumériques ou du caractère '`-`';
* les logos définis globalement sont accessibles pour tous les départements. Toutefois, si un logo de même nom est également présent dans un département,
, c'est le logo du département qui sera utilisé en lieu et place de logo global;
* les logos de nom '`header`' et '`footer`' définis globalement ne peuvent être supprimés (mais peuvent être redéfinis).
L'enregistrement, la modification ou la suppression d'un logo peut être réalisé via la page de configuration qui est accessible aux
administrateurs Scodoc depuis la page d'accueil.
Ce formulaire comporte une section pour les définitions globales plus une section par département.
Une section présente la liste des logos avec leurs propriétés (la dimension est donnée à titre indicatif quand elle est disponible).
Pour chaque logo, les actions diponibles sont :
* Le remplacement de l'image existante par un nouveau fichier;
* la suppression du logo (sauf pour `header`et `footer`dans la section globale);
* l'ajout d'un nouveau logo dans une section (global ou département) et indiquant le nom.
*NB*. Quelle que soit l'opération effectuée, le nom du fichier téléversé n'a aucune importance
(Seul le nom indiqué dans le formulaire est pris en compte et le format du fichier est déduit des données propres du fichier)
La balise `<logo name="xxx" width="44mm" height="22mm" valign="+5mm"/>`, placée dans un paragraphe, insère le logo de nom `xxx` avec les dimensions indiquées.
Le paramètre `valign` règle le positionnement vertical par rapport à la ligne de texte courante.
Notez qu'il est possible de ne préciser que l'une des deux dimensions hauteur ou largeur.
Dans ce cas, la dimension manquante est déduite du ratio (rapport hauteur/largeur) de l'image originale.
Voir un exemple d'utilisation plus bas.

View File

@ -7,7 +7,7 @@ Pour communiquer aux étudiants leurs réultats, plusieurs solutions:
- Envoi des bulletins (pdf) par mail (c'est facile depuis le menu "Notes").
- Publication sur un autre site Web: typiquement l'ENT de l'établissement, ou un mini-site dédié.
- Pour interfacer un ENT, [voir l'API](ScoDocAPI.md).
- Pour interfacer un ENT, [voir l'API](ScoDoc9API.md).
- Plusieurs collègues ont développé des mini-sites pour publier les notes (accès protégé par CAS ou autre). Ces codes ne font pas stricto censu partie de ScoDoc. Quelques exemples en PHP sont distribués dans le répertoire `misc/PublicationBulletins` ([voir ici](https://scodoc.org/git/viennet/ScoDoc/src/branch/master/misc/PublicationBulletins)).
- Plus récemment (2020), des collègues de l'IUT de Mulhouse ont développé un mini-portail complet: [Scodoc_Notes](https://github.com/SebL68/Scodoc_Notes) (github), [historique](https://notes.iutmulhouse.uha.fr/maj.php).

View File

@ -8,6 +8,7 @@ Les utilisateurs interrogés insistent sur leur souhait d'avoir une interface si
## Principales fonctionnalités
L'application, intégrée à ScoDoc, fournira:
- Saisie et gestion des entreprises
- Saisie et gestion des offres de stage et d'apprentissage
- Envoi des offres aux responsables de formations

View File

@ -1,23 +1,43 @@
# Mise en place de sauvegardes des bases de données ScoDoc 9
Il est ***vivement recommandé*** de mettre en place une stratégie de sauvegarde permettant de rétablir le service en minimisant les pertes de données à la suite d'un accident majeur mais probable comme: crash de disque dur, bug, vol du serveur, incendie...
Il est ***vivement recommandé*** de mettre en place une stratégie de sauvegarde
permettant de rétablir le service en minimisant les pertes de données à la suite
d'un accident majeur mais probable comme: crash de disque dur, bug, vol du
serveur, incendie...
Nous recommandons d'agir à deux niveaux:
* sauvegarde des bases de données postgresql: dump des bases dans des fichiers. Le script donné ci-dessous peut se charger de gérer cela.
* sauvegarde des bases de données postgresql: dump des bases dans des fichiers.
Le script donné ci-dessous peut se charger de gérer cela.
* sauvegarde du système complet (et de ses disques durs): la forme dépend de l'environnement (machine virtuelle ou non...). Dans tous les cas, les données doivent être sauvegardées dans une salle (voire un bâtiment) différente de celle abritant le serveur ScoDoc (vols ou incendies). Typiquement, une sauvegarde quotidienne (nocturne) est suffisante.
* sauvegarde du système complet (et de ses disques durs): la forme dépend de
l'environnement (machine virtuelle ou non...). Dans tous les cas, les données
doivent être sauvegardées dans une salle (voire un bâtiment) différente de
celle abritant le serveur ScoDoc (vols ou incendies). Typiquement, une
sauvegarde quotidienne (nocturne) est suffisante.
Notons que ScoDoc sauvegarde de nombreuses informations sous le répertoire `/opt/scodoc-data` (en particulier les photos, les documents archivés et divers réglages): *il est absolument nécessaire de sauvegarder aussi ce répertoire*, en plus des bases de données SQL.
Notons que ScoDoc sauvegarde de nombreuses informations sous le répertoire
`/opt/scodoc-data` (en particulier les photos, les documents archivés et divers
réglages): *il est absolument nécessaire de sauvegarder aussi ce répertoire*, en
plus des bases de données SQL.
### Dump des bases de données
Le script `backup_db9` (fourni dans le répertoire `/opt/scodoc/tools/backups`) peut être utilisé pour effectuer des sauvegardes automatisées des bases de données SQL. Les données sont extraites de la base et écrites sur le disque local du serveur, qui doit bien entendu être sauvegardé par d'autres moyens, comme indiqué ci-dessus.
## Dump des bases de données
Le script `backup_db9` (fourni dans le répertoire `/opt/scodoc/tools/backups`)
peut être utilisé pour effectuer des sauvegardes automatisées des bases de
données SQL. Les données sont extraites de la base et écrites sur le disque
local du serveur, qui doit bien entendu être sauvegardé par d'autres moyens,
comme indiqué ci-dessus.
Le script `backup_db9` permet de conserver des sauvegardes de chaque heure durant les 48 (par défaut) dernières heures, des sauvegardes quotidiennes des 40 derniers jours, hebdomadaires des 30 dernières semaines, et mensuelles des 200 derniers mois (tout ceci est paramétrable dans le script `/opt/scodoc/tools/backups/backup_rotation.sh`).
Le script `backup_db9` permet de conserver des sauvegardes de chaque heure
durant les 48 (par défaut) dernières heures, des sauvegardes quotidiennes des 40
derniers jours, hebdomadaires des 30 dernières semaines, et mensuelles des 200
derniers mois (tout ceci est paramétrable dans le script
`/opt/scodoc/tools/backups/backup_rotation.sh`).
Par défaut, les fichiers de sauvegardes sont créés dans le répertoire de l'utilisateur `postgres` (actuellement `/var/lib/postgresql/`).
Par défaut, les fichiers de sauvegardes sont créés dans le répertoire de
l'utilisateur `postgres` (actuellement `/var/lib/postgresql/`).
En tant que `root` sur le serveur, faire:
@ -34,10 +54,14 @@ et ajouter:
### En cas de problème: restaurer la base à partir d'une sauvegarde
## En cas de problème: restaurer la base à partir d'une sauvegarde
<img src="/img/alert.png" style="vertical-align: bottom; margin:0 0 0 0;" alt="/!\" /> Attention, certaines informations sont stockées dans des fichiers et non dans la base de données: configuration du logiciel, photos des étudiants. Ce paragraphe ne traite que de la restauration à de la base de données.
1. Choisir la sauvegarde à utiliser, en fonction de la date à partir de laquelle on a fait une erreur (eg suppression non intentionnelle d'un semestre...). Le fichier se trouve sous `/var/lib/postgresql/SCODOC-BACKUPS``XXX` est concerné. Utiliser par exemple `ls -lrt` pour visualiser les sauvegardes triées par date.
1. Choisir la sauvegarde à utiliser, en fonction de la date à partir de
laquelle on a fait une erreur (eg suppression non intentionnelle d'un
semestre...). Le fichier se trouve sous
`/var/lib/postgresql/SCODOC-BACKUPS``XXX` est concerné. Utiliser par
exemple `ls -lrt` pour visualiser les sauvegardes triées par date.
1. Copier le fichier de sauvegarde choisi et le décomprimer; par exemple:
@ -54,22 +78,48 @@ et ajouter:
systemctl stop scodoc9 # arret du serveur
su postgres
dropdb SCODOC # <<< votre base production
pg_restore -C -d scodoc /tmp/SCODOC_pgdump # <<<
pg_restore -C -d scodoc /tmp/XXX # (nom de la BDD en majuscule)
exit # retour a l'utilisateur root
systemctl start scodoc # relance ScoDoc
systemctl start scodoc9 # relance ScoDoc
```
Attention: s'il y a eu des mise à jour du logiciel entre temps, il peut arriver
que la base sauvegardée nécessite une migration. Arrêtez le sservice scodoc9,
que la base sauvegardée nécessite une migration. Arrêtez le service scodoc9,
puis, en tant qu'utilisateur `scodoc`, lancer les commandes suivantes:
cd /opt/scodoc
source venv/bin/activate
flask db upgrade
puis relancer le service (`systemctl start scodoc` comme root).
puis relancer le service (`systemctl start scodoc9` comme root).
## Déplacement de toute une installation
Les scripts ci-dessus ne se chargent que de la base de données SQL.
Pour créer une sauvegarde complète d'une installation, vous pouvez utiliser le
script
tools/save_scodoc9_data.sh /tmp/sauvegarde-scodoc.tgz
Ce script va générer une archive (`tar`, format `.tgz`) contenant non seulement
la base de données SQL mais aussi tous les fichiers générés par votre ScoDoc:
photos, configurations locales, archives, PV de jurys, logos, etc (tout ceci
étant stocké sous `/opt/scodoc-data`).
Attention à l'espace disque: le répertoire destination (`/tmp`dans l'exemple
ci-dessus) doit avoir de l'espace (sinon utilisez un autre répertoire dans
lequel l'utilisateur `scodoc` puisse écrire, ou montez un autre disque. La
commande `df -h`est votre amie).
Pour restaurer ce type de sauvegarde, sur une autre machine (ou plus tard sur la
même), transférer le fichier généré (`/tmp/sauvegarde-scodoc.tgz`) dans
l'exemple ci-dessus) et utiliser
tools/restore_scodoc9_data.sh /tmp/sauvegarde-scodoc.tgz
(Note: la sauvegarde s'effectue comme utilisateur `scodoc`, en revanche le
rechargement doit se faire en tant que `root` car il faut évidemment arrêter et
relancer le service).

File diff suppressed because it is too large Load Diff

View File

@ -914,8 +914,7 @@ Et un autre exemple en format JSON:
## En savoir plus
Voir l'exemple complet d'utilisation de l'API JSON en Python, dans `misc/example-api-1.py`
Voir exemples d'utilisation de l'API en Python, dans `tests/api/`.

View File

@ -85,9 +85,19 @@ Les prochaines versions de ScoDoc (*sous réserve !*):
- ScoDoc 9.0 : publiée le 19 sept. 2021, version complètement remaniée en
Python 3/Flask.
- ScoDoc 9.1 : octobre 2021 gestion du bachelor (BUT)
- ScoDoc 9.2 : décembre 2021 nouvelles fonctionnalités liées au BUT.
- ScoDoc 9.1 : décembre 2021 gestion du bachelor (BUT)
- type de formation BUT
- distinction SAE/ressources
- poids (coefs) des évaluations, affichage, édition
- coefs de modules (ressources, SAE): affichage et édition dans ScoDoc
- calculs moyennes modules et vérification conformité
- calcul des moyennes d'UE
- bulletin de note v1
- ScoDoc 9.2 : fin 2021 ou début 2022 nouvelles fonctionnalités liées au BUT
- tenue des jurys de S1
- gestion des parcours (pour la mise en place des semestre)
- import Orébut avec gestion adaptation locale (à l'étude)
<br>

View File

@ -18,7 +18,6 @@ nav:
- 'Interfaces SI': InterrogationPortail.md
- 'Publication des notes': PublicationEtudiants.md
- 'Export Apogée': ScoDocApogee.md
- 'API': ScoDocAPI.md
- Association:
- 'Association 1901': AssociationScoDoc.md
@ -27,6 +26,8 @@ nav:
- Développement:
- 'Git': https://scodoc.org/git
- 'Guide Développeurs': GuideDeveloppeurs.md
- 'API (interfaçages autres logiciels)': ScoDoc9API.md
- FAQ: FAQ.md