RevB-Backend / revisionbankscheduler.py
CaesarCloudSync
CaesarAI Change Card Improve 1
211843b
raw
history blame
8.17 kB
import random
from raspsendemail import RaspEmail
class RevisionBankScheduler:
def __init__(self,importcsv) -> None:
#self.usercardstosend = list()
self.importcsv = importcsv
def sendimagecard(self,user,card):
imagecardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}
##print(user["sendtoemail"])
RaspEmail.send(receiver_email = imagecardjson["email"],subject = imagecardjson["subject"],htmlmessage = imagecardjson["message"],attachment = imagecardjson["attachment"])
#response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}})
#print(response.text)
#sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
def sendtextcard(self,user,card):
#print(user["sendtoemail"])
#response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}})
textcardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}
#print(textcardjson["attachment"])
#print(textcardjson)
RaspEmail.send(receiver_email = textcardjson["email"],subject = textcardjson["subject"],htmlmessage = textcardjson["message"])#,attachment = textcardjson["attachment"])
#sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
#print(response.text)
#brlvuddpzmanpidi
def getcarddetails(self):
# TODO Separate cards to there own collection
userscheduledcards = list(self.importcsv.db.scheduledcards.find())
usercardstosend = []
for user in userscheduledcards:
usercardstosend.append({"sendtoemail":user["sendtoemail"],"revisioncards":user["revisioncards"],"revisionscheduleinterval":user["revisionscheduleinterval"]})
return usercardstosend
def runschedule(self):
def setprobabilities(revisioncard):
try:
revcolor = revisioncard["color"]
if revcolor == "green":
return 25
if revcolor == "amber":
return 50
if revcolor == "red":
return 75
except Exception as ex:
#print(type(ex),ex)
return 100
print("Revision card loading...")
usercardstosend = self.getcarddetails()
#print("Revision card loaded.")
#print(usercardstosend)
for user in usercardstosend:
# Creating a name list
revisioncards = user["revisioncards"]
#print(revisioncards)
weights = list(map(setprobabilities,revisioncards))
trafficlightemailsleft = 3
for card,weight in zip(revisioncards,weights):
#print(card)
#print(weight)
if weight == 100:
# send email
print("Sending revision card...")
#time.sleep(10)
#print(card)
#
if "revisioncardimage" in card :
if card["revisioncardimage"] != [] :
self.sendimagecard(user,card)
print("Card sent.")
trafficlightemailsleft -= 1
elif card["revisioncardimage"] == []:
#print("hi")
self.sendtextcard(user,card)
print("Card sent.")
trafficlightemailsleft -= 1
elif "revisioncardimage" not in card:
self.sendtextcard(user,card)
print("Card sent.")
trafficlightemailsleft -= 1
#elif
#print(revisioncards)
#print(weights)
#if len(revisioncards) < 3:
try:
# Makes sure that no duplicates are sent. Whilst also picking each card randomly with red
duplicates = True
while duplicates == True:
trafficlightemails = random.choices(revisioncards, weights=weights, k=trafficlightemailsleft)
#print(len(trafficlightemails))
if trafficlightemails != []:
original = list(map(lambda x:x["revisioncard"],trafficlightemails))
duplicateset = set(original)
#print(len(original),len(duplicateset))
#print(original,duplicateset)
if len(duplicateset) < len(original):
trafficlightemails = random.choices(revisioncards, weights=weights, k=trafficlightemailsleft)
trafficlightemailsleft -= 1
#duplicates = False
if len(duplicateset) == len(original):
duplicates = False
elif trafficlightemails == []:
duplicates = False
#print(trafficlightemailsleft)
for card in trafficlightemails:
#user["revisionscheduleinterval"]
print("Sending traffic light revision card...")
#time.sleep(10)
##192.168.0.180
if "revisioncardimage" in card:
#print([{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}])
imagecardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}
RaspEmail.send(receiver_email = imagecardjson["email"],subject = imagecardjson["subject"],htmlmessage = imagecardjson["message"],attachment = imagecardjson["attachment"])
#response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"],"attachment":[{card["revisioncardimgname"][0]:card["revisioncardimage"][0]}]}})
#sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
print("Traffic light card sent.")
elif "revisioncardimage" not in card:
#response = requests.post("https://revisionbank-email.onrender.com/raspsendemail",json={"raspsendemail":{"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}})
textcardjson = {"email":user["sendtoemail"],"message":f"{card['revisioncardtitle']}\n{card['revisioncard']}","subject":card["subject"]}
RaspEmail.send(receiver_email = textcardjson["email"],subject = textcardjson["subject"],htmlmessage = textcardjson["message"],attachment = textcardjson["attachment"])
#sendgrid_send(user["sendtoemail"],f"{card['revisioncardtitle']}\n{card['revisioncard']}",card["subject"])
print("Traffic light card sent.")
except IndexError as ex:
#print(type(ex),ex)
continue