]> gitweb.pimeys.fr Git - today.git/blob - today_server.py
Modularisation++ : sagas.py pour xantah
[today.git] / today_server.py
1 #!/usr/bin/python
2 # -*- encoding: utf-8 -*-
3
4 """ Codé par 20-100
5 script qui affiche des trucs à penser, des J-n des conneries
6 or that kind of stuff.
7
8 Partie serveur, prévue pour chercher périodiquement les trucs non lus
9 et répondre à un check.
10
11 """
12
13 import re
14 from lxml import etree
15 import os
16 import sys
17 import urllib
18 import json
19 os.chdir('/home/vincent/scripts/today/')
20
21 #: Config serveur
22 import serverconfig
23
24 #: Récupération de toutes les nouveautés
25 import gather
26
27 def get_file():
28 """Récupère la liste des derniers ids de chaque truc, stockée dans le fichier."""
29 f = open(serverconfig.store_published_file)
30 news = json.load(f)
31 f.close()
32 return news
33
34 def update_file(news):
35 """Met à jour la liste des derniers ids dans le fichier."""
36 f = open(serverconfig.store_published_file, 'w')
37 json.dump(news, f)
38 f.close()
39
40 FETCHS = {
41 }
42
43 def fetch_all():
44 """Va chercher sur les différents sites les nouveaux trucs."""
45 news = {}
46 for (k, f) in FETCHS.iteritems():
47 try:
48 news[k] = f()
49 except Exception as e:
50 raise
51 news.update(gather.gather())
52 return news
53
54 def sync():
55 """Reçoit une requête de synchronisation."""
56 # On récupère où en est le client sur stdin
57 t = sys.stdin.read()
58 on_client = json.loads(t)
59 # On récupère où en est le serveur dans le fichier idoine
60 if os.path.isfile(serverconfig.store_seen_file):
61 on_server = json.load(open(serverconfig.store_seen_file))
62 else:
63 on_server = {}
64 # On garde le maximum
65 for k in set(on_client.keys() + on_server.keys()):
66 on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0))
67 # On enregistre ce nouveau dico
68 json.dump(on_server, open(serverconfig.store_seen_file, "w"))
69 # On envoie au client ce nouveau dico
70 print json.dumps(on_server)
71
72 if __name__ == "__main__":
73 DEBUG = ("--debug" in sys.argv) or ("--verbose" in sys.argv) or serverconfig.DEBUG
74 if sys.argv[1] == "check":
75 news = fetch_all()
76 if "--init" in sys.argv:
77 olds = news
78 else:
79 olds = get_file()
80 olds.update(news)
81 update_file(olds)
82 elif sys.argv[1] == "whatsup":
83 news = get_file()
84 print json.dumps(news)
85 elif sys.argv[1] == "sync":
86 sync()