From 91383d8687135c1ba952118f04c0c157893c53b7 Mon Sep 17 00:00:00 2001 From: Sean Date: Thu, 29 Jan 2026 23:02:55 -0500 Subject: [PATCH] Fix strptime issue --- environment.py | 2 +- newsfeed.py | 14 ++++++++- utility.py | 85 ++++++++++++++++++++++++++++++++++---------------- 3 files changed, 72 insertions(+), 29 deletions(-) diff --git a/environment.py b/environment.py index d1acd01..6db22ac 100755 --- a/environment.py +++ b/environment.py @@ -28,7 +28,7 @@ CACHE_EXPIRY_MINS=10 LOG_HTTP_RESPONSES = False -FEED_REJECT_IF_OLDER_THAN_DAYS = 7 +FEED_REJECT_IF_OLDER_THAN_DAYS = 60 class PathHelper: pathChar="/" diff --git a/newsfeed.py b/newsfeed.py index 5516dee..84f9a3c 100755 --- a/newsfeed.py +++ b/newsfeed.py @@ -113,7 +113,6 @@ class NewsFeed: if video is not None and not (video.description in videos): videos[video.description]=video video.setFeedTime(DateTimeHelper.applyRelativeTime(now,video.feedTimeOffset)) -# videoList=list(videos.values()) videoList=self.filterFeedMaxDays(list(videos.values()),FEED_REJECT_IF_OLDER_THAN_DAYS) videoList=sorted(videoList, key=lambda x:x.getFeedTime(),reverse=True) self.writeFeedCache(cachePathFileName,videoList) @@ -447,6 +446,19 @@ def parseDuration(strDuration): # DON'T LEAVE ANYTHING OPEN BELOW THIS LINE BECAUSE THIS FILE IS IMPORTED BY OTHER MODULES AND ANY CODE NOT IN A CLASS WILL BE RUN +# strdate = "January 1, 2026" +# if DateTimeHelper.canstrptimeex(strdate): +# theDate = DateTimeHelper.strptimeex(strdate) +# if(not isinstance(theDate,datetime)): +# raise Exception('Invalid type for parameter') + + + +# feedTimeOffset = "January 13, 2025" +# currentTime = datetime.now() +# for i in range(1,100): +# relativeTime = DateTimeHelper.applyRelativeTime(currentTime,feedTimeOffset) +# print(relativeTime) #print(FOX_NEWS_URL) # pathFileName='/home/pi/.kodi/addons/plugin.video.fox.news/resources/lib/videodb.txt' diff --git a/utility.py b/utility.py index 08bb68e..6834baf 100755 --- a/utility.py +++ b/utility.py @@ -117,66 +117,97 @@ class DateTimeHelper: def getCurrentDateTime(): return datetime.now() +# January 1, 2026 @staticmethod - def strptime(theTime,theFormat): - try: - return datetime.strptime(theTime,theFormat) - except: - return datetime(*(time.strptime(theTime,theFormat)[0:6])) + def strptime(date_string): + month_map = { + 'January': 1, 'February': 2, 'March': 3, 'April': 4, + 'May': 5, 'June': 6, 'July': 7, 'August': 8, + 'September': 9, 'October': 10, 'November': 11, 'December': 12 + } - @staticmethod - def canstrptime(theTime,theFormat): - try: - datetime.strptime(theTime,theFormat) - return True - except: + date_string = date_string.replace(',', '') + parts = date_string.split() + if len(parts) == 3: + month_str, day_str, year_str = parts + month = month_map.get(month_str) + day = int(day_str) + year = int(year_str) + + if month is not None: + return datetime(year, month, day) + else: + raise ValueError("Invalid month name in date string") + else: + raise ValueError("Date string format is incorrect") + +# January 1, 2026 + @staticmethod + def canstrptime(date_string): + month_map = { + 'January': 1, 'February': 2, 'March': 3, 'April': 4, + 'May': 5, 'June': 6, 'July': 7, 'August': 8, + 'September': 9, 'October': 10, 'November': 11, 'December': 12 + } + + date_string = date_string.replace(',', '') + parts = date_string.split() + if len(parts) != 3: return False - + month_str, day_str, year_str = parts + month = month_map.get(month_str) + if month is None: + return False + day = int(day_str) + year = int(year_str) + return True + # returns a datetime @staticmethod def applyRelativeTime(sometime,relativetime): + relativeTimeResult = sometime if(not isinstance(sometime,datetime)): raise Exception('Invalid type for parameter') if(not isinstance(relativetime,str)): raise Exception('Invalid type for parameter') - if DateTimeHelper.canstrptime(relativetime,'%B %d, %Y'): - sometime = DateTimeHelper.strptime(relativetime,'%B %d, %Y') - return sometime + if DateTimeHelper.canstrptime(relativetime): + relativeTimeResult = DateTimeHelper.strptime(relativetime) + return relativeTimeResult if relativetime=='just now': - return sometime + return relativeTimeResult if relativetime=='just in': - return sometime + return relativeTimeResult relativetimesplit=relativetime.split() if len(relativetimesplit)==2: year=datetime.now().year relativetimex=relativetime+', '+str(year) - relativeDate = DateTimeHelper.strptime(relativetimex, '%B %d, %Y') + relativeDate = DateTimeHelper.strptime(relativetimex) if(relativeDate>datetime.now()): year=datetime.now().year-1 relativetimex=relativetime+', '+str(year) - relativeDate=DateTimeHelper.strptime(relativetimex,'%B %d, %Y') + relativeDate=DateTimeHelper.strptime(relativetimex) days=sometime-relativeDate - sometime=sometime-days + relativeTimeResult=sometime-days elif relativetimesplit[1]=='hour' or relativetimesplit[1]=='hours': hours=int(relativetimesplit[0]) - sometime=sometime-timedelta(hours=hours) + relativeTimeResult=sometime-timedelta(hours=hours) elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days': days=int(relativetimesplit[0]) - sometime=sometime-timedelta(days=days) + relativeTimeResult=sometime-timedelta(days=days) elif relativetimesplit[1]=='minute' or relativetimesplit[1]=='minutes': minutes=int(relativetimesplit[0]) - sometime=sometime-timedelta(minutes=minutes) + relativeTimeResult=sometime-timedelta(minutes=minutes) elif len(relativetimesplit)==3: # '16 mins ago' '2 hours ago' if relativetimesplit[1]=='mins': minutes=int(relativetimesplit[0]) - sometime=sometime-timedelta(minutes=minutes) + relativeTimeResult=sometime-timedelta(minutes=minutes) elif relativetimesplit[1]=='hours': hours=int(relativetimesplit[0]) - sometime=sometime-timedelta(hours=hours) + relativeTimeResult=sometime-timedelta(hours=hours) elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days': days=int(relativetimesplit[0]) - sometime=sometime-timedelta(days=days) - return sometime + relativeTimeResult=sometime-timedelta(days=days) + return relativeTimeResult class DateTime: def __init__(self):