from celery import Celery,app import os import time import gc import gzip import shutil import rowingdata from rowingdata import main as rmain from rowingdata import rowingdata as rdata import rowingdata #from rowers.models import Workout from matplotlib.backends.backend_agg import FigureCanvas #from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas import matplotlib.pyplot as plt from matplotlib import figure import stravalib from rowers.dataprepnodjango import update_strokedata from django.core.mail import send_mail, BadHeaderError,EmailMessage @app.task def add(x, y): return x + y @app.task def handle_sendemail_unrecognized(unrecognizedfile,useremail): # send email with attachment fullemail = 'roosendaalsander@gmail.com' subject = "Unrecognized file from Rowsandall.com" message = "Dear Sander,\n\n" message += "Please find attached a file that someone tried to upload to rowsandall.com. The file was not recognized as a valid file type.\n\n" message += "User Email "+useremail+"\n\n" message += "Best Regards, the Rowsandall Team" email = EmailMessage(subject, message, 'Rowsandall ', [fullemail]) email.attach_file(unrecognizedfile) res = email.send() # remove tcx file os.remove(unrecognizedfile) return 1 @app.task def handle_sendemailtcx(first_name,last_name,email,tcxfile): # send email with attachment fullemail = first_name + " " + last_name + " " + "<" + email + ">" subject = "File from Rowsandall.com" message = "Dear "+first_name+",\n\n" message += "Please find attached the requested file for your workout.\n\n" message += "Best Regards, the Rowsandall Team" email = EmailMessage(subject, message, 'Rowsandall ', [fullemail]) email.attach_file(tcxfile) res = email.send() # remove tcx file os.remove(tcxfile) return 1 @app.task def handle_sendemailcsv(first_name,last_name,email,csvfile): # send email with attachment fullemail = first_name + " " + last_name + " " + "<" + email + ">" subject = "File from Rowsandall.com" message = "Dear "+first_name+",\n\n" message += "Please find attached the requested file for your workout.\n\n" message += "Best Regards, the Rowsandall Team" email = EmailMessage(subject, message, 'Rowsandall ', [fullemail]) if os.path.isfile(csvfile): email.attach_file(csvfile) else: csvfile2 = csvfile[:-3] with gzip.open(csvfile,'rb') as f_in, open(csvfile2,'wb') as f_out: shutil.copyfileobj(f_in, f_out) email.attach_file(csvfile2) os.remove(csvfile2) res = email.send() return 1 @app.task def handle_otwsetpower(f1,boattype,weightvalue, first_name,last_name,email,workoutid, debug=False): try: rowdata = rdata(f1) except IOError: rowdata = rdata(f1+'.csv') weightvalue = float(weightvalue) # do something with boat type boatfile = { '1x':'static/rigging/1x.txt', '2x':'static/rigging/2x.txt', '2-':'static/rigging/2-.txt', '4x':'static/rigging/4x.txt', '4-':'static/rigging/4-.txt', '8+':'static/rigging/8+.txt', } try: rg = rowingdata.getrigging(boatfile[boattype]) except KeyError: rg = rowingdata.getrigging('static/rigging/1x.txt') # do calculation powermeasured = False try: w = rowdata.df['wash'] powermeasured = True except KeyError: pass rowdata.otw_setpower_silent(skiprows=5,mc=weightvalue,rg=rg, powermeasured=powermeasured) # save data rowdata.write_csv(f1) update_strokedata(workoutid,rowdata.df,debug=debug) # send email fullemail = first_name + " " + last_name + " " + "<" + email + ">" subject = "Your Rowsandall OTW calculations are ready" message = "Dear "+first_name+",\n\n" message += "Your Rowsandall OTW calculations are ready.\n" # message += "You can now create OTW plots with power information and wind corrections.\n\n" message += "Thank you for using rowsandall.com.\n\n" message += "Rowsandall OTW calculations have not been fully implemented yet.\n" message += "We are now running an experimental version for debugging purposes. \n" message += "Your wind/stream corrected plot is available here: http://rowsandall.com/rowers/workout/" message += str(workoutid) message +="/interactiveotwplot\n\n" # message += "This functionality will be available soon, though.\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." send_mail(subject, message, 'Rowsandall Physics Department ', [fullemail]) return 1 @app.task def handle_makeplot(f1,f2,t,hrdata,plotnr,imagename): hrmax = hrdata['hrmax'] hrut2 = hrdata['hrut2'] hrut1 = hrdata['hrut1'] hrat = hrdata['hrat'] hrtr = hrdata['hrtr'] hran = hrdata['hran'] rr = rowingdata.rower(hrmax=hrmax,hrut2=hrut2, hrut1=hrut1,hrat=hrat, hrtr=hrtr,hran=hran) try: row = rdata(f2,rower=rr) except IOError: row = rdata(f2+'.gz',rower=rr) nr_rows = len(row.df) if (plotnr in [1,2,4,5,8,11,9,12]) and (nr_rows > 1200): bin = int(nr_rows/1200.) df = row.df.groupby(lambda x:x/bin).mean() row.df = df nr_rows = len(row.df) if (plotnr==1): fig1 = row.get_timeplot_erg(t) elif (plotnr==2): fig1 = row.get_metersplot_erg(t) elif (plotnr==3): fig1 = row.get_piechart(t) elif (plotnr==4): fig1 = row.get_timeplot_otw(t) elif (plotnr==5): fig1 = row.get_metersplot_otw(t) elif (plotnr==6): fig1 = row.get_piechart(t) elif (plotnr==7) or (plotnr==10): fig1 = row.get_metersplot_erg2(t) elif (plotnr==8) or (plotnr==11): fig1 = row.get_timeplot_erg2(t) elif (plotnr==9) or (plotnr==12): fig1 = row.get_time_otwpower(t) elif (plotnr==13) or (plotnr==16): fig1 = row.get_power_piechart(t) canvas = FigureCanvas(fig1) # plt.savefig('static/plots/'+imagename,format='png') canvas.print_figure('static/plots/'+imagename) # plt.imsave(fname='static/plots/'+imagename) plt.close(fig1) fig1.clf() gc.collect() return imagename def add2(x,y): return x+y