* Ajout d'une admin pour les records
[auf_savoirs_en_partage_django.git] / auf_savoirs_en_partage / savoirs / lib / harvest.py
CommitLineData
0cc5f772
CR
1# -*- encoding: utf-8 -*-
2import sys, os, time, traceback
0cc5f772 3from auf_savoirs_en_partage.backend_config import RESOURCES
23b5b3d5 4from savoirs.models import HarvestLog
0cc5f772
CR
5from sep import SEP
6
0cc5f772
CR
7def import_all ():
8 """Cette méthode effectue l'importation des données pour toutes les
9 sources définies dans `conf.py`, et les ajoute dans le système de stockage
10 en passant par SEP (:doc:`../sep/index`)
11 """
12 sep = SEP ()
13
8b95ddc9
CR
14 resources = RESOURCES
15 if len(sys.argv) == 2:
16 name = sys.argv[1]
17 if RESOURCES.get(name) is not None:
18 resources = {name: RESOURCES.get(name)}
19 else:
20 print "Ressource %s non existante" % name
21 sys.exit(-1)
22
23 for name in resources.keys ():
0cc5f772
CR
24 print "Import:", name
25 options = RESOURCES[name]
26 module = 'harvesters.%s.%s' \
27 % (options['type'], options['acces'])
28 __import__ (module)
29 harvester = sys.modules[module]
30 try:
31 nodes = harvester.harvest (options)
32 except:
33 print "Exception:"
34 print '-'*60
35 traceback.print_exc(file=sys.stdout)
36 print '-'*60
37 nodes = []
23b5b3d5 38
39 added = updated = 0
0cc5f772 40 for node in nodes:
77427924 41 node['server'] = name
23b5b3d5 42 status = sep.add (node)
43
44 if status['added']:
45 added += 1
46 if status['updated']:
47 updated += 1
48 message = status
49 message.update({'context':'record', 'name':name})
50 HarvestLog.add(message)
51
52 message = {'context':'moisson', 'name':name, 'added':added, 'updated':updated}
53 HarvestLog.add(message)
0cc5f772
CR
54
55 del (sep)
56
57if __name__ == '__main__':
58 import_all()