Private
Public Access
1
0

starting to work on nkstuff.get_workout

This commit is contained in:
Sander Roosendaal
2021-04-01 21:01:55 +02:00
parent 047035f62e
commit c4b20fb9e0
4 changed files with 80 additions and 32 deletions

View File

@@ -116,7 +116,6 @@ def do_refresh_token(refreshtoken):
url = oauth_data['base_url']
response = requests.post(url,data=post_data,auth=HTTPBasicAuth(oauth_data['client_id'],oauth_data['client_secret']))
print(response.status_code)
if response.status_code != 200:
return [0,0,0]
@@ -150,7 +149,7 @@ def make_authorization_url(request):
def get_nk_workout_list(user,fake=False):
r = Rower.objects.get(user=user)
print(r.nktoken,r.nktokenexpirydate)
if (r.nktoken == '') or (r.nktoken is None):
s = "Token doesn't exist. Need to authorize"
return custom_exception_handler(401,s)
@@ -181,24 +180,54 @@ def get_nk_workout_list(user,fake=False):
return s
def get_nk_workout_strokes(user,nkid):
r = Rower.objects.get(user=user)
if (r.nktoken == '') or (r.nktoken is None):
return custom_exception_handler(401,s)
s = "Token doesn't exist. Need to authorize"
elif (timezone.now()>r.tokenexpirydate):
s = "Token expired. Needs to refresh."
return custom_exception_handler(401,s)
else:
# ready to fetch. Hurray
authorizationstring = str('Bearer ' + r.nktoken)
headers = {'Authorization': authorizationstring,
'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json'}
url = "https://log.concept2.com/api/users/me/results/"+str(nkid)+"/strokes"
s = requests.get(url,headers=headers)
return s
#
#def get_workout(user,nkid):
def getdict(x):
try:
return x[0]
except KeyError:
pass
return {}
def get_workout(user,nkid):
print('aap')
r = Rower.objects.get(user=user)
if (r.nktoken == '') or (r.nktoken is None):
s = "Token doesn't exist. Need to authorize"
return custom_exception_handler(401,s) ,0
elif (timezone.now()>r.nktokenexpirydate):
s = "Token expired. Needs to refresh."
return custom_exception_handler(401,s),0
params = {
'sessionIds': nkid,
}
authorizationstring = str('Bearer ' + r.nktoken)
headers = {'Authorization': authorizationstring,
'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json',
}
# get strokes
url = NK_API_LOCATION+"api/v1/sessions/strokes"
response = requests.get(url,headers=headers,params=params)
if response != 200:
# error handling
pass
data = response.json()[str(nkid)]
df = pd.DataFrame.from_dict(data)
ol = df['oarlockStrokes']
ol = ol.apply(lambda x:getdict(x))
df2 = pd.DataFrame.from_records(ol.values)
df2 = df2.rename(colunms={"timestamp":"ts"})
df = pd.concat([df,df2],axis=1)
# get workout data
return 0,0

View File

@@ -593,6 +593,12 @@ def mocked_requests(*args, **kwargs):
with open('rowers/tests/testdata/c2jsonstrokedata.txt','r') as infile:
c2strokedata = json.load(infile)
with open('rowers/tests/testdata/nk_strokes.json','r') as infile:
nkstrokedata = json.load(infile)
with open('rowers/tests/testdata/nk_list.json','r') as infile:
nkworkoutlist = json.load(infile)
polar_json = {
'available-user-data': []
}
@@ -621,7 +627,7 @@ def mocked_requests(*args, **kwargs):
stravaworkoutlist = json.load(open('rowers/tests/testdata/stravaworkoutlist.txt'))
sporttracksworkoutlist = json.load(open('rowers/tests/testdata/sporttracksworkouts.txt'))
nkworkoutlist = json.load(open('rowers/tests/testdata/nkworkouts.txt'))
#nkworkoutlist = json.load(open('rowers/tests/testdata/nkworkouts.txt'))
rkworkoutlistjson = json.load(open('rowers/tests/testdata/rkworkoutslist.txt','r'))
uaworkoutlistjson = json.load(open('rowers/tests/testdata/uaworkoutlist.txt','r'))
@@ -752,6 +758,9 @@ def mocked_requests(*args, **kwargs):
nkworkoutlistregex = '.*?nkrowlink\.com\/api\/v1\/sessions'
nkworkoutlisttester = re.compile(nkworkoutlistregex)
nkstrokesregex = '.*?nkrowlink\.com\/api\/v1\/strokes\?sessionIds=\d'
nkstrokestester = re.compile(nkstrokesregex)
stravaathleteregex = '.*?strava\.com\/api\/v3\/athlete$'
stravaathletetester = re.compile(stravaathleteregex)
@@ -925,17 +934,11 @@ def mocked_requests(*args, **kwargs):
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
}
return MockResponse(json_data,200)
if nkstrokestester.match(args[0]):
return MockResponse(nkstrokedata,200)
if nkworkoutlisttester.match(args[0]):
return MockResponse(nkworkoutlist,200)
elif 'token' in args[0]:
json_data = {
"token_type": "Bearer",
"access_token": "987654321234567898765432123456789",
"refresh_token": "1234567898765432112345678987654321",
"expires_at": arrow.now().timestamp()+7200
}
return MockResponse(json_data,200)
if stravatester.match(args[0]):

View File

@@ -424,6 +424,21 @@ class NKObjects(DjangoTestCase):
self.assertEqual(response.status_code,200)
@patch('rowers.nkstuff.requests.get', side_effect=mocked_requests)
@patch('rowers.nkstuff.requests.post', side_effect=mocked_requests)
@patch('rowers.dataprep.getsmallrowdata_db')
def test_nk_import(self, mock_get, mock_post,
mocked_getsmallrowdata_db):
result = rowers.nkstuff.rower_nk_token_refresh(self.u)
response = self.c.get('/rowers/workout/nkimport/12',follow=True)
self.assertRedirects(response,
expected_url='/rowers/workout/'+encoded2+'/edit/',
status_code=301,target_status_code=200)
self.assertEqual(response.status_code, 200)
#@pytest.mark.django_db

View File

@@ -1931,7 +1931,8 @@ importsources = {
'runkeeper':runkeeperstuff,
'sporttracks':sporttracksstuff,
'trainingpeaks':tpstuff,
'underarmour':underarmourstuff
'underarmour':underarmourstuff,
'nk':nkstuff,
}
@login_required()
@@ -1960,7 +1961,7 @@ def workout_getrp3importview(request,externalid):
def workout_getimportview(request,externalid,source = 'c2'):
data,strokedata = importsources[source].get_workout(request.user,externalid)
if not data:
messages.error(request,res[1])
messages.error(request,"No strokedata received")
url = reverse('workouts_view')
return HttpResponseRedirect(url)