demo version new strava import
This commit is contained in:
@@ -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'))
|
||||||
|
|||||||
@@ -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 %}
|
||||||
|
|||||||
@@ -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),
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user