From a99cddf76f04a9521340b4ae9d4edef2f6982c13 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Tue, 15 May 2018 22:27:16 +0100 Subject: [PATCH 1/7] allow changing the locale for slang_time --- maya/core.py | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/maya/core.py b/maya/core.py index dc26c1d..289598b 100644 --- a/maya/core.py +++ b/maya/core.py @@ -336,10 +336,15 @@ def slang_date(self): dt = self.datetime(naive=True, to_timezone=self.local_timezone) return humanize.naturaldate(dt) - def slang_time(self): - """"Returns human slang representation of time.""" - dt = self.datetime(naive=True, to_timezone=self.local_timezone) - return humanize.naturaltime(dt) + def slang_time(self, locale="en"): + """"Returns human slang representation of time. + + Keyword Arguments: + locale -- locale to translate too, e.g. 'fr' for french. + (default: 'en' - English) + """ + dt = self.datetime(to_timezone=self.local_timezone) + return pendulum.instance(dt).diff_for_humans(locale=locale) def utc_offset(time_struct=None): From 2d848bd62a862f65159d34d30c8685fd544f5bdf Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Tue, 15 May 2018 22:55:07 +0100 Subject: [PATCH 2/7] typo fix --- maya/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maya/core.py b/maya/core.py index 289598b..13c9cd1 100644 --- a/maya/core.py +++ b/maya/core.py @@ -340,7 +340,7 @@ def slang_time(self, locale="en"): """"Returns human slang representation of time. Keyword Arguments: - locale -- locale to translate too, e.g. 'fr' for french. + locale -- locale to translate to, e.g. 'fr' for french. (default: 'en' - English) """ dt = self.datetime(to_timezone=self.local_timezone) From df09625e7412b866536e8dbf10201f1519e52303 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Tue, 15 May 2018 22:56:28 +0100 Subject: [PATCH 3/7] fix failing test --- tests/test_maya.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_maya.py b/tests/test_maya.py index 8afef65..72002d5 100644 --- a/tests/test_maya.py +++ b/tests/test_maya.py @@ -160,7 +160,7 @@ def test_slang_date(): def test_slang_time(): d = maya.when('1 hour ago') - assert d.slang_time() == 'an hour ago' + assert d.slang_time() == '1 hour ago' @pytest.mark.parametrize("string,kwds,expected", [ From 3760af2c41eba3de2919cd8ae60da240d6739852 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Mon, 21 May 2018 21:38:55 +0100 Subject: [PATCH 4/7] use pendulum and dateparser for slang_date --- maya/core.py | 41 ++++++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/maya/core.py b/maya/core.py index 13c9cd1..c42440c 100644 --- a/maya/core.py +++ b/maya/core.py @@ -3,6 +3,7 @@ # || | || || // || || import email.utils import time +import calendar import functools from datetime import timedelta, datetime as Datetime @@ -14,6 +15,7 @@ import snaptime from tzlocal import get_localzone from dateutil.relativedelta import relativedelta +from dateparser.languages.loader import default_loader from .compat import cmp, comparable @@ -331,10 +333,29 @@ def epoch(self): # Human Slang Extras # ------------------ - def slang_date(self): - """"Returns human slang representation of date.""" - dt = self.datetime(naive=True, to_timezone=self.local_timezone) - return humanize.naturaldate(dt) + def slang_date(self, locale="en"): + """"Returns human slang representation of date. + + Keyword Arguments: + locale -- locale to translate to, e.g. 'fr' for french. + (default: 'en' - English) + """ + dt = pendulum.instance(self.datetime()) + + try: + return _translate(dt, locale) + except KeyError: + pass + + dt.set_formatter("alternative") + delta = humanize.time.abs_timedelta( + timedelta(seconds=(self.epoch - now().epoch))) + + format_string = "DD MMM" + if delta.days >= 365: + format_string += " YYYY" + + return dt.format(format_string, locale=locale).title() def slang_time(self, locale="en"): """"Returns human slang representation of time. @@ -343,7 +364,7 @@ def slang_time(self, locale="en"): locale -- locale to translate to, e.g. 'fr' for french. (default: 'en' - English) """ - dt = self.datetime(to_timezone=self.local_timezone) + dt = self.datetime() return pendulum.instance(dt).diff_for_humans(locale=locale) @@ -764,6 +785,16 @@ def _seconds_or_timedelta(duration): return dt_timedelta +def _translate(dt, target_locale): + en = default_loader.get_locale("en") + target = default_loader.get_locale(target_locale) + naturaldate = humanize.naturaldate(dt) + + base = en.translate(naturaldate, settings=dateparser.conf.settings) + + return target.info["relative-type"][base][-1] + + def intervals(start, end, interval): """ Yields MayaDT objects between the start and end MayaDTs given, From 6755968f69e7c5b6fec59cbb1676b72e118ff074 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Tue, 22 May 2018 09:57:32 +0100 Subject: [PATCH 5/7] remove unused calendar import --- maya/core.py | 1 - 1 file changed, 1 deletion(-) diff --git a/maya/core.py b/maya/core.py index c42440c..2920fd0 100644 --- a/maya/core.py +++ b/maya/core.py @@ -3,7 +3,6 @@ # || | || || // || || import email.utils import time -import calendar import functools from datetime import timedelta, datetime as Datetime From d44a1dd2f62a96146de3cffe74cf7e2272c0c18e Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Sat, 26 May 2018 11:19:36 +0100 Subject: [PATCH 6/7] add tracer tests for slang_ locales --- tests/test_maya.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_maya.py b/tests/test_maya.py index 72002d5..50cfb9c 100644 --- a/tests/test_maya.py +++ b/tests/test_maya.py @@ -158,11 +158,21 @@ def test_slang_date(): assert d.slang_date() == 'tomorrow' +def test_slang_date_locale(): + d = maya.when('tomorrow') + assert d.slang_date(locale='fr') == 'demain' + + def test_slang_time(): d = maya.when('1 hour ago') assert d.slang_time() == '1 hour ago' +def test_slang_time_locale(): + d = maya.when('1 hour ago') + assert d.slang_time(locale='de') == 'vor 1 Stunde' + + @pytest.mark.parametrize("string,kwds,expected", [ ('February 21, 1994', {}, '1994-02-21 00:00:00+00:00'), From d87236a30ddc28bbe6250560de3675112723d3d4 Mon Sep 17 00:00:00 2001 From: Alex Ward Date: Sat, 26 May 2018 11:19:57 +0100 Subject: [PATCH 7/7] update authors --- AUTHORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/AUTHORS.rst b/AUTHORS.rst index 3b27f00..5d13d12 100644 --- a/AUTHORS.rst +++ b/AUTHORS.rst @@ -24,3 +24,4 @@ In chronological order: - Evan Mattiza (`@emattiza `_) - Dima Spivak (`@dimaspivak `_) - Tom Barron (`@dtbarron `_) +- Alex Ward (`@alxwrd `_)