Private
Public Access
1
0

a wrapper around the task queue

This commit is contained in:
Sander Roosendaal
2017-10-31 11:12:00 +01:00
parent 092d24d9b2
commit 8c31f5b778
3 changed files with 85 additions and 133 deletions

View File

@@ -30,7 +30,7 @@ from rowers.dataprepnodjango import (
) )
from django.core.mail import send_mail, EmailMessage from django.core.mail import send_mail, EmailMessage
from django.db.utils import OperationalError
import datautils import datautils
import utils import utils
@@ -376,9 +376,13 @@ def handle_otwsetpower(f1, boattype, weightvalue,
res, btvalues, res2 = utils.isbreakthrough( res, btvalues, res2 = utils.isbreakthrough(
delta, cpvalues, ps[0], ps[1], ps[2], ps[3], ratio) delta, cpvalues, ps[0], ps[1], ps[2], ps[3], ratio)
if res: if res:
handle_sendemail_breakthrough(workoutid, email, try:
first_name, handle_sendemail_breakthrough(
last_name, btvalues=btvalues.to_json()) workoutid, email,
first_name,
last_name, btvalues=btvalues.to_json())
except OperationalError:
pass
# send email # send email
fullemail = first_name + " " + last_name + " " + "<" + email + ">" fullemail = first_name + " " + last_name + " " + "<" + email + ">"
@@ -394,9 +398,12 @@ def handle_otwsetpower(f1, boattype, weightvalue,
message += "Please report any bugs/inconsistencies/unexpected results at rowsandall.slack.com or by reply to this email.\n\n" message += "Please report any bugs/inconsistencies/unexpected results at rowsandall.slack.com or by reply to this email.\n\n"
message += "Best Regards, The Rowsandall Physics Department." message += "Best Regards, The Rowsandall Physics Department."
send_mail(subject, message, try:
'Rowsandall Physics Department <info@rowsandall.com>', send_mail(subject, message,
[fullemail]) 'Rowsandall Physics Department <info@rowsandall.com>',
[fullemail])
except OperationalError:
return 0
return 1 return 1

View File

@@ -2,6 +2,8 @@ import math
import numpy as np import numpy as np
import pandas as pd import pandas as pd
import colorsys import colorsys
from django.conf import settings
lbstoN = 4.44822 lbstoN = 4.44822
@@ -100,7 +102,7 @@ def range_to_color_hex(groupcols,palette='monochrome_blue'):
try: try:
plt = palettes[palette] plt = palettes[palette]
except KeyErro: except KeyError:
plt = palettes['monochrome_blue'] plt = palettes['monochrome_blue']
rgb = [colorsys.hsv_to_rgb((plt[0]+plt[1]*x)/360., rgb = [colorsys.hsv_to_rgb((plt[0]+plt[1]*x)/360.,
@@ -214,3 +216,12 @@ def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio):
return res>1,btdf,res2>1 return res>1,btdf,res2>1
def myqueue(queue,function,*args,**kwargs):
if settings.DEBUG:
job = function.delay(*args,**kwargs)
else:
job = queue.enqueue(function,*args,**kwargs)
return job

View File

@@ -188,7 +188,7 @@ def remove_asynctask(request,id):
request.session['async_tasks'] = newtasks request.session['async_tasks'] = newtasks
def get_job_result(jobid): def get_job_result(jobid):
if settings.DEBUG: if settings.EBUG:
result = celery_result.AsyncResult(jobid).result result = celery_result.AsyncResult(jobid).result
else: else:
running_job_ids = rq_registry.get_job_ids() running_job_ids = rq_registry.get_job_ids()
@@ -476,7 +476,7 @@ def splitstdata(lijst):
from utils import ( from utils import (
geo_distance,serialize_list,deserialize_list,uniqify, geo_distance,serialize_list,deserialize_list,uniqify,
str2bool,range_to_color_hex,absolute str2bool,range_to_color_hex,absolute,myqueue
) )
import datautils import datautils
@@ -1298,25 +1298,21 @@ def workout_tcxemail_view(request,id=0):
except Workout.DoesNotExist: except Workout.DoesNotExist:
raise Http404("Workout doesn't exist") raise Http404("Workout doesn't exist")
if (checkworkoutuser(request.user,w)): if (checkworkoutuser(request.user,w)):
try: tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False)
tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False) if tcxfile == 0:
if tcxfile == 0: message = "Something went wrong (TCX export) "+tcxmessg
message = "Something went wrong (TCX export) "+tcxmessg messages.error(request,message)
messages.error(request,message) url = reverse(workout_export_view,
url = reverse(workout_export_view, kwargs = {
kwargs = { 'id':str(w.id),
'id':str(w.id), })
}) return HttpResponseRedirect(url)
return HttpResponseRedirect(url) if tcxfile:
if settings.DEBUG and tcxfile: res = myqueue(queuehigh,handle_sendemailtcx,
res = handle_sendemailtcx.delay(r.user.first_name, r.user.first_name,
r.user.last_name, r.user.last_name,
r.user.email,tcxfile) r.user.email,
tcxfile)
elif tcxfile:
res = queuehigh.enqueue(handle_sendemailtcx,r.user.first_name,
r.user.last_name,
r.user.email,tcxfile)
successmessage = "The TCX file was sent to you per email" successmessage = "The TCX file was sent to you per email"
messages.info(request,successmessage) messages.info(request,successmessage)
@@ -1324,19 +1320,6 @@ def workout_tcxemail_view(request,id=0):
kwargs = { kwargs = {
'id':str(w.id), 'id':str(w.id),
}) })
except:
successmessage = ""
message = "Something went wrong (TCX export) "+str(sys.exc_info()[0])
with open("media/c2errors.log","a") as errorlog:
errorstring = str(sys.exc_info()[0])
timestr = strftime("%Y%m%d-%H%M%S")
errorlog.write(timestr+errorstring+"\r\n")
messages.error(request,message)
url = reverse(workout_export_view,
kwargs = {
'id':str(w.id),
})
response = HttpResponseRedirect(url) response = HttpResponseRedirect(url)
@@ -1366,15 +1349,11 @@ def workout_gpxemail_view(request,id=0):
row = rdata(filename) row = rdata(filename)
gpxfilename = filename[:-4]+'.gpx' gpxfilename = filename[:-4]+'.gpx'
row.exporttogpx(gpxfilename) row.exporttogpx(gpxfilename)
if settings.DEBUG: res = myqueue(queuehigh,handle_sendemailtcx,
res = handle_sendemailtcx.delay(r.user.first_name, r.user.first_name,
r.user.last_name, r.user.last_name,
r.user.email,gpxfilename) r.user.email,gpxfilename)
else:
res = queuehigh.enqueue(handle_sendemailtcx,r.user.first_name,
r.user.last_name,
r.user.email,gpxfilename)
successmessage = "The GPX file was sent to you per email" successmessage = "The GPX file was sent to you per email"
messages.info(request,successmessage) messages.info(request,successmessage)
@@ -1407,15 +1386,9 @@ def workout_csvemail_view(request,id=0):
raise Http404("Workout doesn't exist") raise Http404("Workout doesn't exist")
if (checkworkoutuser(request.user,w)): if (checkworkoutuser(request.user,w)):
csvfile = w.csvfilename csvfile = w.csvfilename
if settings.DEBUG: res = myqueue(queuehigh,handle_sendemailcsv,r.user.first_name,
res = handle_sendemailcsv.delay(r.user.first_name, r.user.last_name,
r.user.last_name, r.user.email,csvfile)
r.user.email,csvfile)
else:
res = queuehigh.enqueue(handle_sendemailcsv,r.user.first_name,
r.user.last_name,
r.user.email,csvfile)
successmessage = "The CSV file was sent to you per email" successmessage = "The CSV file was sent to you per email"
messages.info(request,successmessage) messages.info(request,successmessage)
@@ -1447,19 +1420,12 @@ def workout_csvtoadmin_view(request,id=0):
raise Http404("Workout doesn't exist") raise Http404("Workout doesn't exist")
csvfile = w.csvfilename csvfile = w.csvfilename
if settings.DEBUG: res = myqueue(queuehigh,
res = handle_sendemailcsv.delay( handle_sendemailcsv,
'Sander', 'Sander',
'Roosendaal', 'Roosendaal',
'roosendaalsander@gmail.com',csvfile) 'roosendaalsander@gmail.com',
csvfile)
else:
res = queuehigh.enqueue(
handle_sendemailcsv,
'Sander',
'Roosendaal',
'roosendaalsander@gmail.com',
csvfile)
successmessage = "The CSV file was sent to the site admin per email" successmessage = "The CSV file was sent to the site admin per email"
messages.info(request,successmessage) messages.info(request,successmessage)
@@ -2579,11 +2545,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False):
@login_required() @login_required()
def workout_test_task_view(request,id=0): def workout_test_task_view(request,id=0):
row = Workout.objects.get(id=id) row = Workout.objects.get(id=id)
if settings.DEBUG: res = myqueue(queuehigh,addcomment2,request.user.id,row.id)
res = addcomment2.delay(request.user.id,row.id)
else:
#res = queuehigh.enqueue(addcomment2,request.user.id,row.id)
res = queuehigh.enqueue(addcomment2,request.user.id,row.id)
url = reverse(workout_edit_view, url = reverse(workout_edit_view,
@@ -5662,19 +5624,13 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
first_name = u.first_name first_name = u.first_name
last_name = u.last_name last_name = u.last_name
emailaddress = u.email emailaddress = u.email
if settings.DEBUG: job = myqueue(queuelow,
job = handle_otwsetpower.delay(f1,boattype,weightvalue, handle_otwsetpower,f1,boattype,
first_name,last_name, weightvalue,
emailaddress,id,debug=True, first_name,last_name,emailaddress,id,
ps=[r.p0,r.p1,r.p2,r.p3], ps=[r.p0,r.p1,r.p2,r.p3],
ratio=r.cpratio) ratio=r.cpratio)
else:
job = queuelow.enqueue(handle_otwsetpower,f1,boattype,
weightvalue,
first_name,last_name,emailaddress,id,
ps=[r.p0,r.p1,r.p2,r.p3],
ratio=r.cpratio)
try: try:
request.session['async_tasks'] += [(job.id,'otwsetpower')] request.session['async_tasks'] += [(job.id,'otwsetpower')]
@@ -6963,49 +6919,30 @@ def workout_comment_view(request,id=0):
) )
if request.user != r.user: if request.user != r.user:
a_messages.info(r.user,message) a_messages.info(r.user,message)
if settings.DEBUG and request.user != r.user:
res = handle_sendemailnewcomment.delay(r.user.first_name,
r.user.last_name,
r.user.email,
request.user.first_name,
request.user.last_name,
comment,w.name,
w.id)
res = myqueue(queuehigh,
elif request.user != r.user: handle_sendemailnewcomment,r.user.first_name,
res = queuehigh.enqueue(handle_sendemailnewcomment,r.user.first_name, r.user.last_name,
r.user.last_name, r.user.email,
r.user.email, request.user.first_name,
request.user.first_name, request.user.last_name,
request.user.last_name, comment,w.name,w.id)
comment,w.name,w.id)
commenters = {oc.user for oc in comments if oc.notification} commenters = {oc.user for oc in comments if oc.notification}
for u in commenters: for u in commenters:
a_messages.info(u,message) a_messages.info(u,message)
if settings.DEBUG and u != request.user and u != r.user: if u != request.user and u != r.user:
res = handle_sendemailnewresponse.delay(u.first_name, res = myqueue(queuelow,
u.last_name, handle_sendemailnewresponse,
u.email, u.first_name,
request.user.first_name, u.last_name,
request.user.last_name, u.email,
comment, request.user.first_name,
w.name, request.user.last_name,
w.id, comment,
c.id) w.name,
elif u != request.user and u != r.user: w.id,
res = queuelow.enqueue(handle_sendemailnewresponse, c.id)
u.first_name,
u.last_name,
u.email,
request.user.first_name,
request.user.last_name,
comment,
w.name,
w.id,
c.id)
url = reverse(workout_comment_view,kwargs = { url = reverse(workout_comment_view,kwargs = {
'id':id}) 'id':id})
@@ -9654,10 +9591,7 @@ def rower_calcdps_view(request):
r = getrower(request.user) r = getrower(request.user)
ws = [(w.id,w.csvfilename) for w in Workout.objects.filter(user=r)] ws = [(w.id,w.csvfilename) for w in Workout.objects.filter(user=r)]
if settings.DEBUG: res = myqueue(queue,handle_updatedps,r.user.email,ws,debug=False)
res = handle_updatedps.delay(r.user.email,ws,debug=True)
else:
queue.enqueue(handle_updatedps,r.user.email,ws,debug=False)
messages.info(request,"Your workouts are being updated in the background. You will receive email when this is done.") messages.info(request,"Your workouts are being updated in the background. You will receive email when this is done.")