]> gitweb.pimeys.fr Git - today.git/blobdiff - today.py
renommage de today-server en today_server
[today.git] / today.py
index e90c0ddcac44c28a0317a5e37a163e0033344b44..477fdfa0894613d37c79ffa59106537c7c0dd741 100755 (executable)
--- a/today.py
+++ b/today.py
@@ -6,10 +6,8 @@
  or that kind of stuff"""
 
 import time, datetime
-import re
 import os
 import sys
-import urllib
 import subprocess
 import json
 os.chdir('/home/vincent/scripts/today/')
@@ -25,6 +23,10 @@ class Config(object):
             self.green = "\e[1;32m"
         else:
             self.endcolor=self.blue=self.red=self.green=""
+        #: Serveur distant où aller récupérer les checks
+        self.distant_server = "pimeys"
+        #: path de today-server.py sur le serveur distant
+        self.path_today_server = "/home/vincent/scripts/today/today_server.py"
         #: Fichier contenant les anniversaires
         self.birthdays_file = "birthdays.txt"
         #: Fichier contenant les évènements à venir
@@ -33,6 +35,10 @@ class Config(object):
         self.saints_file = "saints.txt"
         #: Fichier contenant les ids des derniers trucs vus/lus
         self.last_seen_file = "lasts"
+        #: Fichier contenant le timestamp de dernière exécution
+        self.lasttime_file = ".lasttime"
+        #: Fichier contenant un booléen mémorisant si il y a quelquechose dans le today du jour et qu'il n'a pas encore été regardé
+        self.something_file = ".something"
 
 if "--color" in sys.argv:
     sys.argv.remove("--color")
@@ -68,13 +74,10 @@ def get_last_seen():
     with open(config.last_seen_file) as f:
         return json.loads(f.read())
     
-def update_last_seen(what, value):
+def update_last_seen(newdict):
     """Met à jour un des derniers trucs vus/lus"""
     lasts = get_last_seen()
-    if not what in lasts.keys():
-        print """%r n'est pas un "truc vu/lu" valide""" % (what,)
-        return
-    lasts[what] = value
+    lasts.update(newdict)
     with open(config.last_seen_file, "w") as f:
         f.write(json.dumps(lasts))
 
@@ -83,7 +86,7 @@ def parse_datefile(namefile):
        jj/mm/aaaa      Truc
        """
     with open(namefile) as f:
-        rawdata = [l.strip().decode("utf8") for l in f.readlines()[1:] if not l.strip().startswith("#")]
+        rawdata = [l.strip().decode("utf8") for l in f.readlines()[1:] if not l.strip().startswith("#") and not l.strip() == '']
     data = []
     for l in rawdata:
         date, truc = l.split("\t",1)
@@ -179,24 +182,24 @@ def get_dtc(*args):
         cmd = "~/bin/dtc %s %s --json" % (args[0], args[1])
     else:
         return None
-    proc = subprocess.Popen(["ssh", "pimeys", cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    proc = subprocess.Popen(["ssh", config.distant_server, cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     out, err = proc.communicate()
     out += err
     quotes = json.loads(out)
     if quotes:
         last_id = max([q["id"] for q in quotes])
-        update_lasts("dtc", last_id)
+        update_last_seen({"dtc" : last_id})
     textquotes = format_quotes(quotes)
     return textquotes
 
 def update_xkcd(newid):
-    update_last_seen("xkcd", int(newid))
+    update_last_seen({"xkcd" : int(newid)})
 
 
 def check_all():
     """Vérifie si il y a des derniers trucs non lus/vus."""
-    cmd = "/home/vincent/scripts/today/today-server.py whatsup"
-    proc = subprocess.Popen(["ssh", "pimeys", cmd], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    cmd = "%s whatsup" % (config.path_today_server,)
+    proc = subprocess.Popen(["ssh", config.distant_server, cmd], stdout=subprocess.PIPE)
     out, err = proc.communicate()
     news = json.loads(out)
     seen = get_last_seen()
@@ -224,23 +227,26 @@ def get_everything():
 
 def _is_there_something_in_today():
     """Teste si il y a des choses non lue dans le today"""
-    return open(".something", "r").read() == "True"
+    return open(config.something_file, "r").read() == "True"
 
 def _there_is_something_in_today(something):
     """Met à jour le something"""
-    f = open(".something", "w")
+    f = open(config.something_file, "w")
     f.write(str(bool(something)))
     f.close()
 
 def _get_lasttime():
     """Récupère la dernière fois que today a été exécuté"""
-    lasttime = open(".lasttime", "r").read()
+    if os.path.isfile(config.lasttime_file):
+        lasttime = open(config.lasttime_file, "r").read()
+    else:
+        lasttime = 0
     lasttime = datetime.datetime(*time.localtime(float(lasttime))[:7])
     return lasttime
 
 def _update_lasttime(when):
     """Met à jour le timestamp de dernière exécution de today"""
-    f = open(".lasttime", "w")
+    f = open(config.lasttime_file, "w")
     f.write(str(time.mktime(when.timetuple())))
     f.close()
 
@@ -286,6 +292,23 @@ def initialize():
             f.write(contents[ifile])
             f.close()
 
+def sync():
+    """Synchronise les last_seen avec le serveur distant qui en garde une copie,
+       le maximum de chaque truc vu est gardé des deux côtés."""
+    lasts = get_last_seen()
+    cmd = "%s sync" % (config.path_today_server,)
+    proc = subprocess.Popen(["ssh", config.distant_server, cmd],
+                            stdin = subprocess.PIPE, stdout=subprocess.PIPE,
+                            close_fds = True)
+    lasts_raw = json.dumps(lasts)
+    proc.stdin.write(lasts_raw)
+    proc.stdin.close()
+    out = proc.stdout.read()
+    newdict = json.loads(out)
+    update_last_seen(newdict)
+    print "Nouvel état : %r" % newdict
+    
+    
 
 #: Les actions effectuées lors d'un appel sans paramètres
 AUTOMATED_ACTIONS = {
@@ -300,6 +323,7 @@ OTHER_ACTIONS = {
            "dtc" : get_dtc,
            "ping" : ping,
            "show" : affiche,
+           "sync" : sync,
            
            "init" : initialize,
            }