]> gitweb.pimeys.fr Git - today.git/blob - today_server.py
Modularisation : enfin découplé, il n'y a plus rien d'hardcodé dans today_server
[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
41 def sync():
42 """Reçoit une requête de synchronisation."""
43 # On récupère où en est le client sur stdin
44 t = sys.stdin.read()
45 on_client = json.loads(t)
46 # On récupère où en est le serveur dans le fichier idoine
47 if os.path.isfile(serverconfig.store_seen_file):
48 on_server = json.load(open(serverconfig.store_seen_file))
49 else:
50 on_server = {}
51 # On garde le maximum
52 for k in set(on_client.keys() + on_server.keys()):
53 on_server[k] = max(on_client.get(k, 0), on_server.get(k, 0))
54 # On enregistre ce nouveau dico
55 json.dump(on_server, open(serverconfig.store_seen_file, "w"))
56 # On envoie au client ce nouveau dico
57 print json.dumps(on_server)
58
59 if __name__ == "__main__":
60 DEBUG = ("--debug" in sys.argv) or ("--verbose" in sys.argv) or serverconfig.DEBUG
61 if sys.argv[1] == "check":
62 news = gather.gather()
63 if "--init" in sys.argv:
64 olds = news
65 else:
66 olds = get_file()
67 olds.update(news)
68 update_file(olds)
69 elif sys.argv[1] == "whatsup":
70 news = get_file()
71 print json.dumps(news)
72 elif sys.argv[1] == "sync":
73 sync()