[Checkins] SVN: z3ext.formatter/trunk/ - Added 'human' datetime formatter (XX minute(s) ago)

Nikolay Kim fafhrd at datacom.kz
Sun Feb 22 17:36:25 EST 2009


Log message for revision 97120:
  - Added 'human' datetime formatter (XX minute(s) ago)
  
  - Do not show seconds for fancyDatetime fomratter
  
  
  

Changed:
  U   z3ext.formatter/trunk/CHANGES.txt
  U   z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml
  U   z3ext.formatter/trunk/src/z3ext/formatter/fancydatetime.py
  A   z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py

-=-
Modified: z3ext.formatter/trunk/CHANGES.txt
===================================================================
--- z3ext.formatter/trunk/CHANGES.txt	2009-02-22 21:44:10 UTC (rev 97119)
+++ z3ext.formatter/trunk/CHANGES.txt	2009-02-22 22:36:25 UTC (rev 97120)
@@ -2,6 +2,14 @@
 CHANGES
 =======
 
+1.2.6 (Unreleased)
+------------------
+
+- Added 'human' datetime formatter (XX minute(s) ago)
+
+- Do not show seconds for fancyDatetime fomratter
+
+
 1.2.5 (2008-11-23)
 ------------------
 

Modified: z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml	2009-02-22 21:44:10 UTC (rev 97119)
+++ z3ext.formatter/trunk/src/z3ext/formatter/configure.zcml	2009-02-22 22:36:25 UTC (rev 97120)
@@ -17,11 +17,18 @@
      handler=".expression.FormatterExpression" />
 
   <!-- formatters -->
-  <adapter name="date" factory=".dformatter.DateFormatterFactory" />
-  <adapter name="dateTime" factory=".dtformatter.DatetimeFormatterFactory" />
+  <adapter name="date"
+	   factory=".dformatter.DateFormatterFactory" />
+
+  <adapter name="dateTime"
+	   factory=".dtformatter.DatetimeFormatterFactory" />
+
   <adapter name="fancyDatetime"
 	   factory=".fancydatetime.FancyDatetimeFormatterFactory" />
 
+  <adapter name="humanDatetime"
+	   factory=".humandatetime.HumanDatetimeFormatterFactory" />
+
   <!-- vocabularies -->
   <utility
      name="Timezones"

Modified: z3ext.formatter/trunk/src/z3ext/formatter/fancydatetime.py
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/fancydatetime.py	2009-02-22 21:44:10 UTC (rev 97119)
+++ z3ext.formatter/trunk/src/z3ext/formatter/fancydatetime.py	2009-02-22 22:36:25 UTC (rev 97120)
@@ -62,6 +62,10 @@
 
         delta = d1 - d2
 
+        pattern = formatter.getPattern()
+        if ':ss' in pattern:
+            formatter.setPattern(pattern.replace(':ss', '').strip())
+
         if delta.days == 0:
             pattern = formatter.getPattern()
             pos = pattern.find('h')

Added: z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py
===================================================================
--- z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py	                        (rev 0)
+++ z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py	2009-02-22 22:36:25 UTC (rev 97120)
@@ -0,0 +1,97 @@
+##############################################################################
+#
+# Copyright (c) 2007 Zope Corporation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" ``humanDatetime`` formatter implementation
+
+$Id$
+"""
+from pytz import utc, timezone
+from datetime import datetime
+from zope import interface, component
+from zope.component import getUtility
+from zope.interface.common.idatetime import ITZInfo
+from zope.publisher.interfaces.http import IHTTPRequest
+
+from z3ext.formatter.interfaces import _, \
+    IFormatter, IFormatterFactory, IFormatterConfiglet
+
+
+class HumanDatetimeFormatter(object):
+    interface.implements(IFormatter)
+
+    def __init__(self, request, *args):
+        self.request = request
+
+    def format(self, value):
+        configlet = getUtility(IFormatterConfiglet)
+        tz = None
+        if configlet.principalTimezone:
+            tz = ITZInfo(self.request.principal, None)
+
+        if tz is None:
+            tz = timezone(configlet.timezone)
+
+        if value.tzinfo is None:
+            value = datetime(value.year, value.month, value.day, value.hour,
+                             value.minute, value.second, value.microsecond, utc)
+
+        value = value.astimezone(tz)
+
+        timezoneFormat = configlet.timezoneFormat
+
+        d1 = datetime.now(utc)
+        d2 = value.astimezone(utc)
+
+        delta = d1 - d2
+
+        years, months, weeks, hours, minutes = (
+            delta.days/365, delta.days/30, delta.days/7,
+            delta.seconds/3600, delta.seconds/60)
+
+        if years > 0:
+            return _(u'${value} year(s) ago',
+                     mapping={'value': years})
+
+        if months > 0:
+            return _(u'${value} month(s) ago',
+                     mapping={'value': months})
+
+        if weeks > 0:
+            return _(u'${value} week(s) ago',
+                     mapping={'value': weeks})
+
+        if delta.days > 0:
+            return _(u'${value} day(s) ago',
+                     mapping={'value': delta.days})
+
+        if hours > 0:
+            return _(u'${value} hour(s) ago',
+                     mapping={'value': hours})
+
+        if minutes > 0:
+            return _(u'${value} minute(s) ago',
+                     mapping={'value': minutes})
+
+        return _(u'${value} second(s) ago',
+                 mapping={'value': delta.seconds})
+
+
+class HumanDatetimeFormatterFactory(object):
+    component.adapts(IHTTPRequest)
+    interface.implements(IFormatterFactory)
+
+    def __init__(self, request):
+        self.request = request
+
+    def __call__(self, *args, **kw):
+        return HumanDatetimeFormatter(self.request, *args)


Property changes on: z3ext.formatter/trunk/src/z3ext/formatter/humandatetime.py
___________________________________________________________________
Added: svn:keywords
   + Id



More information about the Checkins mailing list