diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py
index 4aa4b693..3250d4a1 100644
--- a/rowers/interactiveplots.py
+++ b/rowers/interactiveplots.py
@@ -2153,8 +2153,12 @@ def interactive_histoall(theworkouts,histoparam,includereststrokes,
# throw out nans
histopwr = histopwr[~np.isinf(histopwr)]
- histopwr = histopwr[histopwr > yaxminima[histoparam]]
- histopwr = histopwr[histopwr < yaxmaxima[histoparam]]
+ if histoparam == 'catch':
+ histopwr = histopwr[histopwr < yaxminima[histoparam]]
+ histopwr = histopwr[histopwr > yaxmaxima[histoparam]]
+ else:
+ histopwr = histopwr[histopwr > yaxminima[histoparam]]
+ histopwr = histopwr[histopwr < yaxmaxima[histoparam]]
plot = Figure(tools=TOOLS,plot_width=900,
toolbar_sticky=False,
diff --git a/rowers/management/commands/processemail.py b/rowers/management/commands/processemail.py
index db741824..1eb0c384 100644
--- a/rowers/management/commands/processemail.py
+++ b/rowers/management/commands/processemail.py
@@ -307,9 +307,10 @@ class Command(BaseCommand):
message.delete()
# Strava
- #rowers = Rower.objects.filter(strava_auto_import=True)
- #for r in rowers:
- # stravastuff.get_strava_workouts(r)
+ rowers = Rower.objects.filter(strava_auto_import=True)
+ for r in rowers:
+ if user_is_not_basic(r.user):
+ stravastuff.get_strava_workouts(r)
self.stdout.write(self.style.SUCCESS(
'Successfully processed email attachments'))
diff --git a/rowers/templates/strava_list_import.html b/rowers/templates/strava_list_import.html
index c2eac8d6..1fe1ea27 100644
--- a/rowers/templates/strava_list_import.html
+++ b/rowers/templates/strava_list_import.html
@@ -18,6 +18,10 @@
+
{% else %}
diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py
index d90ee247..2c133ac0 100644
--- a/rowers/views/importviews.py
+++ b/rowers/views/importviews.py
@@ -5,6 +5,7 @@ from __future__ import unicode_literals
from rowers.views.statements import *
from rowers.plannedsessions import get_dates_timeperiod
+from rowers.tasks import fetch_strava_workout
import numpy
@@ -923,6 +924,7 @@ def workout_rp3import_view(request,userid=0):
@permission_required('rower.is_coach',fn=get_user_by_userid,raise_exception=True)
@permission_required('rower.is_not_freecoach',fn=get_user_by_userid, raise_exception=True)
def workout_stravaimport_view(request,message="",userid=0):
+
r = getrequestrower(request,userid=userid)
if r.user != request.user:
messages.error(request,'You can only access your own workouts on the NK Logbook, not those of your athletes')
@@ -939,6 +941,7 @@ def workout_stravaimport_view(request,message="",userid=0):
res = stravastuff.get_strava_workout_list(request.user)
+
if (res.status_code != 200): # pragma: no cover
if (res.status_code == 401):
r = getrower(request.user)
@@ -952,6 +955,7 @@ def workout_stravaimport_view(request,message="",userid=0):
else:
workouts = []
r = getrower(request.user)
+ rower = r
stravaids = [int(item['id']) for item in res.json()]
stravadata = [{
'id':int(item['id']),
@@ -995,8 +999,34 @@ def workout_stravaimport_view(request,message="",userid=0):
r = item['type']
keys = ['id','distance','duration','starttime','type','name','new']
values = [i,d,ttot,s,r,n,nnn]
- res = dict(zip(keys,values))
- workouts.append(res)
+ res2 = dict(zip(keys,values))
+ workouts.append(res2)
+
+ if request.method == "POST":
+ try:
+ tdict = dict(request.POST.lists())
+ ids = tdict['workoutid']
+ stravaids = [int(id) for id in ids]
+ alldata = {}
+ for item in res.json():
+ alldata[item['id']] = item
+ for stravaid in stravaids:
+ csvfilename = 'media/{code}_{stravaid}.csv'.format(code=uuid4().hex[:16],stravaid=stravaid)
+ result = myqueue(
+ queue,
+ fetch_strava_workout,
+ rower.stravatoken,
+ stravastuff.oauth_data,
+ stravaid,
+ csvfilename,
+ rower.user.id
+ )
+ # done, redirect to workouts list
+ messages.info(request,'Your Strava workouts will be imported in the background. It may take a few minutes before it appears.'.format(stravaid=stravaid))
+ url = reverse('workouts_view')
+ return HttpResponseRedirect(url)
+ except KeyError:
+ pass
breadcrumbs = [
{
@@ -1009,15 +1039,15 @@ def workout_stravaimport_view(request,message="",userid=0):
},
]
-
- r = getrower(request.user)
+ checknew = request.GET.get('selectallnew',False)
return render(request,'strava_list_import.html',
{'workouts':workouts,
- 'rower':r,
+ 'rower':rower,
'active':'nav-workouts',
'breadcrumbs':breadcrumbs,
'teams':get_my_teams(request.user),
+ 'checknew':checknew,
})
return HttpResponse(res) # pragma: no cover
diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py
index d7eb241b..569fffec 100644
--- a/rowers/views/workoutviews.py
+++ b/rowers/views/workoutviews.py
@@ -3502,7 +3502,10 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
hrdrift = ((pwr1/hr1)-(pwr2/hr2))/(pwr1/hr1)
hrdrift *= 100.
if not np.isnan(hrdrift):
- hrdrift = int(100*hrdrift)/100.
+ try:
+ hrdrift = int(100*hrdrift)/100.
+ except:
+ hrdrift = 0
otherstats['hrdrift'] = {
'verbose_name': 'Heart Rate Drift',
'value': hrdrift,