make send_emails into a proper script and add a few more widgets

This commit is contained in:
Andrej Karpathy 2021-11-29 09:29:59 -08:00
parent 6d7f648384
commit e182dda381

View File

@ -11,6 +11,8 @@ to manually register with sendgrid yourself, get an API key and put it in the fi
import os import os
import time import time
import argparse
import numpy as np import numpy as np
from sklearn import svm from sklearn import svm
@ -161,15 +163,22 @@ def send_email(to, html):
mail = Mail(from_email, to_email, subject, content) mail = Mail(from_email, to_email, subject, content)
# hope for the best :) # hope for the best :)
response = sg.client.mail.send.post(request_body=mail.get()) if not args.dry_run:
print(response.status_code) response = sg.client.mail.send.post(request_body=mail.get())
print(response.status_code)
pass
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
if __name__ == "__main__": if __name__ == "__main__":
TIME_DELTA = 3 # how recent papers are we recommending? in days parser = argparse.ArgumentParser(description='Sends emails with recommendations')
NUM_RECCOMENDATIONS = 20 # how many papers to recommend? parser.add_argument('-n', '--num-recommendations', type=int, default=20, help='number of recommendations to send per person')
parser.add_argument('-t', '--time-delta', type=int, default=3, help='how recent papers to recommended, in days')
parser.add_argument('-d', '--dry-run', type=int, default=0, help='if set to 1 do not actually send the emails')
parser.add_argument('-u', '--user', type=str, default='', help='restrict recommendations only to a single given user (used for debugging)')
args = parser.parse_args()
print(args)
tnow = time.time() tnow = time.time()
tnow_str = time.strftime('%b %d', time.localtime(tnow)) # e.g. "Nov 27" tnow_str = time.strftime('%b %d', time.localtime(tnow)) # e.g. "Nov 27"
@ -200,17 +209,20 @@ if __name__ == "__main__":
if not email: if not email:
print("skipping user %s, no email" % (user, )) print("skipping user %s, no email" % (user, ))
continue continue
if args.user and user != args.user:
print("skipping user %s, not %s" % (user, args.user))
continue
# calculate the recommendations # calculate the recommendations
pids, scores = calculate_recommendation(tags, time_delta=TIME_DELTA) pids, scores = calculate_recommendation(tags, time_delta=args.time_delta)
print("user %s has %d recommendations over last %d days" % (user, len(pids), TIME_DELTA)) print("user %s has %d recommendations over last %d days" % (user, len(pids), args.time_delta))
if len(pids) == 0: if len(pids) == 0:
print("skipping the rest, no recommendations were produced") print("skipping the rest, no recommendations were produced")
continue continue
# render the html # render the html
print("rendering top %d recommendations into a report..." % (NUM_RECCOMENDATIONS, )) print("rendering top %d recommendations into a report..." % (args.num_recommendations, ))
html = render_recommendations(pids, scores, num_recommendations=NUM_RECCOMENDATIONS) html = render_recommendations(pids, scores, num_recommendations=args.num_recommendations)
# temporarily for debugging write recommendations to disk for manual inspection # temporarily for debugging write recommendations to disk for manual inspection
if os.path.isdir('recco'): if os.path.isdir('recco'):
with open('recco/%s.html' % (user, ), 'w') as f: with open('recco/%s.html' % (user, ), 'w') as f: