auf-refer-photos : ajout des options -v et -f dans l'aide
[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") :
687c2452
P
23 auf-refer-photos [-v] [-f] <adél> - copie la photo correspondante à l'adél
24
25Utiliser l'adél virtuelle 'tout' pour copier toutes les photos disponibles."""
6604a5cf
P
26
27PHOTO_URL = 'http://intranet.auf/photos_employes/d-0340-%s-photo.jpg'
28PHOTO_FILENAME = '/var/lib/auf-refer-photos/%s.jpg'
29
30def update(adels=None, verbose=True, force=False):
31 employes = aufrefer.get('datamaster-employe.json')
32 if adels:
33 employes = filter(lambda e: e['courriel'] in adels, employes)
34 for e in employes:
35 adel = e['courriel']
316cff34
P
36 if not adel:
37 continue
6604a5cf
P
38 url = PHOTO_URL % e['id']
39 filename = PHOTO_FILENAME % adel
40 try:
41 r = aufrefer.retrieve(url, filename, mimetype='image/jpeg',
316cff34 42 force=force, ignore404=True)
6604a5cf 43 if verbose:
316cff34
P
44 if r:
45 print "Photo récupérée pour %s." % adel
46 elif r is not None:
47 print "Photo non disponible pour %s." % adel
48 except RuntimeError:
6604a5cf
P
49 if verbose:
50 print "Problème avec la photo pour %s." % adel
51 except KeyboardInterrupt:
52 print "Abandon."
53 return
316cff34
P
54 if adels and adel in adels:
55 adels.remove(adel)
56 if adels and verbose:
6604a5cf
P
57 print "Adéls ignorées :", ', '.join(adels)
58
59if __name__ == '__main__':
60 # interdiction formelle de tourner sous 'root'
61 if getuid() == 0:
62 try:
63 pw = getpwnam(RUN_USER)
64 except KeyError:
65 raise RuntimeError, "L'utilisateur '%s' n'existe pas." % RUN_USER
66 try:
67 setgid(pw.pw_gid)
68 setuid(pw.pw_uid)
69 except OSError:
70 raise RuntimeError, \
71 "Impossible de basculer vers l'utilisateur '%s'.\n" \
72 "Réessayez avec 'sudo' !" % RUN_USER
73
74 try:
75 opts, args = getopt(argv[1:], 'hvf', ['help', 'verbose', 'force'])
76 except GetoptError:
77 print USAGE
78 exit(1)
79 if not args:
80 print USAGE
81 exit(1)
82
83 verbose = False
84 force = False
85 for opt, arg in opts:
86 if opt in ('-h', '--help'):
87 print USAGE
88 exit(0)
89 elif opt in ('-v', '--verbose'):
90 verbose = True
91 elif opt in ('-f', '--force'):
92 force = True
93
94 if len(args) == 1 and args[0] == 'tout':
95 adels = None
96 else:
97 adels = args
98 try:
99 update(adels, verbose=verbose, force=force)
100 except RuntimeError, e:
101 print >>stderr, e
102 exit(1)
103 exit(0)
104