releasing version 1.3.1
[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']
316cff34
P
35 if not adel:
36 continue
6604a5cf
P
37 url = PHOTO_URL % e['id']
38 filename = PHOTO_FILENAME % adel
39 try:
40 r = aufrefer.retrieve(url, filename, mimetype='image/jpeg',
316cff34 41 force=force, ignore404=True)
6604a5cf 42 if verbose:
316cff34
P
43 if r:
44 print "Photo récupérée pour %s." % adel
45 elif r is not None:
46 print "Photo non disponible pour %s." % adel
47 except RuntimeError:
6604a5cf
P
48 if verbose:
49 print "Problème avec la photo pour %s." % adel
50 except KeyboardInterrupt:
51 print "Abandon."
52 return
316cff34
P
53 if adels and adel in adels:
54 adels.remove(adel)
55 if adels and verbose:
6604a5cf
P
56 print "Adéls ignorées :", ', '.join(adels)
57
58if __name__ == '__main__':
59 # interdiction formelle de tourner sous 'root'
60 if getuid() == 0:
61 try:
62 pw = getpwnam(RUN_USER)
63 except KeyError:
64 raise RuntimeError, "L'utilisateur '%s' n'existe pas." % RUN_USER
65 try:
66 setgid(pw.pw_gid)
67 setuid(pw.pw_uid)
68 except OSError:
69 raise RuntimeError, \
70 "Impossible de basculer vers l'utilisateur '%s'.\n" \
71 "Réessayez avec 'sudo' !" % RUN_USER
72
73 try:
74 opts, args = getopt(argv[1:], 'hvf', ['help', 'verbose', 'force'])
75 except GetoptError:
76 print USAGE
77 exit(1)
78 if not args:
79 print USAGE
80 exit(1)
81
82 verbose = False
83 force = False
84 for opt, arg in opts:
85 if opt in ('-h', '--help'):
86 print USAGE
87 exit(0)
88 elif opt in ('-v', '--verbose'):
89 verbose = True
90 elif opt in ('-f', '--force'):
91 force = True
92
93 if len(args) == 1 and args[0] == 'tout':
94 adels = None
95 else:
96 adels = args
97 try:
98 update(adels, verbose=verbose, force=force)
99 except RuntimeError, e:
100 print >>stderr, e
101 exit(1)
102 exit(0)
103