diff --git a/rowers/tasks.py b/rowers/tasks.py index bbb3c88f..e1b87ae9 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -30,7 +30,7 @@ from rowers.dataprepnodjango import ( ) from django.core.mail import send_mail, EmailMessage - +from django.db.utils import OperationalError import datautils import utils @@ -376,9 +376,13 @@ def handle_otwsetpower(f1, boattype, weightvalue, res, btvalues, res2 = utils.isbreakthrough( delta, cpvalues, ps[0], ps[1], ps[2], ps[3], ratio) if res: - handle_sendemail_breakthrough(workoutid, email, - first_name, - last_name, btvalues=btvalues.to_json()) + try: + handle_sendemail_breakthrough( + workoutid, email, + first_name, + last_name, btvalues=btvalues.to_json()) + except OperationalError: + pass # send 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 += "Best Regards, The Rowsandall Physics Department." - send_mail(subject, message, - 'Rowsandall Physics Department ', - [fullemail]) + try: + send_mail(subject, message, + 'Rowsandall Physics Department ', + [fullemail]) + except OperationalError: + return 0 return 1 diff --git a/rowers/utils.py b/rowers/utils.py index 71f23547..f4081639 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -2,6 +2,8 @@ import math import numpy as np import pandas as pd import colorsys +from django.conf import settings + lbstoN = 4.44822 @@ -100,7 +102,7 @@ def range_to_color_hex(groupcols,palette='monochrome_blue'): try: plt = palettes[palette] - except KeyErro: + except KeyError: plt = palettes['monochrome_blue'] 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 + + +def myqueue(queue,function,*args,**kwargs): + if settings.DEBUG: + job = function.delay(*args,**kwargs) + else: + job = queue.enqueue(function,*args,**kwargs) + + return job diff --git a/rowers/views.py b/rowers/views.py index 4cd08a09..72ae1af9 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -188,7 +188,7 @@ def remove_asynctask(request,id): request.session['async_tasks'] = newtasks def get_job_result(jobid): - if settings.DEBUG: + if settings.EBUG: result = celery_result.AsyncResult(jobid).result else: running_job_ids = rq_registry.get_job_ids() @@ -476,7 +476,7 @@ def splitstdata(lijst): from utils import ( geo_distance,serialize_list,deserialize_list,uniqify, - str2bool,range_to_color_hex,absolute + str2bool,range_to_color_hex,absolute,myqueue ) import datautils @@ -1298,25 +1298,21 @@ def workout_tcxemail_view(request,id=0): except Workout.DoesNotExist: raise Http404("Workout doesn't exist") if (checkworkoutuser(request.user,w)): - try: - tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False) - if tcxfile == 0: - message = "Something went wrong (TCX export) "+tcxmessg - messages.error(request,message) - url = reverse(workout_export_view, - kwargs = { - 'id':str(w.id), - }) - return HttpResponseRedirect(url) - if settings.DEBUG and tcxfile: - res = handle_sendemailtcx.delay(r.user.first_name, - r.user.last_name, - r.user.email,tcxfile) - - elif tcxfile: - res = queuehigh.enqueue(handle_sendemailtcx,r.user.first_name, - r.user.last_name, - r.user.email,tcxfile) + tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w,dozip=False) + if tcxfile == 0: + message = "Something went wrong (TCX export) "+tcxmessg + messages.error(request,message) + url = reverse(workout_export_view, + kwargs = { + 'id':str(w.id), + }) + return HttpResponseRedirect(url) + if tcxfile: + res = myqueue(queuehigh,handle_sendemailtcx, + r.user.first_name, + r.user.last_name, + r.user.email, + tcxfile) successmessage = "The TCX file was sent to you per email" messages.info(request,successmessage) @@ -1324,19 +1320,6 @@ def workout_tcxemail_view(request,id=0): kwargs = { '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) @@ -1366,15 +1349,11 @@ def workout_gpxemail_view(request,id=0): row = rdata(filename) gpxfilename = filename[:-4]+'.gpx' row.exporttogpx(gpxfilename) - if settings.DEBUG: - res = handle_sendemailtcx.delay(r.user.first_name, - r.user.last_name, - r.user.email,gpxfilename) - - else: - res = queuehigh.enqueue(handle_sendemailtcx,r.user.first_name, - r.user.last_name, - r.user.email,gpxfilename) + res = myqueue(queuehigh,handle_sendemailtcx, + r.user.first_name, + r.user.last_name, + r.user.email,gpxfilename) + successmessage = "The GPX file was sent to you per email" messages.info(request,successmessage) @@ -1407,15 +1386,9 @@ def workout_csvemail_view(request,id=0): raise Http404("Workout doesn't exist") if (checkworkoutuser(request.user,w)): csvfile = w.csvfilename - if settings.DEBUG: - res = handle_sendemailcsv.delay(r.user.first_name, - r.user.last_name, - r.user.email,csvfile) - - else: - res = queuehigh.enqueue(handle_sendemailcsv,r.user.first_name, - r.user.last_name, - r.user.email,csvfile) + res = myqueue(queuehigh,handle_sendemailcsv,r.user.first_name, + r.user.last_name, + r.user.email,csvfile) successmessage = "The CSV file was sent to you per email" messages.info(request,successmessage) @@ -1447,19 +1420,12 @@ def workout_csvtoadmin_view(request,id=0): raise Http404("Workout doesn't exist") csvfile = w.csvfilename - if settings.DEBUG: - res = handle_sendemailcsv.delay( - 'Sander', - 'Roosendaal', - 'roosendaalsander@gmail.com',csvfile) - - else: - res = queuehigh.enqueue( - handle_sendemailcsv, - 'Sander', - 'Roosendaal', - 'roosendaalsander@gmail.com', - csvfile) + res = myqueue(queuehigh, + handle_sendemailcsv, + 'Sander', + 'Roosendaal', + 'roosendaalsander@gmail.com', + csvfile) successmessage = "The CSV file was sent to the site admin per email" messages.info(request,successmessage) @@ -2579,11 +2545,7 @@ def workout_forcecurve_view(request,id=0,workstrokesonly=False): @login_required() def workout_test_task_view(request,id=0): row = Workout.objects.get(id=id) - if settings.DEBUG: - 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) + res = myqueue(queuehigh,addcomment2,request.user.id,row.id) url = reverse(workout_edit_view, @@ -5662,19 +5624,13 @@ def workout_otwsetpower_view(request,id=0,message="",successmessage=""): first_name = u.first_name last_name = u.last_name emailaddress = u.email - - if settings.DEBUG: - job = handle_otwsetpower.delay(f1,boattype,weightvalue, - first_name,last_name, - emailaddress,id,debug=True, - ps=[r.p0,r.p1,r.p2,r.p3], - 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) + + job = myqueue(queuelow, + handle_otwsetpower,f1,boattype, + weightvalue, + first_name,last_name,emailaddress,id, + ps=[r.p0,r.p1,r.p2,r.p3], + ratio=r.cpratio) try: request.session['async_tasks'] += [(job.id,'otwsetpower')] @@ -6963,49 +6919,30 @@ def workout_comment_view(request,id=0): ) if request.user != r.user: 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) - - elif request.user != r.user: - res = queuehigh.enqueue(handle_sendemailnewcomment,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, + handle_sendemailnewcomment,r.user.first_name, + r.user.last_name, + r.user.email, + request.user.first_name, + request.user.last_name, + comment,w.name,w.id) commenters = {oc.user for oc in comments if oc.notification} for u in commenters: a_messages.info(u,message) - if settings.DEBUG and u != request.user and u != r.user: - res = handle_sendemailnewresponse.delay(u.first_name, - u.last_name, - u.email, - request.user.first_name, - request.user.last_name, - comment, - w.name, - w.id, - c.id) - elif u != request.user and u != r.user: - res = queuelow.enqueue(handle_sendemailnewresponse, - u.first_name, - u.last_name, - u.email, - request.user.first_name, - request.user.last_name, - comment, - w.name, - w.id, - c.id) + if u != request.user and u != r.user: + res = myqueue(queuelow, + handle_sendemailnewresponse, + 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 = { 'id':id}) @@ -9654,10 +9591,7 @@ def rower_calcdps_view(request): r = getrower(request.user) ws = [(w.id,w.csvfilename) for w in Workout.objects.filter(user=r)] - if settings.DEBUG: - res = handle_updatedps.delay(r.user.email,ws,debug=True) - else: - queue.enqueue(handle_updatedps,r.user.email,ws,debug=False) + res = myqueue(queue,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.")