[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