73200ba6c23ec1ef3db9b705fb87ff98560be367
[auf-refer.git] / auf-refer
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3 """Outil de copie et mise à jour des référentiels AuF.
4
5 Copyright ©2009  Agence universitaire de la Francophonie
6 Licence : GPL version 3
7 Auteur : Progfou <jean-christophe.andre@auf.org>
8
9 Dépendances Debian : python >= 2.5, python-simplejson
10 """
11
12 RUN_USER = 'auf-refer'
13
14 __all__ = ( 'RUN_USER' )
15
16 USAGE = """Usages (nécessite parfois "root", par exemple via "sudo") :
17   auf-refer [-f] -a <ref> - copie un nouveau référentiel
18   auf-refer -r <ref>      - supprime un référentiel
19   auf-refer [-f] -u       - met à jour les référentiels
20   auf-refer -l            - liste les référentiels copiés
21   auf-refer [-f] -L       - liste les référentiels disponibles
22   auf-refer [-f] -A       - copie tous les référentiels disponibles
23
24 L'option -f permet de forcer le rechargement à travers un proxy/cache.
25 """
26
27 from sys import argv, exit, stderr
28 from getopt import getopt, GetoptError
29 from pwd import getpwnam
30 from os import getuid, setgid, setuid
31 import aufrefer
32
33 if __name__ == '__main__':
34     # interdiction formelle de tourner sous 'root'
35     if getuid() == 0:
36         try:
37             pw = getpwnam(RUN_USER)
38         except KeyError:
39             raise RuntimeError, u"L'utilisateur '%s' n'existe pas." % RUN_USER
40         try:
41             setgid(pw.pw_gid)
42             setuid(pw.pw_uid)
43         except OSError:
44             raise RuntimeError, \
45                 u"Impossible de basculer vers l'utilisateur '%s'.\n" \
46                 u"Réessayez avec 'sudo' !" % RUN_USER
47
48     try:
49         opts, args = getopt(argv[1:], 'hfa:r:ulLA', ['help', 'force',
50             'add=', 'remove=', 'update', 'list',
51             'list-available', 'add-available'])
52     except GetoptError:
53         print USAGE
54         exit(1)
55
56     force = False
57     for opt, arg in opts:
58         if opt in ('-h', '--help'):
59             print USAGE
60             exit(0)
61         elif opt in ('-f', '--force'):
62             force = True
63         else:
64             try:
65                 if opt in ('-a', '--add'):
66                     aufrefer.add(arg, force=force)
67                 elif opt in ('-r', '--remove'):
68                     aufrefer.remove(arg)
69                 elif opt in ('-u', '--update'):
70                     aufrefer.update(force=force)
71                 elif opt in ('-l', '--list'):
72                     for referentiel in aufrefer.list():
73                         print referentiel
74                 elif opt in ('-L', '--list-available'):
75                     list = aufrefer.list_available(force=force)
76                     for referentiel in sorted(list):
77                         print "%-16s : %s" % (referentiel, list[referentiel])
78                 elif opt in ('-A', '--add-available'):
79                     aufrefer.add_available(force=force)
80             except RuntimeError, msg:
81                 print >>stderr, u'%s' % msg
82
83     if not opts:
84         print USAGE
85     exit(0)
86