c2 import list
This commit is contained in:
@@ -141,13 +141,13 @@ def c2_open(user):
|
||||
|
||||
return thetoken
|
||||
|
||||
def get_c2_workouts(rower,do_async=True):
|
||||
def get_c2_workouts(rower,page=1,do_async=True):
|
||||
try:
|
||||
thetoken = c2_open(rower.user)
|
||||
except NoTokenError: # pragma: no cover
|
||||
return 0
|
||||
|
||||
res = get_c2_workout_list(rower.user,page=1)
|
||||
res = get_c2_workout_list(rower.user,page=page)
|
||||
|
||||
if (res.status_code != 200): # pragma: no cover
|
||||
return 0
|
||||
@@ -634,7 +634,7 @@ def createc2workoutdata(w):
|
||||
try:
|
||||
spmav = int(row.df[' Cadence (stokes/min)'][mask].mean())
|
||||
hrav = int(row.df[' HRCur (bpm)'][mask].mean())
|
||||
except ValuError:
|
||||
except ValueError:
|
||||
smpav = 0
|
||||
try:
|
||||
hrav = int(row.df[' HRCur (bpm)'][mask].mean())
|
||||
|
||||
@@ -30,6 +30,10 @@
|
||||
</p>
|
||||
</li>
|
||||
<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/workout/c2list/?selectallnew=true">Select All New</a>
|
||||
<table width="70%" class="listtable">
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -47,7 +51,12 @@
|
||||
{% for workout in workouts %}
|
||||
<tr>
|
||||
<td>
|
||||
<a href="/rowers/workout/c2import/{{ workout|lookup:'id' }}/async/">Import</a></td>
|
||||
{% if workout|lookup:'new' == 'NEW' and checknew == 'true' %}
|
||||
<input checked type="checkbox" value={{ workout|lookup:'id' }} name="workoutid">
|
||||
{% else %}
|
||||
<input type="checkbox" value={{ workout|lookup:'id' }} name="workoutid">
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ workout|lookup:'starttime' }}</td>
|
||||
<td>{{ workout|lookup:'duration' }}</td>
|
||||
<td>{{ workout|lookup:'distance' }}</td>
|
||||
@@ -62,6 +71,7 @@
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
</li>
|
||||
{% else %}
|
||||
<p> No workouts found </p>
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Normal file
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Normal file
Binary file not shown.
@@ -1499,7 +1499,7 @@ def workout_getc2workout_all(request,page=1,message=""): # pragma: no cover
|
||||
|
||||
r = getrequestrower(request)
|
||||
|
||||
result = c2stuff.get_c2_workouts(r,do_async=True)
|
||||
result = c2stuff.get_c2_workouts(r,page=page,do_async=True)
|
||||
|
||||
if result:
|
||||
messages.info(request,'Your C2 workouts will be imported in the coming few minutes')
|
||||
@@ -1534,8 +1534,8 @@ def workout_getrp3workout_all(request): # pragma: no cover
|
||||
@permission_required('rower.is_not_freecoach',fn=get_user_by_userid, raise_exception=True)
|
||||
def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
|
||||
r = getrequestrower(request,userid=userid)
|
||||
if r.user != request.user:
|
||||
rower = getrequestrower(request,userid=userid)
|
||||
if rower.user != request.user:
|
||||
messages.error(request,'You can only access your own workouts on the NK Logbook, not those of your athletes')
|
||||
url = reverse('workout_c2import_view',kwargs={'userid':request.user.id})
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -1556,17 +1556,17 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
workouts = []
|
||||
c2ids = [item['id'] for item in res.json()['data']]
|
||||
knownc2ids = uniqify([
|
||||
w.uploadedtoc2 for w in Workout.objects.filter(user=r)
|
||||
w.uploadedtoc2 for w in Workout.objects.filter(user=rower)
|
||||
])
|
||||
tombstones = [
|
||||
t.uploadedtoc2 for t in TombStone.objects.filter(user=r)
|
||||
t.uploadedtoc2 for t in TombStone.objects.filter(user=rower)
|
||||
]
|
||||
parkedids = []
|
||||
try:
|
||||
with open('c2blocked.json','r') as c2blocked:
|
||||
jsondata = json.load(c2blocked)
|
||||
parkedids = jsondata['ids']
|
||||
except FileNotFoundError: # pragma: no cover
|
||||
except (FileNotFoundError,JSONDecodeError): # pragma: no cover
|
||||
pass
|
||||
|
||||
knownc2ids = uniqify(knownc2ids+tombstones+parkedids)
|
||||
@@ -1586,8 +1586,38 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
nnn = 'NEW'
|
||||
keys = ['id','distance','duration','starttime','rowtype','source','comment','new']
|
||||
values = [i,d,ttot,s,r,s2,c,nnn]
|
||||
res = dict(zip(keys,values))
|
||||
workouts.append(res)
|
||||
ress = dict(zip(keys,values))
|
||||
workouts.append(ress)
|
||||
|
||||
if request.method == "POST":
|
||||
try: # pragma: no cover
|
||||
tdict = dict(request.POST.lists())
|
||||
ids = tdict['workoutid']
|
||||
c2ids = [int(id) for id in ids]
|
||||
alldata = {}
|
||||
|
||||
for item in res.json()['data']:
|
||||
alldata[item['id']] = item
|
||||
counter = 0
|
||||
for c2id in c2ids:
|
||||
csvfilename = 'media/{code}_{c2id}.csv'.format(code=uuid4().hex[:16],c2id=c2id)
|
||||
result = myqueue(
|
||||
queue,
|
||||
handle_c2_async_workout,
|
||||
alldata,
|
||||
rower.user.id,
|
||||
rower.c2token,
|
||||
c2id,
|
||||
counter,
|
||||
rower.defaulttimezone
|
||||
)
|
||||
counter = counter+1
|
||||
# done, redirect to workouts list
|
||||
messages.info(request,'Your Concept2 workouts will be imported in the background. It may take a few minutes before it appears.'.format(c2id=c2id))
|
||||
url = reverse('workouts_view')
|
||||
return HttpResponseRedirect(url)
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
||||
breadcrumbs = [
|
||||
@@ -1605,16 +1635,19 @@ def workout_c2import_view(request,page=1,userid=0,message=""):
|
||||
}
|
||||
]
|
||||
|
||||
r = getrower(request.user)
|
||||
rower = getrower(request.user)
|
||||
|
||||
checknew = request.GET.get('selectallnew',False)
|
||||
|
||||
return render(request,
|
||||
'c2_list_import2.html',
|
||||
{'workouts':workouts,
|
||||
'rower':r,
|
||||
'rower':rower,
|
||||
'active':'nav-workouts',
|
||||
'breadcrumbs':breadcrumbs,
|
||||
'teams':get_my_teams(request.user),
|
||||
'page':page,
|
||||
'checknew':checknew,
|
||||
})
|
||||
|
||||
importlistviews = {
|
||||
|
||||
@@ -220,6 +220,7 @@ from rowers.tasks import (
|
||||
handle_sendemail_racesubmission,
|
||||
handle_sendemail_optout,
|
||||
handle_sendemail_ical,
|
||||
handle_c2_async_workout,
|
||||
)
|
||||
|
||||
from scipy.signal import savgol_filter
|
||||
|
||||
Reference in New Issue
Block a user