import os import json import time import datetime import utilities_script as utility class timer(): def __init__(self, name, startTime = datetime.datetime.now, endTime = datetime.datetime.now, trigger = "", trigger_exec = "", tempTimer = True): self.name = name self.startTime = startTime self.endTime = endTime self.trigger = trigger self.trigger_exec = trigger_exec self.tempTimer = tempTimer # If enabled this will cause the Timer to be deleted upon shutdown or startup class Timers_Module(): def __init__(self): super().__init__() self.timersList = [] def main(self): self.createTimer("test_timer", seconds=30) #self.updateTimersList() def updateTimersList(self): self.compile_and_load() def compile_and_load(self): dic = {} implementations = self.get_implementations_dir() for dirName, subdirList, fileList in os.walk(implementations): for file in fileList: name, startTime, endTime, trigger, trigger_exec, tempTimer = self.readFile(file) newTimer = timer(name, startTime, endTime, trigger, trigger_exec, tempTimer) dic[newTimer.name] = newTimer self.timersList.append(self.timersList) break return dic def get_base_dir(self) -> str: cwd = os.getcwd() split = os.path.split(cwd) current = split[len(split) - 1] if current == 'timers': return self.check_dir(cwd) elif current == 'Praxis_Bot' or current == 'Praxis': return self.check_dir(os.path.join(cwd, "timers")) else: print("could not find working directory for Praxis_Bot/timers") raise Exception def get_implementations_dir(self) -> str: return self.check_dir(os.path.join(self.get_base_dir())) def check_dir(self, path: str) -> str: if not os.path.exists(path): os.mkdir(path, 0x777) return path def createTimer(self, name, days=0, hours=0, minutes=0, seconds=0, microseconds=0, trigger="", trigger_exec="", tempTimer=True): startTime = datetime.datetime.now() targetTime = startTime + datetime.timedelta(days=days, hours=hours, minutes=minutes, seconds=seconds, microseconds=microseconds) newTimer= timer(name, startTime, targetTime, trigger, trigger_exec, tempTimer) self.timersList.append(newTimer) self.makeFile(newTimer) def checkTimer(self, name): name, startTime, endTime, trigger, trigger_exec, tempTimer = self.readFile(name) if endTime < datetime.datetime.now(): print("do timer thing") self.TIMER_EXEC(name, startTime, endTime, trigger, trigger_exec, tempTimer) def deleteTimer(self, name): self.deleteFile(name) def TIMER_EXEC(self, name, startTime, endTime, trigger, trigger_exec, tempTimer): print(trigger, trigger_exec, "at", endTime) if tempTimer == True: print("deleting " + name) self.deleteTimer(name) def makeFile(self, timer_obj:timer): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = timer_obj.name + ".json" real_file_path = os.path.join(script_dir, relative_path) with open(real_file_path, 'r+') as cred_r: data = json.load(timer_obj) data['name'] = timer_obj.name data['startTime'] = timer_obj.startTime data['endTime'] = timer_obj.endTime data['trigger'] = timer_obj.trigger data['trigger_exec'] = timer_obj.trigger_exec data['tempTimer'] = timer_obj.tempTimer with open(real_file_path, 'w') as cred_w: json.dump(data, cred_w, indent=2) def readFile(self, name): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = name #+ ".json" real_file_path = os.path.join(script_dir, relative_path) startTime, endTime, trigger, tempTimer = None with open(real_file_path, 'r') as cred_r: data = json.load(cred_r) name = data['name'] startTime = data['startTime'] endTime = data['endTime'] trigger = data['trigger'] trigger_exec = data['trigger_exec'] tempTimer = data['tempTimer'] return name, startTime, endTime, trigger, trigger_exec, tempTimer def deleteFile(self, name): dir = utility.get_dir("timers") script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in relative_path = name #+ ".json" real_file_path = os.path.join(script_dir, relative_path) os.remove(real_file_path) if __name__ == "__main__": testModule = Timers_Module() testModule.main()