From 07107fb81baf6e2b96181b294c4c375367d102f9 Mon Sep 17 00:00:00 2001 From: Tomeu Vizoso Date: Mon, 3 Sep 2007 21:26:30 +0200 Subject: [PATCH] #2896: Remove sugar.date module. --- NEWS | 2 ++ sugar/Makefile.am | 1 - sugar/date.py | 57 --------------------------------- sugar/graphics/objectchooser.py | 43 +++++++++++++++++++++++-- tests/lib/runall.py | 2 -- tests/lib/test_date.py | 30 ----------------- 6 files changed, 43 insertions(+), 92 deletions(-) delete mode 100644 sugar/date.py delete mode 100644 tests/lib/test_date.py diff --git a/NEWS b/NEWS index 21cd9e7c..34f5a30d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,5 @@ +* #2896: Remove sugar.date module. (tomeu) + Snapshot 0b3f687749 * #3088: Fix style of zoom buttons palettes. (marco) diff --git a/sugar/Makefile.am b/sugar/Makefile.am index dffca334..4b94ff14 100644 --- a/sugar/Makefile.am +++ b/sugar/Makefile.am @@ -3,7 +3,6 @@ SUBDIRS = activity clipboard graphics objects presence datastore sugardir = $(pythondir)/sugar sugar_PYTHON = \ __init__.py \ - date.py \ env.py \ logger.py \ ltihooks.py \ diff --git a/sugar/date.py b/sugar/date.py deleted file mode 100644 index 3f4dcc2e..00000000 --- a/sugar/date.py +++ /dev/null @@ -1,57 +0,0 @@ -"""Simple date-representation model""" - -# Copyright (C) 2006-2007, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import datetime - -class Date(object): - """Date-object storing a simple time.time() float - - Useful to display dates in the UI in an - abbreviated and easy to read format. - """ - def __init__(self, timestamp): - """Initialise via a timestamp (floating point value)""" - self._today = datetime.date.today() - self._timestamp = timestamp - - def __str__(self): - """Produce a formatted date representation - - Eventually this should produce a localised version - of the date. At the moment it always produces English - dates in long form with Today and Yesterday - special-cased and dates from this year not presenting - the year in the date. - """ - date = datetime.date.fromtimestamp(self._timestamp) - - # FIXME localization - if date == self._today: - result = 'Today' - elif date == self._today - datetime.timedelta(1): - result = 'Yesterday' - elif date.year == self._today.year: - result = date.strftime('%B %d') - else: - result = date.strftime('%B %d, %Y') - - time = datetime.datetime.fromtimestamp(self._timestamp) - result = result + ', ' + time.strftime('%I:%M %p') - - return result diff --git a/sugar/graphics/objectchooser.py b/sugar/graphics/objectchooser.py index 4128cf31..1c0dd3ae 100644 --- a/sugar/graphics/objectchooser.py +++ b/sugar/graphics/objectchooser.py @@ -17,6 +17,7 @@ import logging import time +from gettext import gettext as _ import gtk import hippo @@ -31,6 +32,9 @@ from sugar.datastore import datastore from sugar import activity from sugar.objects import objecttype +# TODO: Activities should request the Journal to open objectchooser dialogs. In +# that way, we'll be able to reuse most of this code inside the Journal. + class ObjectChooser(gtk.Dialog): def __init__(self, title=None, parent=None, flags=0): gtk.Dialog.__init__(self, title, parent, flags, (gtk.STOCK_CANCEL, @@ -156,8 +160,7 @@ class CollapsedEntry(CanvasRoundBox): def _format_date(self): """ Convert from a string in iso format to a more human-like format. """ - ti = time.strptime(self.jobject.metadata['mtime'], "%Y-%m-%dT%H:%M:%S") - return str(Date(time.mktime(ti))) + return _get_elapsed_string(self.jobject.metadata['mtime']) def _format_title(self): return '"%s"' % self.jobject.metadata['title'] @@ -169,3 +172,39 @@ class CollapsedEntry(CanvasRoundBox): else: self.props.border_color = style.COLOR_BLACK.get_int() self.props.background_color = style.COLOR_PANEL_GREY.get_int() + +def _get_elapsed_string(date_string, max_levels=2): + ti = time.strptime(date_string, "%Y-%m-%dT%H:%M:%S") + + units = [[_('%d year'), _('%d years'), 356 * 24 * 60 * 60], + [_('%d month'), _('%d months'), 30 * 24 * 60 * 60], + [_('%d week'), _('%d weeks'), 7 * 24 * 60 * 60], + [_('%d day'), _('%d days'), 24 * 60 * 60], + [_('%d hour'), _('%d hours'), 60 * 60], + [_('%d minute'), _('%d minutes'), 60], + [_('%d second'), _('%d seconds'), 1]] + levels = 0 + result = '' + elapsed_seconds = int(time.time() - time.mktime(ti)) + for name_singular, name_plural, factor in units: + elapsed_units = elapsed_seconds / factor + if elapsed_units > 0: + + if levels > 0: + if max_levels - levels == 1: + result += _(' and ') + else: + result += _(', ') + + if elapsed_units == 1: + result += name_singular % elapsed_units + else: + result += name_plural % elapsed_units + elapsed_seconds -= elapsed_units * factor + levels += 1 + + if levels == max_levels: + break + + return result + diff --git a/tests/lib/runall.py b/tests/lib/runall.py index 6ee9442f..ae1bb3ae 100644 --- a/tests/lib/runall.py +++ b/tests/lib/runall.py @@ -17,14 +17,12 @@ import unittest -import test_date import test_mime runner = unittest.TextTestRunner() loader = unittest.TestLoader() suite = unittest.TestSuite() -suite.addTest(loader.loadTestsFromModule(test_date)) suite.addTest(loader.loadTestsFromModule(test_mime)) runner.run(suite) diff --git a/tests/lib/test_date.py b/tests/lib/test_date.py deleted file mode 100644 index c6da871e..00000000 --- a/tests/lib/test_date.py +++ /dev/null @@ -1,30 +0,0 @@ -# Copyright (C) 2007, Red Hat, Inc. -# -# This library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2 of the License, or (at your option) any later version. -# -# This library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this library; if not, write to the -# Free Software Foundation, Inc., 59 Temple Place - Suite 330, -# Boston, MA 02111-1307, USA. - -import datetime -import unittest - -from sugar.date import Date - -class TestDate(unittest.TestCase): - def test_today(self): - date = Date(datetime.date(2000, 1, 1)) - date._today = datetime.date(2000, 1, 1) - self.assertEqual(str(date), 'Today') - -if __name__ == "__main__": - unittest.main()