Praxis_Bot/timers_module.py
2021-05-05 14:06:52 -04:00

141 lines
4.9 KiB
Python

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()