releasing version 1.3
[auf-refer.git] / auf-refer-photos
CommitLineData
6604a5cf
P
1#!/usr/bin/python
2# -*- coding: utf-8 -*-
3"""Outil de copie et mise à jour des photos des personnels AuF.
4
5Copyright ©2009-2011 Agence universitaire de la Francophonie
6Licence : GPL version 3
7Auteur : Progfou <jean-christophe.andre@auf.org>
8
9Dépendances Debian : python >= 2.5
10"""
11from sys import argv, exit, stderr
12from getopt import getopt, GetoptError
13from pwd import getpwnam
14from os import getuid, setgid, setuid
15from urllib2 import HTTPError, URLError
16import aufrefer
17
18RUN_USER = 'auf-refer'
19
20__all__ = ( 'RUN_USER' )
21
22USAGE = """Usages (nécessite parfois "root", par exemple via "sudo") :
23 auf-refer-photos <adél> - copie la photo correspondante à l'adél
24 auf-refer-photos tout - copie toutes les photos disponibles"""
25
26PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
27PHOTO_FILENAME = '/var/lib/auf-refer-photos/%s.jpg'
28
29def update(adels=None, verbose=True, force=False):
30 employes = aufrefer.get('datamaster-employe.json')
31 if adels:
32 employes = filter(lambda e: e['courriel'] in adels, employes)
33 for e in employes:
34 adel = e['courriel']
35 url = PHOTO_URL % e['id']
36 filename = PHOTO_FILENAME % adel
37 try:
38 r = aufrefer.retrieve(url, filename, mimetype='image/jpeg',
39 force=force)
40 if verbose and r:
41 print "Photo récupérée pour %s." % adel
42 except URLError:
43 if verbose:
44 print "Photo non disponible pour %s." % adel
45 except HTTPError:
46 if verbose:
47 print "Problème avec la photo pour %s." % adel
48 except KeyboardInterrupt:
49 print "Abandon."
50 return
51 adels.remove(adel)
52 if verbose:
53 print "Adéls ignorées :", ', '.join(adels)
54
55if __name__ == '__main__':
56 # interdiction formelle de tourner sous 'root'
57 if getuid() == 0:
58 try:
59 pw = getpwnam(RUN_USER)
60 except KeyError:
61 raise RuntimeError, "L'utilisateur '%s' n'existe pas." % RUN_USER
62 try:
63 setgid(pw.pw_gid)
64 setuid(pw.pw_uid)
65 except OSError:
66 raise RuntimeError, \
67 "Impossible de basculer vers l'utilisateur '%s'.\n" \
68 "Réessayez avec 'sudo' !" % RUN_USER
69
70 try:
71 opts, args = getopt(argv[1:], 'hvf', ['help', 'verbose', 'force'])
72 except GetoptError:
73 print USAGE
74 exit(1)
75 if not args:
76 print USAGE
77 exit(1)
78
79 verbose = False
80 force = False
81 for opt, arg in opts:
82 if opt in ('-h', '--help'):
83 print USAGE
84 exit(0)
85 elif opt in ('-v', '--verbose'):
86 verbose = True
87 elif opt in ('-f', '--force'):
88 force = True
89
90 if len(args) == 1 and args[0] == 'tout':
91 adels = None
92 else:
93 adels = args
94 try:
95 update(adels, verbose=verbose, force=force)
96 except RuntimeError, e:
97 print >>stderr, e
98 exit(1)
99 exit(0)
100