# Documentation pour les développeurs ScoDoc


Informations pour les développeurs souhaitant étendre ou modifier ScoDoc.

## Informations générales

 * S'abonner aux [listes de diffusion](ListesDeDiffusion.md)
 * [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
 * Notes diverses
    * [Discussions pour la future gestion des absences](IdeesGestionAbsences.md)
    * [Anciennes discussions sur la gestion des plannings](IdeesGestionPlannings.md)
 
 
## Développer sur ScoDoc 7 et 8

Quelques conseils, indications et mémos pour les développeurs sur ScoDoc version 7.x et 8.

### Installation d'un serveur de développement
[Quelques conseils mouvants pour configurer votre serveur de développement](ConseilServeurDev.md)

### Style et formatage du code
L'ancienneté de la base de code a rendu le style peu cohérent.

Le code doit être formatté avec [`black`](https://black.readthedocs.io/) avant tout commit (configurez votre éditeur pour appeler `black` à l'enregistrement).

#### Documentation
On adoptera le style "Google": <https://google.github.io/styleguide/pyguide.html#383-functions-and-methods>

Exemple:
    """Description résumée de la fonction

    blah blah sur la fonction

    Args:
        table_handle: An open smalltable.Table instance.
        keys: A sequence of strings representing the key of each table
          row to fetch.  String keys will be UTF-8 encoded.
        require_all_keys: Optional; If require_all_keys is True only
          rows with values set for all keys will be returned.

    Returns:
        A dict mapping keys to the corresponding table row data
        fetched. Each row is represented as a tuple of strings. For
        example:

        {b'Serak': ('Rigel VII', 'Preparer'),
         b'Zim': ('Irk', 'Invader'),
         b'Lrrr': ('Omicron Persei 8', 'Emperor')}
    """

### Git

Le dépot est <https://scodoc.org/git/viennet/ScoDoc>

La branche `master` est celle en production. La branche `Scodoc8`est expérimentale (nouvel installeur, refactoring...). ScoDoc9 sera avec Python 3.

Ci-dessous quelques pense-bête qui peuvent servir.
#### Hot fixes (internes)

Pour les développeurs internes (écriture sur le dépot master), un exemple basique:

    # Créer une branche
    #  si besoin (travail en cours), utiliser git stash avant
    git checkout master
    git branch hotfix
    git checkout hotfix
    ... dev, test ...
    git add ...
    git commit -m "fixed ..."
    git checkout master
    git merge hotfix
    git branch -d hotfix
    # publication

    # éventuellement: git stash pop

#### Mettre à jour votre branche

Vous travaillez dans votre branche `ma_branche`. Pour lui appliquer les mises à jour de `master` (remote):

    git pull origin master

#### Commandes utiles, en vrac

 * `git log -L:fonction_python:fichier.py`
 * Commits locaux: `git log @{u}..`

#### Refactoring

Lint tous les fichiers modifiés:
    
    git status | grep modified | grep .py | awk '{print $2}' | xargs pylint -E

Restore les modes au besoin (SAMBA les changent parfois):    
    
    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:

   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:

   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


### Portail pour tests
TODO (voir `scotests/fakeportal/`).

## Roadmap
Sujets **prioritaires** en 2021:

  - modernisation du code: Flask, Python 3.

  - prise en compte du Bachelor (BUT): SAÉ, suivi compétences, validations des blocs, UE, semestres selon la cadrage et l'arêté Licence Pro 2020.

  - Redéfinition API et interface mobile simplifiée.

Autres sujets:
  - [voir les tickets](https://scodoc.org/git/viennet/ScoDoc/issues)
