]>
gitweb.pimeys.fr Git - today.git/blob - gather.py
99adaded107b22866c4798353db4b440af28a4f9
2 # -*- encoding: utf-8 -*-
4 """ Module chargé de récupérer les nouvelles choses là où il faut et de fournir
5 le dico des derniers numéros.
7 * Une "nouvelle chose" doit fournir l'interface suivante :
8 une fonction qui s'appelle sans argument et renvoie un entier, le dernier id
9 * On peut avoir envie d'importer un module et de récupérer module.functions
10 un dictionnaire id → fonctions.
20 #: Gestion des chaînes youtube
23 #: Interface pour récupérer les quotes DTC
24 #: essentiellement une coquille qui pointe vers la bonne fonction dans le module dtc, codé par ailleurs
27 #: Récupération des webcomics
30 #: Récupération des sagas MP3
33 GATHERING_MODULES
= [youtube
, lastdtc
, comics
, sagas
]
35 def generate_errmsg(id):
36 errmsg
= "Erreur à la récupération de %s :\n" % id
37 errmsg
+= traceback
.format_exc()
38 # On dumpe le contenu local de la mémoire au moment de l'exception
39 fobj
= inspect
.trace()[-1][0]
40 # On fait un peu de ménage
41 d
= {k
:v
for (k
,v
) in fobj
.f_locals
.iteritems() if not k
.startswith("_")}
42 # On évite d'envoyer truckLoadsOfShit
43 d
= {k
: (v
if len(str(v
)) < 800
44 else str(v
)[:400] + "*" * 40 + "TRUNCATED OBJECT" + "*" * 40 + str(v
)[-400:])
45 for (k
,v
) in d
.iteritems()}
46 errmsg
+= "\nContexte : %s\n\n" % (pprint
.pformat(d
))
49 def get_storer(key_id
, parser
):
51 """ Encapsuleur. Renvoie une fonction qui, une fois appelée, stockera le résultat
52 de ``parser()`` dans ``results[key_id]``, ``results`` étant global. """
54 # On prend soin de ne pas crasher
56 results
[key_id
] = parser()
57 except Exception as e
:
58 # et d'afficher du debugging en cas de problème
59 print generate_errmsg(key_id
)
65 for mod
in GATHERING_MODULES
:
66 functions
.update(mod
.functions
)
68 # On convertit les fonctions en storers
69 functions
= {id : get_storer(id, parser
) for (id, parser
) in functions
.items()}
73 for (id, f
) in functions
.items():
74 newthread
= threading
.Thread(name
="retrieving-%s" % id, target
= f
)
76 threads
.append(newthread
)
78 # On attend que tout le monde ait renvoyé son résultat
79 [t
.join() for t
in threads
]
83 if __name__
== "__main__":