[PATCH] Moved code from AgeFormater to dateutils.formatTimeDelta. Show due date in addition to time left.

Aurélien Gâteau aurelien.gateau
Mar 24 Fév 09:40:28 CET 2009


---
 dateutils.py        |   55 ++++++++++++++++++++------------------------------
 textlistrenderer.py |   26 ++++++++++-------------
 2 files changed, 33 insertions(+), 48 deletions(-)

diff --git a/dateutils.py b/dateutils.py
index c001bad..dfa5532 100644
--- a/dateutils.py
+++ b/dateutils.py
@@ -110,41 +110,30 @@ def parseHumaneDateTime(line):
     return date
 
 
-def formatTimeDelta(timeLeft):
-    """Friendly format a time delta :
-        - Use fake negative timedelta if needed not to confuse user.
-        - Hide seconds when delta > 1 day
-        - Hide hours and minutes when delta > 3 days
+def formatTimeDelta(delta):
+    """Friendly format a time delta:
+        - Show only days if delta > 1 day
+        - Show only hours and minutes othewise
     @param timeLeft: Remaining time
     @type timeLeft: timedelta (from datetime)
     @return: formated  str"""
-    if timeLeft < timedelta(0):
-        # Negative timedelta are very confusing, so we manually put a "-" and show a positive timedelta
-        timeLeft=-timeLeft
-        # Shorten timedelta:
-        if timeLeft < timedelta(3):
-            formatedTimeLeft=shortenTimeDelta(timeLeft, "datetime")
-        else:
-            formatedTimeLeft=shortenTimeDelta(timeLeft, "date")
-        formatedTimeLeft="-"+formatedTimeLeft
-    elif timeLeft < timedelta(1):
-        formatedTimeLeft=str(timeLeft)
-    elif timeLeft < timedelta(3):
-        formatedTimeLeft=shortenTimeDelta(timeLeft, "datetime")
+    if delta.days > 7:
+        value = "%dw" % (delta.days / 7)
+        days = delta.days % 7
+        if days > 0:
+            value = value + ", %dd" % days
+    elif delta.days > 0:
+        value = "%dd" % delta.days
     else:
-        formatedTimeLeft=shortenTimeDelta(timeLeft, "date")
-    return formatedTimeLeft
-
-
-def shortenTimeDelta(timeLeft, format):
-    """Shorten timeDelta according the format parameter
-    @param timeLeft: timedelta to be shorten
-    @type timeLeft: timedelta (from datetime)
-    @param format: can be "date" (hours, minute and seconds removed) or "datetime" (seconds removed)
-    @return: shorten timedelta"""
-    if   format=="date":
-        return str(timeLeft).split(",")[0]
-    elif format=="datetime":
-        # Hide seconds (remove the 3 last characters)
-        return str(timeLeft)[:-3]
+        minutes = delta.seconds / 60
+        hours = minutes / 60
+        minutes = minutes % 60
+        if hours > 0:
+            value = "%dh " % hours
+        else:
+            value = ""
+        value = value + "%dm" % minutes
+    if delta < timedelta(0):
+        value = "-" + value
+    return value
 # vi: ts=4 sw=4 et
diff --git a/textlistrenderer.py b/textlistrenderer.py
index c4314f1..239f49e 100644
--- a/textlistrenderer.py
+++ b/textlistrenderer.py
@@ -98,20 +98,9 @@ class AgeFormater(object):
 
     def __call__(self, task):
         delta = self.today - task.creationDate
-        if delta.days > 7:
-            value = "%dw" % (delta.days / 7)
-            days = delta.days % 7
-            if days > 0:
-                value = value + ", %dd" % days
-        elif delta.days > 0:
-            value = "%dd" % delta.days
-        elif delta.seconds > 3600:
-            value = "%dh" % (delta.seconds / 3600)
-        else:
-            value = "%dm" % (delta.seconds / 60)
-        return value, colorizer(delta.days)
+        return dateutils.formatTimeDelta(delta), colorizer(delta.days)
 
-class TimeLeftFormater(object):
+class DueDateFormater(object):
     def __init__(self, today):
         self.today = today
 
@@ -119,8 +108,15 @@ class TimeLeftFormater(object):
         if not task.dueDate:
             return "", None
         delta = task.dueDate - self.today
+        if delta.days != 0:
+            value = task.dueDate.strftime("%x %H:%M")
+        else:
+            value = task.dueDate.strftime("%H:%M")
+
+        value = value + " (%s)" % dateutils.formatTimeDelta(delta)
+
         color = colorizer(delta.days * 33, reverse=True)
-        return dateutils.formatTimeDelta(delta), color
+        return value, color
 
 
 class TextListRenderer(object):
@@ -135,7 +131,7 @@ class TextListRenderer(object):
             Column("U"        , 3         , urgencyFormater),
             Column("S"        , 1         , statusFormater),
             Column("Age"      , 8         , AgeFormater(today)),
-            Column("Time left", 13        , TimeLeftFormater(today))
+            Column("Due date" , 23        , DueDateFormater(today))
             ]
 
 
-- 
1.5.4.4


--------------080402080302090608010709--


Plus d'informations sur la liste de diffusion Ml-yokadi