Private
Public Access
1
0

adding async option to NK import

This commit is contained in:
Sander Roosendaal
2021-04-19 08:41:48 +02:00
parent 2deb4fcbe3
commit 0c13f798de
9 changed files with 42 additions and 12 deletions

View File

@@ -902,7 +902,7 @@ def make_authorization_url(request):
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
# Get workout from C2 ID # Get workout from C2 ID
def get_workout(user,c2id): def get_workout(user,c2id,do_async=False):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.c2token == '') or (r.c2token is None): if (r.c2token == '') or (r.c2token is None):
s = "Token doesn't exist. Need to authorize" s = "Token doesn't exist. Need to authorize"

View File

@@ -247,7 +247,7 @@ def get_nk_workout_list(user,fake=False,after=0,before=0):
# #
def get_workout(user,nkid): def get_workout(user,nkid,do_async=False):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.nktoken == '') or (r.nktoken is None): if (r.nktoken == '') or (r.nktoken is None):
s = "Token doesn't exist. Need to authorize" s = "Token doesn't exist. Need to authorize"
@@ -260,6 +260,27 @@ def get_workout(user,nkid):
'sessionIds': nkid, 'sessionIds': nkid,
} }
if do_async:
res = get_nk_workout_list(r.user)
if res.status_code != 200:
return 0
alldata = {}
for item in res.json():
alldata[item['id']] = item
res = myqueue(
queuehigh,
handle_nk_async_workout,
alldata,
r.user.id,
r.nktoken,
nkid,
0,
r.defaulttimezone,
)
return {},pd.DataFrame()
authorizationstring = str('Bearer ' + r.nktoken) authorizationstring = str('Bearer ' + r.nktoken)
headers = {'Authorization': authorizationstring, headers = {'Authorization': authorizationstring,
@@ -292,7 +313,6 @@ def get_workout(user,nkid):
before = before+timedelta(days=1) before = before+timedelta(days=1)
before = str(int(before.timestamp())*1000) before = str(int(before.timestamp())*1000)
after = str(int(after.timestamp())*1000) after = str(int(after.timestamp())*1000)
print(after)
url = NK_API_LOCATION+"api/v1/sessions/" url = NK_API_LOCATION+"api/v1/sessions/"

View File

@@ -92,7 +92,7 @@ def get_runkeeper_workout_list(user):
return s return s
# Get workout summary data by Runkeeper ID # Get workout summary data by Runkeeper ID
def get_workout(user,runkeeperid): def get_workout(user,runkeeperid,do_async=False):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.runkeepertoken == '') or (r.runkeepertoken is None): if (r.runkeepertoken == '') or (r.runkeepertoken is None):
return custom_exception_handler(401,s) return custom_exception_handler(401,s)

View File

@@ -97,7 +97,7 @@ def get_sporttracks_workout_list(user):
return s return s
# Get workout summary data by SportTracks ID # Get workout summary data by SportTracks ID
def get_workout(user,sporttracksid): def get_workout(user,sporttracksid,do_async=False):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.sporttrackstoken == '') or (r.sporttrackstoken is None): if (r.sporttrackstoken == '') or (r.sporttrackstoken is None):
return custom_exception_handler(401,s) return custom_exception_handler(401,s)

View File

@@ -382,7 +382,7 @@ def async_get_workout(user,stravaid):
return job return job
# Get a Strava workout summary data and stroke data by ID # Get a Strava workout summary data and stroke data by ID
def get_workout(user,stravaid): def get_workout(user,stravaid,do_async=False):
try: try:
thetoken = strava_open(user) thetoken = strava_open(user)
except NoTokenError: except NoTokenError:

View File

@@ -2894,7 +2894,10 @@ def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,max_attempts,de
def handle_nk_async_workout(alldata,userid,nktoken,nkid,delaysec,defaulttimezone,debug=False,**kwargs): def handle_nk_async_workout(alldata,userid,nktoken,nkid,delaysec,defaulttimezone,debug=False,**kwargs):
time.sleep(delaysec) time.sleep(delaysec)
try:
data = alldata[nkid] data = alldata[nkid]
except KeyError:
data = alldata[int(nkid)]
params = { params = {
'sessionIds': nkid, 'sessionIds': nkid,

View File

@@ -70,7 +70,7 @@ def get_underarmour_workout_list(user):
return s return s
# Get workout summary data by Underarmour ID # Get workout summary data by Underarmour ID
def get_workout(user,underarmourid): def get_workout(user,underarmourid,do_async=False):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
if (r.underarmourtoken == '') or (r.underarmourtoken is None): if (r.underarmourtoken == '') or (r.underarmourtoken is None):
return custom_exception_handler(401,s) return custom_exception_handler(401,s)

View File

@@ -496,6 +496,7 @@ urlpatterns = [
name='workout_getrp3importview'), name='workout_getrp3importview'),
re_path(r'^workout/rp3import/all/$',views.workout_getrp3workout_all,name='workout_getrp3workout_all'), re_path(r'^workout/rp3import/all/$',views.workout_getrp3workout_all,name='workout_getrp3workout_all'),
re_path(r'^workout/(?P<source>\w+.*)import/(?P<externalid>\d+)/$',views.workout_getimportview,name='workout_getimportview'), re_path(r'^workout/(?P<source>\w+.*)import/(?P<externalid>\d+)/$',views.workout_getimportview,name='workout_getimportview'),
re_path(r'^workout/(?P<source>\w+.*)import/(?P<externalid>\d+)/async/$',views.workout_getimportview,{'do_async':True},name='workout_getimportview'),
re_path(r'^workout/stravaimport/all/$',views.workout_getstravaworkout_all,name='workout_getstravaworkout_all'), re_path(r'^workout/stravaimport/all/$',views.workout_getstravaworkout_all,name='workout_getstravaworkout_all'),
re_path(r'^workout/stravaimport/next/$',views.workout_getstravaworkout_next,name='workout_getstravaworkout_next'), re_path(r'^workout/stravaimport/next/$',views.workout_getstravaworkout_next,name='workout_getstravaworkout_next'),
re_path(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view,name='workout_sporttracksimport_view'), re_path(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view,name='workout_sporttracksimport_view'),

View File

@@ -2001,8 +2001,14 @@ def workout_getrp3importview(request,externalid):
return HttpResponseRedirect(url) return HttpResponseRedirect(url)
@login_required() @login_required()
def workout_getimportview(request,externalid,source = 'c2'): def workout_getimportview(request,externalid,source = 'c2',do_async=False):
data,strokedata = importsources[source].get_workout(request.user,externalid) data,strokedata = importsources[source].get_workout(request.user,externalid,
do_async=do_async)
if do_async:
messages.info(request,"Your workout will be imported in the background")
url = reverse('workouts_view')
return HttpResponseRedirect(url)
if not data: if not data:
messages.error(request,"No strokedata received") messages.error(request,"No strokedata received")