diff --git a/rowers/dataprep.py b/rowers/dataprep.py index b7efd793..9388c84f 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -527,6 +527,7 @@ def fetchcp(rower,theworkouts,table='cpdata'): theids = [int(w.id) for w in theworkouts] columns = ['power','workoutid','time'] df = getsmallrowdata_db(columns,ids=theids) + df.dropna(inplace=True,axis=0) if df.empty: avgpower2 = {} for id in theids: diff --git a/rowers/forms.py b/rowers/forms.py index f2f40d1f..f4cfb3aa 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -164,6 +164,11 @@ nextpages = list(landingpages) nextpages.append(('workout_upload_view','Upload Another File')) nextpages = tuple(nextpages) +class LandingPageForm(forms.Form): + landingpage = forms.ChoiceField(choices=nextpages, + initial='workout_edit_view', + label='After Upload, go to') + class UploadOptionsForm(forms.Form): plotchoices = ( ('timeplot','Time Plot'), diff --git a/rowers/tasks.py b/rowers/tasks.py index a1b9bfd5..98408a54 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -16,7 +16,9 @@ from matplotlib.backends.backend_agg import FigureCanvas #from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas import matplotlib.pyplot as plt - +from rowsandall_app.settings import SITE_URL +from rowsandall_app.settings_dev import SITE_URL as SITE_URL_DEV +from rowsandall_app.settings import PROGRESS_CACHE_SECRET import pandas as pd @@ -296,11 +298,17 @@ def handle_sendemailtcx(first_name, last_name, email, tcxfile,debug=False): @app.task def handle_zip_file(emailfrom, subject, file,debug=False): message = "... zip processing ... " + if debug: + print message email = EmailMessage(subject, message, emailfrom, ['workouts@rowsandall.com']) email.attach_file(file) + if debug: + print "attaching" res = email.send() + if debug: + print "sent" time.sleep(60) return 1 @@ -338,12 +346,36 @@ def handle_sendemailcsv(first_name, last_name, email, csvfile,debug=False): # Calculate wind and stream corrections for OTW rowing -@app.task -def handle_otwsetpower(f1, boattype, weightvalue, - first_name, last_name, email, workoutid, ps=[ - 1, 1, 1, 1], - ratio=1.0, - debug=False): +@app.task(bind=True) +def handle_otwsetpower(self,f1, boattype, weightvalue, + first_name, last_name, email, workoutid, + **kwargs): +# ps=[ +# 1, 1, 1, 1], +# ratio=1.0, +# debug=False): + job = self.request + job_id = job.id + + if 'jobkey' in kwargs: + job_id = kwargs.pop('jobkey') + if 'ps' in kwargs: + ps = kwargs['ps'] + else: + ps = [1,1,1,1] + + if 'ratio' in kwargs: + ratio = kwargs['ratio'] + else: + ratio = 1.0 + if 'debug' in kwargs: + debug = kwargs['debug'] + else: + debug = False + + kwargs['jobid'] = job_id + + try: rowdata = rdata(f1) except IOError: @@ -377,8 +409,19 @@ def handle_otwsetpower(f1, boattype, weightvalue, except KeyError: pass + progressurl = SITE_URL + if debug: + progressurl = SITE_URL_DEV + secret = PROGRESS_CACHE_SECRET + + progressurl += "/rowers/record-progress/" + progressurl += job_id + rowdata.otw_setpower_silent(skiprows=5, mc=weightvalue, rg=rg, - powermeasured=powermeasured) + powermeasured=powermeasured, + progressurl=progressurl, + secret=secret + ) # save data rowdata.write_csv(f1, gzip=True) diff --git a/rowers/templates/async_tasks.html b/rowers/templates/async_tasks.html index dedf883d..9dbfeebc 100644 --- a/rowers/templates/async_tasks.html +++ b/rowers/templates/async_tasks.html @@ -51,6 +51,11 @@ {% endblock %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + + {% block content %} diff --git a/rowers/templates/list_graphs.html b/rowers/templates/list_graphs.html index dc05fc5e..70339c9e 100644 --- a/rowers/templates/list_graphs.html +++ b/rowers/templates/list_graphs.html @@ -4,6 +4,10 @@ {% block title %}Rowsandall Recent Graphs{% endblock %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + {% block content %}

Recent Graphs

diff --git a/rowers/templates/monitorjobs.html b/rowers/templates/monitorjobs.html new file mode 100644 index 00000000..6cebfa20 --- /dev/null +++ b/rowers/templates/monitorjobs.html @@ -0,0 +1,30 @@ + + + diff --git a/rowers/templates/otwrankings.html b/rowers/templates/otwrankings.html index 35c6069d..84d78408 100644 --- a/rowers/templates/otwrankings.html +++ b/rowers/templates/otwrankings.html @@ -2,6 +2,10 @@ {% load staticfiles %} {% load rowerfilters %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + {% block title %}Workouts{% endblock %} {% block content %} diff --git a/rowers/templates/panel_ranking.html b/rowers/templates/panel_ranking.html new file mode 100644 index 00000000..584ea695 --- /dev/null +++ b/rowers/templates/panel_ranking.html @@ -0,0 +1,6 @@ +
+

+ + Make Ranking Piece +

+
diff --git a/rowers/templates/rankings.html b/rowers/templates/rankings.html index dc3ac9a6..e5625f95 100644 --- a/rowers/templates/rankings.html +++ b/rowers/templates/rankings.html @@ -3,6 +3,9 @@ {% load rowerfilters %} {% block title %}Workouts{% endblock %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} {% block content %} diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 2d49567a..93e1d89a 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -79,6 +79,10 @@ Four intervals of 6, 5, 3 and 3 minutes length, 3 minutes rest +8x500m/3:30min +8 times 500m with 3 minutes 30 seconds rest + + 4x(500m+500m)/5min4 times 1km, but each km is reported as two 500m intervals without rest diff --git a/rowers/templates/workflow.html b/rowers/templates/workflow.html index 87bae1e9..af5e31ed 100644 --- a/rowers/templates/workflow.html +++ b/rowers/templates/workflow.html @@ -23,6 +23,11 @@ {% endfor %} {% endblock %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + + {% block content %}
diff --git a/rowers/templates/workout_comments.html b/rowers/templates/workout_comments.html index d806ef63..c8e82ed1 100644 --- a/rowers/templates/workout_comments.html +++ b/rowers/templates/workout_comments.html @@ -3,6 +3,10 @@ {% load rowerfilters %} {% load tz %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} + {% block title %}Change Workout {% endblock %} {% block content %} diff --git a/rowers/templates/workout_form.html b/rowers/templates/workout_form.html index 3aa03f88..d4e2985b 100644 --- a/rowers/templates/workout_form.html +++ b/rowers/templates/workout_form.html @@ -13,6 +13,13 @@ {% block og_description %}{{ workout.name }} {{ workout.date }} - {{ workout.distance }}m - {{ workout.duration |durationprint:"%H:%M:%S.%f" }}{% endblock %} +{% block scripts %} +{% include "monitorjobs.html" %} + +{% endblock %} + {% block content %}
@@ -89,8 +96,9 @@
-
-
+
+ {{ form.as_table }}
diff --git a/rowers/templates/workout_view.html b/rowers/templates/workout_view.html index 00b070f5..cba3ccce 100644 --- a/rowers/templates/workout_view.html +++ b/rowers/templates/workout_view.html @@ -1,6 +1,9 @@ {% extends "base.html" %} {% load staticfiles %} {% load rowerfilters %} +{% block scripts %} +{% include "monitorjobs.html" %} +{% endblock %} {% block title %}{{ workout.name }} {% endblock %} {% block og_title %}{{ workout.name }} {% endblock %} diff --git a/rowers/urls.py b/rowers/urls.py index d3261e27..30c35b43 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -144,6 +144,8 @@ urlpatterns = [ url(r'^test-job/(?P\d+)$',views.test_job_view), url(r'^test-job2/(?P\d+)$',views.test_job_view2), url(r'^record-progress/(?P\d+)/(?P.*)$',views.post_progress), + url(r'^record-progress/(?P.*)$',views.post_progress), + url(r'^record-progress$',views.post_progress), url(r'^list-graphs/$',views.graphs_view), url(r'^(?P\d+)/ote-bests/(?P\w+.*)/(?P\w+.*)$',views.rankings_view), url(r'^(?P\d+)/ote-bests/(?P\d+)$',views.rankings_view), diff --git a/rowers/utils.py b/rowers/utils.py index bdff6a62..84c70aba 100644 --- a/rowers/utils.py +++ b/rowers/utils.py @@ -45,6 +45,7 @@ workflowleftpanel = ( ('panel_editstream.html','Edit Stream Data'), ('panel_otwpower.html','Run OTW Power Calculations'), ('panel_mapview.html','Map'), + ('panel_ranking.html','Ranking View'), ) defaultleft = [ @@ -222,11 +223,17 @@ def isbreakthrough(delta,cpvalues,p0,p1,p2,p3,ratio): def myqueue(queue,function,*args,**kwargs): if settings.DEBUG: kwargs['debug'] = True + + print 'myqueue' + print args + print kwargs + job = function.delay(*args,**kwargs) else: job_id = str(uuid.uuid4()) kwargs['job_id'] = job_id kwargs['jobkey'] = job_id + job = queue.enqueue(function,*args,**kwargs) return job diff --git a/rowers/views.py b/rowers/views.py index 752b02bd..5c18377f 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -27,6 +27,7 @@ from rowers.forms import ( LoginForm,DocumentsForm,UploadOptionsForm, TeamUploadOptionsForm,WorkFlowLeftPanelForm,WorkFlowMiddlePanelForm, WorkFlowLeftPanelElement,WorkFlowMiddlePanelElement, + LandingPageForm, ) from django.core.urlresolvers import reverse from django.core.exceptions import PermissionDenied @@ -194,9 +195,9 @@ redis_connection = StrictRedis() r = Redis() # this doesn't yet work on production -if settings.DEBUG: - client = SessionTaskListener(r,['tasks']) - client.start() +#if settings.DEBUG: +# client = SessionTaskListener(r,['tasks']) +# client.start() rq_registry = StartedJobRegistry(queue.name,connection=redis_connection) @@ -367,19 +368,32 @@ def test_job_view2(request,aantal=100): @csrf_exempt def post_progress(request,id=None,value=0): if request.method == 'POST': - secret = request.POST['secret'] + try: + secret = request.POST['secret'] + except KeyError: + return HttpResponse('Access Denied',status=401) if secret == settings.PROGRESS_CACHE_SECRET: - if id: - cache.set(id,value,3600) - # test - result = cache.get(id) + if not id: + try: + id = request.POST['id'] + except KeyError: + return HttpResponse('Invalid request',400) + try: + value = request.POST['value'] + except KeyError: + pass - return HttpResponse('progress cached '+str(result),status=200) - else: - return HttpResponse('access denied',status=400) + cache.set(id,value,3600) + # test + result = cache.get(id) - else: - return HttpResponse('hi',status=200) + return HttpResponse('progress cached '+str(result), + status=201) + else: # secret not given + return HttpResponse('access denied',status=401) + + else: # request method is not POST + return HttpResponse('GET method not allowed',status=405) def get_all_queued_jobs(userid=0): r = StrictRedis() @@ -3239,7 +3253,10 @@ def workout_update_cp_view(request,id=0): dataprep.runcpupdate(r) - url = reverse(otwrankings_view) + if row.workouttype in ('water','coastal'): + url = reverse(otwrankings_view) + else: + url = reverse(oterankings_view) return HttpResponseRedirect(url) @@ -7571,6 +7588,7 @@ def workout_add_chart_view(request,id,plotnr=1): @login_required() def workout_stravaimport_view(request,message=""): res = stravastuff.get_strava_workout_list(request.user) + if (res.status_code != 200): if (res.status_code == 401): r = getrower(request.user) @@ -7609,7 +7627,7 @@ def workout_stravaimport_view(request,message=""): res = dict(zip(keys,values)) workouts.append(res) - + return render(request,'strava_list_import.html', {'workouts':workouts, 'teams':get_my_teams(request.user), @@ -8176,7 +8194,11 @@ def workout_upload_view(request, if 'uploadoptions' in request.session: uploadoptions = request.session['uploadoptions'] - uploadoptions['landingpage'] = r.defaultlandingpage + try: + defaultlandingpage = uploadoptions['landingpage'] + except KeyError: + uploadoptions['landingpage'] = r.defaultlandingpage + defaultlandingpage = r.defaultlandingpage else: request.session['uploadoptions'] = uploadoptions @@ -8208,6 +8230,7 @@ def workout_upload_view(request, landingpage = uploadoptions['landingpage'] except KeyError: landingpage = r.defaultlandingpage + uploadoptions['landingpage'] = landingpage try: upload_to_c2 = uploadoptions['upload_to_C2'] @@ -8276,7 +8299,7 @@ def workout_upload_view(request, 'upload_to_RunKeeper':upload_to_rk, 'upload_to_MapMyFitness':upload_to_ua, 'upload_to_TrainingPeaks':upload_to_tp, - 'landingpage':r.defaultlandingpage, + 'landingpage':landingpage, } @@ -9153,7 +9176,8 @@ def rower_favoritecharts_view(request): 'xparam':f.xparam, 'plottype':f.plottype, 'workouttype':f.workouttype, - 'reststrokes':f.reststrokes} + 'reststrokes':f.reststrokes, + 'notes':f.notes,} for f in favorites] FavoriteChartFormSet = formset_factory(FavoriteForm,formset=BaseFavoriteFormSet,extra=0) if aantal==0: diff --git a/templates/basebase.html b/templates/basebase.html index f3ca6ebb..ec85bb4f 100644 --- a/templates/basebase.html +++ b/templates/basebase.html @@ -9,32 +9,7 @@ - - - - - - + {% block scripts %} {% endblock %} {% analytical_head_top %}