import time import webbrowser import requests from datetime import timedelta from datetime import datetime from datetime import timezone from environment import * class myLog(): def __init__(self): self._file = open(PATH_LOG_FILE,"a",encoding='utf-8') def write(self,item): currentDateTime = DateTimeHelper.getCurrentDateTime() strCurrentDateTime = DateTimeHelper.getDateTimeAsString(currentDateTime) strOutput = '[' + strCurrentDateTime +'] '+item self._file.write(strOutput) self._file.write("\n") self._file.flush() class Utility: def __init__(self): pass @staticmethod def pad(strItem, strPad, length): while len(strItem)"): tag_name = strBegin[1:-1] # e.g. "time" index = strItem.index("<" + tag_name) index = strItem.index(">", index) + 1 else: index = strItem.index(strBegin) + len(strBegin) except ValueError: return None if index == -1: return None str = strItem[index:] if strBegin is not None else strItem if strEnd is None: return str try: index = str.index(strEnd) except ValueError: return None sb = "" for strIndex in range(0, len(str) - 1): if index == strIndex: break sb = sb + str[strIndex] return sb class HttpNetRequest: def __init__(self): self.Message="" def getHttpNetRequest(self,url): retrycount=0 maxretries=5 while retrycount maxretries: raise class DateTimeHelper: def __init__(self): pass def __init__(self,capturedatetime,timeChange): self.datetimestamp=capturedatetime self.timeChange=timeChange self.offsetTime=DateTimeHelper.applyRelativeTime(self.datetimestamp, self.timeChange) def getDateTimeStamp(self): return self.datetimestamp def getTimeChange(self): return self.timeChange def getOffsetTime(self): return self.offsetTime def getOffsetTimeAsString(self): return DateTimeHelper.getDateTimeAsString(self.offsetTime) def toString(self): pass @staticmethod def getDateTimeAsString(someDateTime): if(not isinstance(someDateTime,datetime)): raise Exception('Invalid type for parameter') return someDateTime.strftime("%m-%d-%Y %H:%M:%S") @staticmethod def getDateTimeFromString(someDateTimeString): if(not isinstance(someDateTimeString,str)): raise Exception('Invalid type for parameter') return DateTimeHelper.strptime(someDateTimeString,"%m-%d-%Y %H:%M:%S") @staticmethod def getCurrentDateTime(): return datetime.now() # January 1, 2026 @staticmethod 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 } 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): relativeTimeResult = DateTimeHelper.strptime(relativetime) return relativeTimeResult if relativetime=='just now': return relativeTimeResult if relativetime=='just in': return relativeTimeResult relativetimesplit=relativetime.split() if len(relativetimesplit)==2: year=datetime.now().year relativetimex=relativetime+', '+str(year) relativeDate = DateTimeHelper.strptime(relativetimex) if(relativeDate>datetime.now()): year=datetime.now().year-1 relativetimex=relativetime+', '+str(year) relativeDate=DateTimeHelper.strptime(relativetimex) days=sometime-relativeDate relativeTimeResult=sometime-days elif relativetimesplit[1]=='hour' or relativetimesplit[1]=='hours': hours=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(hours=hours) elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days': days=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(days=days) elif relativetimesplit[1]=='minute' or relativetimesplit[1]=='minutes': minutes=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(minutes=minutes) elif len(relativetimesplit)==3: # '16 mins ago' '2 hours ago' if relativetimesplit[1]=='mins': minutes=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(minutes=minutes) elif relativetimesplit[1]=='hours': hours=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(hours=hours) elif relativetimesplit[1]=='day' or relativetimesplit[1]=='days': days=int(relativetimesplit[0]) relativeTimeResult=sometime-timedelta(days=days) return relativeTimeResult class DateTime: def __init__(self): self.date=DateTime.getCurrentTime() def __init__(self,strDate=None): if None!=strDate: self.date=DateTime.dateFromString(strDate) else: self.date=DateTime.getCurrentTime() def toString(self): return DateTime.dateToString(self.date) def toStringMonthDay(self): return self.getMonthAsString() + ' ' + Utility.pad(str(self.date.day),'0',2) + ', '+ str(self.date.year) def getMonthAsString(self): strMonth=None if(self.date.month==1): strMonth='January' elif(self.date.month==2): strMonth='February' elif(self.date.month==3): strMonth='March' elif(self.date.month==4): strMonth='April' elif(self.date.month==5): strMonth='May' elif(self.date.month==6): strMonth='June' elif(self.date.month==7): strMonth='July' elif(self.date.month==8): strMonth='August' elif(self.date.month==9): strMonth='September' elif(self.date.month==10): strMonth='October' elif(self.date.month==11): strMonth='November' elif(self.date.month==12): strMonth='December' else: strMonth='???' return strMonth def deltaTime(self,someDate): return DateTime.deltaTime(self.date,someDate) def getDate(self): return self.date @staticmethod def fromdatetime(somedatetime): if(not isinstance(somedatetime,datetime)): raise Exception('Invalid type for parameter') theDate=DateTime() theDate.date=somedatetime return theDate @staticmethod def dateToString(someDate): return str(someDate) @staticmethod def dateFromString(strDate): return datetime.fromisoformat(strDate) @staticmethod def now(): return DateTime.getCurrentTime() @staticmethod def getCurrentTime(): return datetime.now(timezone.utc) @staticmethod def sortList(dateList): dateList.sort(key=lambda x:x.toString()) @staticmethod def deltaTime(startTime,endTime): if startTime > endTime: timedelta=startTime-endTime else: timedelta=endTime-startTime days, seconds=timedelta.days, timedelta.seconds hours=timedelta.total_seconds()//3600 minutes=(seconds %3600)//60 seconds=seconds%60 return days, hours, minutes, seconds #currentDate=DateTimeHelper.getCurrentDateTime() #strDateTime=DateTimeHelper.getDateTimeAsString(currentDate) #print(strDateTime) #relativeTime=DateTimeHelper.applyRelativeTime(currentDate,'October 9') #strDateTime=DateTimeHelper.getDateTimeAsString(relativeTime) #print(relativeTime) #if(relativeTime>currentDate): # print('It is greater')