Private
Public Access
1
0

c2 import list

This commit is contained in:
Sander Roosendaal
2021-10-31 16:01:23 +01:00
parent 70e85d6665
commit a12fcfdd85
5 changed files with 58 additions and 14 deletions

View File

@@ -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())

View File

@@ -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

Binary file not shown.

View File

@@ -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 = {

View File

@@ -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