Version 0.3 « prêt à servir » de auf-referentiels :
authorProgfou <jean-christophe.andre@auf.org>
Thu, 25 Jun 2009 07:45:52 +0000 (14:45 +0700)
committerProgfou <jean-christophe.andre@auf.org>
Thu, 25 Jun 2009 08:19:02 +0000 (15:19 +0700)
  * Reformulation de quelques messages d'erreurs.
  * Meilleur support des erreurs sur la liste des référentiels.
  * Ajout des informations MIME pour JSON dans la configuration Apache.
  * Ajout d'une option -A pour copier tous les référentiels d'un coup.

apache.conf
auf-referentiels
debian/auf-referentiels.8
debian/changelog

index f437d11..e06f362 100644 (file)
@@ -7,3 +7,8 @@ Alias /auf-referentiels/ /usr/share/auf-referentiels/
   Allow from 10.0.0.0/255.0.0.0
   Options Indexes
 </Location>
+
+<IfModule mod_mime.c>
+  AddType application/json .json
+  AddCharset UTF-8 .json
+</IfModule>
index 80458cb..31e1e1a 100755 (executable)
@@ -6,7 +6,7 @@ Copyright ©2009  Agence universitaire de la Francophonie
 Licence : GPL version 3
 Auteur : Progfou <jean-christophe.andre@auf.org>
 
-Dépendances Debian : python >= 2.5
+Dépendances Debian : python >= 2.5, python-simplejson
 """
 
 PROG_NAME = 'auf-referentiels'
@@ -28,6 +28,7 @@ USAGE = """Usages (à lancer en tant que "root", par exemple via "sudo") :
   auf-referentiels [-f] -u       - met à jour les référentiels
   auf-referentiels -l            - liste les référentiels copiés
   auf-referentiels -L            - liste les référentiels disponibles
+  auf-referentiels [-f] -A       - copie tous les référentiels disponibles
 
 L'option -f permet de forcer le rechargement à travers un proxy/cache.
 """
@@ -62,7 +63,8 @@ def update_referentiel(referentiel, force=False):
             switch_user()
             file(filename, 'a').close()
         except IOError, msg:
-            raise RuntimeError, u"Création refusée : %s" % msg
+            raise RuntimeError, \
+                u"La création du référentiel a été refusée : %s" % msg
         utime(filename, (0, 0))
     url = URL_BASE + referentiel
     req = Request(url, None, headers)
@@ -79,7 +81,8 @@ def update_referentiel(referentiel, force=False):
     i = u.info()
     if referentiel.endswith('.json') and i.type != 'application/json':
         u.close()
-        raise RuntimeError, u"Le type n'est pas JSON mais '%s'." % i.type
+        raise RuntimeError, \
+            u"Le type des données chargées n'est pas JSON mais '%s'." % i.type
     data = u.read()
     if i.get('content-encoding') == 'x-gzip':
         data = GzipFile('', 'r', 0, StringIO(data)).read()
@@ -94,7 +97,8 @@ def update_referentiel(referentiel, force=False):
         switch_user()
         f = file(filename, 'wb')
     except IOError, msg:
-        raise RuntimeError, u"Écriture refusée : %s" % msg
+        raise RuntimeError, \
+            u"L'écriture du référentiel a été refusée : %s" % msg
     f.write(data)
     f.close()
     # on fixe la date donnée par le serveur, le cas échéant
@@ -106,17 +110,19 @@ def update_referentiel(referentiel, force=False):
 def add_referentiel(referentiel, force=False):
     if referentiel in listdir(DIR_BASE):
         raise RuntimeError, \
-            u"Référentiel '%s' déjà ajouté auparavant." % referentiel
+            u"Le référentiel '%s' avait déjà été ajouté." % referentiel
     update_referentiel(referentiel, force)
 
 def delete_referentiel(referentiel):
     if not referentiel in listdir(DIR_BASE):
-        raise RuntimeError, u"Référentiel '%s' absent." % referentiel
+        raise RuntimeError, u"Le référentiel '%s' est absent." % referentiel
     try:
         switch_user()
         unlink(join(DIR_BASE, referentiel))
     except IOError, msg:
-        raise RuntimeError, u"Suppression refusée : %s" % msg
+        raise RuntimeError, \
+            u"La suppression du référentiel '%s' a été refusée :\n  %s" \
+                                                    % (referentiel, msg)
 
 def update_referentiels(force=False):
     error_messages = []
@@ -132,20 +138,35 @@ def list_referentiels():
     for referentiel in listdir(DIR_BASE):
         print referentiel
 
-def list_referentiels_available():
+def get_referentiels_available(force=False):
     referentiel = 'referentiels.json'
     filename = join(DIR_BASE, referentiel)
     if not exists(filename):
-        update_referentiel(referentiel)
+        update_referentiel(referentiel, force)
     try:
         f = open(filename, 'rb')
     except IOError:
-        raise RuntimeError, u"Liste des référentiels indisponible."
-    referentiels = loads(f.read(), encoding='utf-8')
+        raise RuntimeError, u"La liste des référentiels est indisponible."
+    try:
+        referentiels = loads(f.read(), encoding='utf-8')
+    except ValueError:
+        raise RuntimeError, \
+            u"La liste des référentiels n'est pas au format JSON.\n" \
+            u"Essayez les options -f et -u pour la mettre à jour."
     f.close()
+    return referentiels
+
+def list_referentiels_available(force=False):
+    referentiels = get_referentiels_available(force)
     for referentiel in sorted(referentiels):
         print "%-16s : %s" % (referentiel, referentiels[referentiel])
 
+def add_referentiels_available(force=False):
+    referentiels = get_referentiels_available(force)
+    referentiels = set(referentiels) - set(listdir(DIR_BASE))
+    for referentiel in referentiels:
+        update_referentiel(referentiel, force)
+
 _user_switched = False
 def switch_user(username=RUN_USER):
     global _user_switched
@@ -170,8 +191,9 @@ if __name__ == '__main__':
         switch_user()
 
     try:
-        opts, args = getopt(argv[1:], 'hfa:d:ulL', ['help', 'force',
-            'add=', 'delete=', 'update', 'list', 'list-available'])
+        opts, args = getopt(argv[1:], 'hfa:d:ulLA', ['help', 'force',
+            'add=', 'delete=', 'update', 'list',
+            'list-available', 'add-available'])
     except GetoptError:
         print USAGE
         exit(1)
@@ -194,7 +216,9 @@ if __name__ == '__main__':
                 elif opt in ('-l', '--list'):
                     list_referentiels()
                 elif opt in ('-L', '--list-available'):
-                    list_referentiels_available()
+                    list_referentiels_available(force=force)
+                elif opt in ('-A', '--add-available'):
+                    add_referentiels_available(force=force)
             except RuntimeError, msg:
                 print >>stderr, u'%s' % msg
 
index 8d03738..2b8165b 100644 (file)
@@ -17,9 +17,9 @@ auf-referentiels \- outil de copie et mise à jour des réferentiels AuF
 .br
 \fBauf-referentiels\fP \fB-d\fP \fIreferentiel\fP
 .br
-\fBauf-referentiels\fP [\fB-f\fP] \fB-u\fP
-.br
 \fBauf-referentiels\fP \fB-h\fP | \fB-l\fP | \fB-L\fP
+.br
+\fBauf-referentiels\fP [\fB-f\fP] \fB-u\fP | \fB-A\fP
 .SH DESCRIPTION
 Cette page de manuel documente brièvement la commande \fBauf-referentiels\fP.
 .PP
@@ -30,20 +30,23 @@ avec des options longues commençant par deux tirets (`-').
 .B \-h, \-\-help
 Montre un résumé des options.
 .TP
+.B \-L, \-\-list-available
+Liste les référentiels disponibles. Cette liste est obtenue depuis un référentiel spécial nommé \fBreferentiels.json\fP.
+.TP
+.B \-A, \-\-add-available
+Copie tous les référentiels disponibles. Il seront ensuite mis à jour, soit automatiquement à 7h et 13h (en heure locale), soit manuellement avec l'option \fB-u\fP. L'option \fB-f\fP permet de forcer le chargement à travers un proxy/cache.
+.TP
 .B \-a, \-\-add
 Copie un nouveau référentiel. Il sera ensuite mis à jour, soit automatiquement à 7h et 13h (en heure locale), soit manuellement avec l'option \fB-u\fP. L'option \fB-f\fP permet de forcer le chargement à travers un proxy/cache.
 .TP
-.B \-d, \-\-delete
-Supprime un référentiel.
+.B \-l, \-\-list
+Liste les référentiel copiés.
 .TP
 .B \-u, \-\-update
 Met à jour les référentiels immédiatement. L'option \fB-f\fP permet de forcer le chargement à travers un proxy/cache.
 .TP
-.B \-l, \-\-list
-Liste les référentiel copiés.
-.TP
-.B \-L, \-\-list-available
-Liste les référentiel disponibles. Cette liste est obtenue depuis un référentiel spécial nommé \fBreferentiels.json\fP.
+.B \-d, \-\-delete
+Supprime un référentiel.
 .SH AUTEUR
 L'outil auf-referentiels a été écrit par Progfou <jean-christophe.andre@auf.org>.
 .PP
index a350339..c891050 100644 (file)
@@ -1,3 +1,12 @@
+auf-referentiels (0.3) jaunty; urgency=low
+
+  * Reformulation de quelques messages d'erreurs.
+  * Meilleur support des erreurs sur la liste des référentiels.
+  * Ajout des informations MIME pour JSON dans la configuration Apache.
+  * Ajout d'une option -A pour copier tous les référentiels d'un coup.
+
+ -- Progfou <jean-christophe.andre@auf.org>  Thu, 25 Jun 2009 14:38:36 +0700
+
 auf-referentiels (0.2) jaunty; urgency=low
 
   * Utilisation d'un compte (et groupe) dédié : auf-referentiels