From 24890c77f1fe3228950fb92a943f6266c07ddaaa Mon Sep 17 00:00:00 2001 From: discopatrick Date: Thu, 27 Apr 2017 00:24:17 +0100 Subject: [PATCH] =?UTF-8?q?Add=20a=20date=20query=20precision=20of=20?= =?UTF-8?q?=E2=80=98second=E2=80=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- beets/dbcore/query.py | 7 +++++-- test/test_datequery.py | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/beets/dbcore/query.py b/beets/dbcore/query.py index f9090e76b..3e6ff270d 100644 --- a/beets/dbcore/query.py +++ b/beets/dbcore/query.py @@ -533,13 +533,14 @@ class Period(object): instants of time during January 2014. """ - precisions = ('year', 'month', 'day', 'hour', 'minute') + precisions = ('year', 'month', 'day', 'hour', 'minute', 'second') date_formats = ( ('%Y',), # year ('%Y-%m',), # month ('%Y-%m-%d',), # day ('%Y-%m-%dT%H', '%Y-%m-%d %H'), # hour - ('%Y-%m-%dT%H:%M', '%Y-%m-%d %H:%M') # minute + ('%Y-%m-%dT%H:%M', '%Y-%m-%d %H:%M'), # minute + ('%Y-%m-%dT%H:%M:%S', '%Y-%m-%d %H:%M:%S') # second ) def __init__(self, date, precision): @@ -599,6 +600,8 @@ class Period(object): return date + timedelta(hours=1) elif 'minute' == precision: return date + timedelta(minutes=1) + elif 'second' == precision: + return date + timedelta(seconds=1) else: raise ValueError(u'unhandled precision {0}'.format(precision)) diff --git a/test/test_datequery.py b/test/test_datequery.py index 14156febc..99381be19 100644 --- a/test/test_datequery.py +++ b/test/test_datequery.py @@ -99,6 +99,22 @@ class DateIntervalTest(unittest.TestCase): self.assertContains('2000-01-01 12:30..2000-01-01 12:31', '2000-01-01T12:30:00') + def test_second_precision_intervals(self): + self.assertExcludes('2000-01-01T12:30:50..2000-01-01T12:30:55', + '2000-01-01T12:30:49') + self.assertContains('2000-01-01T12:30:50..2000-01-01T12:30:55', + '2000-01-01T12:30:50') + self.assertContains('2000-01-01T12:30:50..2000-01-01T12:30:55', + '2000-01-01T12:30:55') + self.assertExcludes('2000-01-01T12:30:50..2000-01-01T12:30:55', + '2000-01-01T12:30:56') + + # test with ' ' (space) separator + self.assertExcludes('2000-01-01 12:30:50..2000-01-01 12:30:55', + '2000-01-01T12:30:49') + self.assertContains('2000-01-01 12:30:50..2000-01-01 12:30:55', + '2000-01-01T12:30:50') + def test_unbounded_endpoints(self): self.assertContains('..', date=datetime.max) self.assertContains('..', date=datetime.min)