README.md 4.32 KB
Newer Older
Daniel Stan's avatar
Daniel Stan committed
1
2
3
4
5
6
7
8
## Sous-dépôts
À cloner pour faire marcher certains scripts

 * `./lc_ldap`
 * `./wifi_new`

## Paquets Debian
 
Daniel Stan's avatar
Daniel Stan committed
9
10
11
12
Ce dépôt est conçu pour fonctionner sous Debian jessie, avec les paquets suivants
installés. Il est probablement possible de le faire marcher sous d'autres
distribution, mais cela n'a pas été testé. Les paquets Debian suivants
sont nécessaires :
Daniel Stan's avatar
Daniel Stan committed
13
14
15
16
17
18
19
20
21
22
23
24
25

 * python-ldap
 * python-netifaces
 * python-psycopg2
 * python-netsnmp
 * python-pyparsing
 * python-markdown
 * python-jinja2
 * python-beautifulsoup
 * python-ipaddr
 * python-passlib
 * python-dateutil
 * python-tz
Daniel Stan's avatar
Daniel Stan committed
26
 * python-netaddr
Daniel Stan's avatar
Daniel Stan committed
27

Daniel Stan's avatar
Daniel Stan committed
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Pour une installation facile, copier-coller cette liste dans la commande :
`sudo apt-get install $(sed 's/ \* //')`

## testing.sh

La racine du dépôt contient un fichier nommé `testing.sh` contenant les
réglages de test à appliquer aux scripts lancés. Ce fichier est automatiquement
lu, pour peu que le dépôt cloné ne soit pas enregistré dans `/usr/scripts` !

Par défaut, `testing.sh` définit de nombreuses variables d'environnement, qui
forcent les scripts à travailler en mode test, c'est-à-dire, sans toucher
à la vraie base ldap, ni pgsql, mais en utilisant les bases de test sur vo.
Modifiez-le au besoin (il est commenté !), notamment si vous voulez produire
un environnement de test sur votre machine personnelle, plutôt que sur vo.

## python.sh
Les fichiers python marqués comme executables doivent posséder le shabang
`#!/bin/bash /usr/scripts/python.sh`. python.sh se charge d'appeler `testing.sh`,
si besoin, mais également de régler l'environnement `PYTHONPATH`.

Ainsi, il est inutile de manipuler soi-même `sys.path` depuis les scripts python,
cela est même déconseillé, car cela ne permet pas de travailler sur une copie
de test du dépôt ! Faîtes tous vos imports depuis la racine du dépôt
(par exemple `import gestion.affichage`).

Il est également possible de démarrer une session ipython avec l'environnement
de test défini par `testing.sh`, à l'aide de la commande suivante :

`./python.sh ipython `


Un fichier executable devrait également posséder une section
`if __name__ == '__main__':`

## Envoi de mail
Le système de mail a été unifié, afin d'éviter les erreurs récurrentes sur
le formattage de mail.
Pour écrire un script d'envoi de mail, il faut :
 * Écrire un nouveau template dans `./gestion/mail/template/$nom_du_mail/`.
    Chaque sous-dossier correspond à un en-tête (sauf body), qui contient un
    fichier par langue (fr, en …)
 * Importer le module de mail: `from gestion import mail`
 * Se placer dans un nouveau contexte `mail.ServerConnection()`
 * Envoyer le mail à l'aide de la méthode `send_template`, prenant en argument
 le nom du template, et un dictionnaire des données à envoyer.
 * Les données à envoyer peuvent contenir le destinataire (champs `to`) ou
 directement l'adhérent (champ `adh`).


`
    import gestion.mail as mail
    with mail.ServerConnection() as conn_smtp:
        for adh in connexion_ldap.search(u'aid=*', sizelimit=4000):
            mail.send_template('mon_template', {'adh': adh, 'message': u'Coucou !'})
`


Ce fonctionnement présente plusieurs avantages :
 * À terme, il sera possible d'envoyer le mail dans la langue native de l'adhérent automatiquement
 * Il est facile d'envoyer un mail multipart
 * Le context manager assure qu'une seule connexion smtp est effectivement ouverte
 * En récupérant directement l'objet adhérent, send_template détermine automatiquement
 l'adresse de destination, voire abandonne l'envoi si l'adhérent possède une blackliste
 `mail_invalide`.
 * En environnement de test, le mail n'est pas envoyé par défaut au vrai destinataire
  (cf `DBG_MAIL` dans `testing.sh`)

## Conventions de codage

 * On essaie de respecter le plus possible <a href="http://www.python.org/dev/peps/pep-0008/">PEP8</a>.
 * Utiliser exclusivement des espaces pour indenter ses blocs : **4** espaces = **une** indentation.
 * Respecter l'<a href="http://nedbatchelder.com/text/unipain/unipain.html#1">unicode sandwich</a>
 * Pour les codages d'entrées/sorties, privilégier l'utf-8
 * Les scripts python doivent être encodés en utf-8 ( header `# -*- coding: utf-8 -*-`)

Daniel Stan's avatar
Daniel Stan committed
103
104
105
106
107
## À faire

 * Expliquer l'environnement de test
 * tunnel pour apprentis
 * http://stackoverflow.com/questions/8021/allow-user-to-set-up-an-ssh-tunnel-but-nothing-else
Daniel Stan's avatar
Daniel Stan committed
108
 * snmp et les mibs ! !!