From 748495dcc9b29ecd339827cff1e99a479f07d1de Mon Sep 17 00:00:00 2001 From: P0psicles Date: Tue, 4 Sep 2018 13:54:59 +0200 Subject: [PATCH 01/11] Added the new hd-space pubdate formats to the unittests. --- tests/providers/test_generic_provider.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/providers/test_generic_provider.py b/tests/providers/test_generic_provider.py index 075693de36..a34cfe99ff 100644 --- a/tests/providers/test_generic_provider.py +++ b/tests/providers/test_generic_provider.py @@ -2,9 +2,10 @@ """Provider test code for Generic Provider.""" from __future__ import unicode_literals -from datetime import date, datetime +from datetime import date, datetime, timedelta from dateutil import tz +from tzlocal import get_localzone from medusa.providers.generic_provider import GenericProvider @@ -127,6 +128,18 @@ 'timezone': 'US/Eastern', 'fromtimestamp': True }, + { # p22: hd-space test human date like yesterdat at 12:00:00 + 'pubdate': 'yesterday at {0}'.format((datetime.now() - timedelta(minutes=10, seconds=25)).strftime('%H:%M:%S')), + 'expected': datetime.now().replace(microsecond=0, tzinfo=tz.gettz('UTC')) - timedelta(days=1, minutes=10, seconds=25), + 'human_time': False, + 'calculate_delta': True + }, + { # p22: hd-space test human date like today at 12:00:00 + 'pubdate': 'today at {0}'.format((datetime.now() - timedelta(minutes=10, seconds=25)).strftime('%H:%M:%S')), + 'expected': datetime.now().replace(microsecond=0, tzinfo=tz.gettz('UTC')) - timedelta(days=0, minutes=10, seconds=25), + 'human_time': False, + 'calculate_delta': True + }, ]) def test_parse_pubdate(p): # Given @@ -137,6 +150,7 @@ def test_parse_pubdate(p): df = p.get('dayfirst', False) yf = p.get('yearfirst', False) ft = p.get('fromtimestamp', False) + calculate_delta = p.get('calculate_delta', False) # When actual = sut.parse_pubdate(parsed_date, human_time=ht, timezone=tzone, From 20b0100f68e12269a5fe2bdc55dbd869413543ba Mon Sep 17 00:00:00 2001 From: P0psicles Date: Tue, 4 Sep 2018 13:57:59 +0200 Subject: [PATCH 02/11] Make changes to parse_pubdate() and hdspace. So it will handle date times like: yesterday at 12:00:00 --- medusa/providers/generic_provider.py | 18 +++++++++++++++++- medusa/providers/torrent/html/hdspace.py | 9 ++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/medusa/providers/generic_provider.py b/medusa/providers/generic_provider.py index 5c3cf21431..7109f8411b 100644 --- a/medusa/providers/generic_provider.py +++ b/medusa/providers/generic_provider.py @@ -574,12 +574,28 @@ def parse_pubdate(pubdate, human_time=False, timezone=None, **kwargs): matched_time = int(round(float(matched_time.strip()))) seconds = parse('{0} {1}'.format(matched_time, matched_granularity)) + if seconds is None: + log.exception('Failed parsing human time: {0} {1}', matched_time, matched_granularity) + raise ValueError('Failed parsing human time: {0} {1}'.format(matched_time, matched_granularity)) return datetime.now(tz.tzlocal()) - timedelta(seconds=seconds) if fromtimestamp: dt = datetime.fromtimestamp(int(pubdate), tz=tz.gettz('UTC')) else: - dt = parser.parse(pubdate, dayfirst=df, yearfirst=yf, fuzzy=True) + from tzlocal import get_localzone + day_offset = 0 + if 'yesterday at' in pubdate.lower() or 'today at' in pubdate.lower(): + # Strip yesterday including any other words + time = re.search(r'(?P