ajout du nombre traité, et log des erreurs éventuelles
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / lib / harvest.py
index 835a57e..aebba78 100644 (file)
@@ -1,10 +1,9 @@
 # -*- encoding: utf-8 -*-
 import sys, os, time, traceback
-
 from auf_savoirs_en_partage.backend_config import RESOURCES
+from savoirs.models import HarvestLog
 from sep import SEP
 
-
 def import_all ():
     """Cette méthode effectue l'importation des données pour toutes les 
     sources définies dans `conf.py`, et les ajoute dans le système de stockage 
@@ -12,9 +11,20 @@ def import_all ():
     """
     sep = SEP ()
 
-    for name in RESOURCES.keys ():
+    resources = RESOURCES
+    if len(sys.argv) == 2:
+        name = sys.argv[1]
+        if RESOURCES.get(name) is not None:
+            resources = {name: RESOURCES.get(name)}
+        else:
+            print "Ressource %s non existante" % name
+            sys.exit(-1)
+
+    for name in resources.keys ():
         print "Import:", name
         options = RESOURCES[name]
+        options['server'] = name
+
         module = 'harvesters.%s.%s' \
                 % (options['type'], options['acces'])
         __import__ (module)
@@ -27,12 +37,28 @@ def import_all ():
             traceback.print_exc(file=sys.stdout)
             print '-'*60
             nodes = []
-        print "Ajout de", len(nodes), "references"
-        print "S:", time.time ()
+
+        added = updated = 0
         for node in nodes:
-            sep.add (node)
-        sep.add_log (name, len(nodes))
-        print "F:", time.time ()
+            node['server'] = name
+
+            try:
+                status = sep.add (node)
+            except:
+                message.update({'context':'error', 'name':name, 'processed':0})
+                HarvestLog.add(message)
+                continue
+
+            if status['added']:
+                added += 1
+            if status['updated']:
+                updated += 1
+            message = status
+            message.update({'context':'record', 'name':name, 'processed':1})
+            HarvestLog.add(message)
+
+        message = {'context':'moisson', 'name':name, 'added':added, 'updated':updated, 'processed':len(nodes)}
+        HarvestLog.add(message)
 
     del (sep)