Private
Public Access
1
0

rp3, untested

This commit is contained in:
Sander Roosendaal
2023-02-14 20:57:42 +01:00
parent 4a70d7a3d0
commit 3c0fbc431d
9 changed files with 308 additions and 335 deletions

View File

@@ -725,11 +725,9 @@ def rower_process_rp3callback(request): # pragma: no cover
url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url)
res = rp3stuff.get_token(code)
rp3_integration = RP3Integration(request.user)
access_token, expires_in, refresh_token = rp3_integration.get_token(code)
access_token = res[0]
expires_in = res[1]
refresh_token = res[2]
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
r = getrower(request.user)
@@ -803,56 +801,39 @@ def rower_process_testcallback(request): # pragma: no cover
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
def workout_rp3import_view(request, userid=0):
r = getrequestrower(request, userid=userid)
rp3_integration = RP3Integration(request.user)
try:
_ = rp3stuff.rp3_open(request.user)
_ = rp3_integration.open()
except NoTokenError: # pragma: no cover
url = reverse('rower_rp3_authorize')
return HttpResponseRedirect(url)
res = rp3stuff.get_rp3_workout_list(request.user)
workouts = rp3_integration.get_workout_list()
datedict = {}
for workout in workouts:
datedict[workout['id']] = workout['starttime']
if (res.status_code != 200): # pragma: no cover
if (res.status_code == 401):
r = getrower(request.user)
if (r.stravatoken == '') or (r.stravatoken is None):
s = "Token doesn't exist. Need to authorize"
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
message = "Something went wrong in workout_rp3import_view"
messages.error(request, message)
url = reverse('workouts_view')
return HttpResponseRedirect(url)
workouts_list = pd.json_normalize(res.json()['data']['workouts'])
if request.method == "POST":
try: # pragma: no cover
tdict = dict(request.POST.lists())
ids = tdict['workoutid']
rp3ids = [int(id) for id in ids]
knownrp3ids = uniqify([
w.uploadedtorp3 for w in Workout.objects.filter(user=r)
])
workouts = []
for key, data in workouts_list.iterrows():
try:
i = data['id']
for rp3id in rp3ids:
rp3_integration.get_workout(rp3id,startdatetime=datedict[rp3id])
# done, redirect to workouts list
messages.info(
request,
'Your RP3 workouts will be imported in the background.'
' It may take a few minutes before they appear.')
url = reverse('workouts_view')
return HttpResponseRedirect(url)
except KeyError: # pragma: no cover
i = 0
if i in knownrp3ids: # pragma: no cover
nnn = ''
else:
nnn = 'NEW'
try:
s = data['executed_at']
except KeyError: # pragma: no cover
s = ''
keys = ['id', 'starttime', 'new']
values = [i, s, nnn]
res = dict(zip(keys, values))
workouts.append(res)
pass
breadcrumbs = [
{
'url': '/rowers/list-workouts/',
@@ -864,13 +845,18 @@ def workout_rp3import_view(request, userid=0):
},
]
return render(request, 'rp3_list_import.html',
checknew = request.GET.get('selectallnew', False)
return render(request, 'list_import.html',
{
'workouts': workouts,
'rower': r,
'active': 'nav-workouts',
'breadcrumbs': breadcrumbs,
'teams': get_my_teams(request.user)
'teams': get_my_teams(request.user),
'integration': 'RP3',
'checknew': checknew,
})
# The page where you select which Strava workout to import
@@ -1461,7 +1447,8 @@ def workout_getrp3workout_all(request): # pragma: no cover
r = getrequestrower(request)
result = rp3stuff.get_rp3_workouts(r, do_async=True)
rp3_integration = RP3Integration(request.user)
result = rp3_integration.get_workouts()
if result:
messages.info(
@@ -1582,21 +1569,12 @@ def workout_getrp3importview(request, externalid):
r = getrequestrower(request)
if r.user != request.user: # pragma: no cover
messages.error(
request, 'You can only access your own workouts on the NK Logbook, not those of your athletes')
request, 'You can only access your own workouts on the RP3 Logbook, not those of your athletes')
url = reverse('workout_rp3import_view', kwargs={
'userid': request.user.id})
return HttpResponseRedirect(url)
token = rp3stuff.rp3_open(r.user)
startdatetime = request.GET.get('startdatetime')
_ = myqueue(queuehigh,
handle_rp3_async_workout,
r.user.id,
token,
externalid,
startdatetime,
20,
)
rp3_integration = RP3Integration(request.user)
result = rp3_integration.get_workout(externalid)
messages.info(request, 'The workout will be imported in the background')
@@ -1684,8 +1662,11 @@ def workout_getimportview(request, externalid, source='c2', do_async=True):
@login_required()
def workout_getsporttracksworkout_all(request):
st_integration = SportTracksIntegration(request.user)
_ = st_integration.get_workouts()
messages.info(request,"Your SportTracks workouts will be imported in the background")
try:
_ = st_integration.get_workouts()
messages.info(request,"Your SportTracks workouts will be imported in the background")
except NoTokenError:
messages.error(request,"You have to connect to SportTracks first")
url = reverse('workouts_view')
return HttpResponseRedirect(url)