Private
Public Access
1
0

demo version new strava import

This commit is contained in:
Sander Roosendaal
2021-08-24 18:11:48 +02:00
parent 4b4cb20f87
commit b0ce799a88
4 changed files with 45 additions and 8 deletions

View File

@@ -307,9 +307,10 @@ class Command(BaseCommand):
message.delete() message.delete()
# Strava # Strava
#rowers = Rower.objects.filter(strava_auto_import=True) rowers = Rower.objects.filter(strava_auto_import=True)
#for r in rowers: for r in rowers:
# stravastuff.get_strava_workouts(r) if user_is_not_basic(r.user):
stravastuff.get_strava_workouts(r)
self.stdout.write(self.style.SUCCESS( self.stdout.write(self.style.SUCCESS(
'Successfully processed email attachments')) 'Successfully processed email attachments'))

View File

@@ -18,6 +18,10 @@
</li> </li>
<li class="grid_4"> <li class="grid_4">
<form enctype="multipart/form-data" method="post">
{% csrf_token %}
<input name='workouts' type="submit" value="Import selected workouts">
<a href="/rowers/workouts/stravaimport/?selectallnew=true">Select All New</a>
<table width="70%" class="listtable"> <table width="70%" class="listtable">
<thead> <thead>
<tr> <tr>
@@ -34,7 +38,8 @@
{% for workout in workouts %} {% for workout in workouts %}
<tr> <tr>
<td> <td>
<a href="/rowers/workout/stravaimport/{{ workout|lookup:'id' }}/async/">Import</a></td> <input type="checkbox" value={{ workout|lookup:'id' }} name="workoutid">
</td>
<td>{{ workout|lookup:'name' }}</td> <td>{{ workout|lookup:'name' }}</td>
<td>{{ workout|lookup:'starttime' }}</td> <td>{{ workout|lookup:'starttime' }}</td>
<td>{{ workout|lookup:'duration' }} </td> <td>{{ workout|lookup:'duration' }} </td>
@@ -46,6 +51,7 @@
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</form>
</li> </li>
</ul> </ul>
{% else %} {% else %}

View File

@@ -5,6 +5,7 @@ from __future__ import unicode_literals
from rowers.views.statements import * from rowers.views.statements import *
from rowers.plannedsessions import get_dates_timeperiod from rowers.plannedsessions import get_dates_timeperiod
from rowers.tasks import fetch_strava_workout
import numpy 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_coach',fn=get_user_by_userid,raise_exception=True)
@permission_required('rower.is_not_freecoach',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): def workout_stravaimport_view(request,message="",userid=0):
r = getrequestrower(request,userid=userid) r = getrequestrower(request,userid=userid)
if r.user != request.user: if r.user != request.user:
messages.error(request,'You can only access your own workouts on the NK Logbook, not those of your athletes') 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) res = stravastuff.get_strava_workout_list(request.user)
if (res.status_code != 200): # pragma: no cover if (res.status_code != 200): # pragma: no cover
if (res.status_code == 401): if (res.status_code == 401):
r = getrower(request.user) r = getrower(request.user)
@@ -952,6 +955,7 @@ def workout_stravaimport_view(request,message="",userid=0):
else: else:
workouts = [] workouts = []
r = getrower(request.user) r = getrower(request.user)
rower = r
stravaids = [int(item['id']) for item in res.json()] stravaids = [int(item['id']) for item in res.json()]
stravadata = [{ stravadata = [{
'id':int(item['id']), 'id':int(item['id']),
@@ -995,8 +999,31 @@ def workout_stravaimport_view(request,message="",userid=0):
r = item['type'] r = item['type']
keys = ['id','distance','duration','starttime','type','name','new'] keys = ['id','distance','duration','starttime','type','name','new']
values = [i,d,ttot,s,r,n,nnn] values = [i,d,ttot,s,r,n,nnn]
res = dict(zip(keys,values)) res2 = dict(zip(keys,values))
workouts.append(res) 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
)
messages.info(request,'Strava workout nr {stravaid} will be imported in the background'.format(stravaid=stravaid))
except KeyError:
pass
breadcrumbs = [ breadcrumbs = [
{ {
@@ -1014,7 +1041,7 @@ def workout_stravaimport_view(request,message="",userid=0):
return render(request,'strava_list_import.html', return render(request,'strava_list_import.html',
{'workouts':workouts, {'workouts':workouts,
'rower':r, 'rower':rower,
'active':'nav-workouts', 'active':'nav-workouts',
'breadcrumbs':breadcrumbs, 'breadcrumbs':breadcrumbs,
'teams':get_my_teams(request.user), 'teams':get_my_teams(request.user),

View File

@@ -3502,7 +3502,10 @@ def workout_stats_view(request,id=0,message="",successmessage=""):
hrdrift = ((pwr1/hr1)-(pwr2/hr2))/(pwr1/hr1) hrdrift = ((pwr1/hr1)-(pwr2/hr2))/(pwr1/hr1)
hrdrift *= 100. hrdrift *= 100.
if not np.isnan(hrdrift): if not np.isnan(hrdrift):
hrdrift = int(100*hrdrift)/100. try:
hrdrift = int(100*hrdrift)/100.
except:
hrdrift = 0
otherstats['hrdrift'] = { otherstats['hrdrift'] = {
'verbose_name': 'Heart Rate Drift', 'verbose_name': 'Heart Rate Drift',
'value': hrdrift, 'value': hrdrift,