workout list nk import working
This commit is contained in:
@@ -1001,6 +1001,7 @@ class Rower(models.Model):
|
|||||||
nktokenexpirydate = models.DateTimeField(blank=True,null=True)
|
nktokenexpirydate = models.DateTimeField(blank=True,null=True)
|
||||||
nkrefreshtoken = models.TextField(default='',max_length=1000,
|
nkrefreshtoken = models.TextField(default='',max_length=1000,
|
||||||
blank=True,null=True)
|
blank=True,null=True)
|
||||||
|
nk_owner_id = models.BigIntegerField(default=0)
|
||||||
|
|
||||||
trainingpeaks_auto_export = models.BooleanField(default=False)
|
trainingpeaks_auto_export = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
|||||||
@@ -53,51 +53,84 @@ oauth_data = {
|
|||||||
'scope':'read',
|
'scope':'read',
|
||||||
}
|
}
|
||||||
|
|
||||||
import http.client as http_client
|
from requests.auth import HTTPBasicAuth
|
||||||
http_client.HTTPConnection.debuglevel = 1
|
|
||||||
|
|
||||||
def get_token(code,callbackuri):
|
def get_token(code):
|
||||||
#client_id = oauth_data['client_id']
|
|
||||||
#client_secret = oauth_data['client_secret']
|
|
||||||
#base_uri = oauth_data['base_url']
|
|
||||||
|
|
||||||
#nk = OAuth2Session(client_id)
|
|
||||||
#token = nk.fetch_token(base_uri,client_secret=client_secret,authorization_response=callbackuri)
|
|
||||||
|
|
||||||
#print(token)
|
|
||||||
#return [0,0,0]
|
|
||||||
url = oauth_data['base_url']
|
url = oauth_data['base_url']
|
||||||
|
|
||||||
|
|
||||||
headers = {'Accept': 'application/json',
|
headers = {'Accept': 'application/json',
|
||||||
#'Api-Key': oauth_data['client_id'],
|
#'Authorization': auth_header,
|
||||||
#'Content-Type': 'application/x-www-form-urlencoded',
|
'Content-Type': 'application/x-www-form-urlencoded',
|
||||||
#'user-agent': 'sanderroosendaal'
|
#'user-agent': 'sanderroosendaal'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
post_data = {"client_id": oauth_data['client_id'],
|
post_data = {"client_id": oauth_data['client_id'],
|
||||||
"grant_type": "authorization_code",
|
"grant_type": "authorization_code",
|
||||||
"redirect_uri": oauth_data['redirect_uri'],
|
"redirect_uri": oauth_data['redirect_uri'],
|
||||||
"client_secret": oauth_data['client_secret'],
|
|
||||||
"code": code,
|
"code": code,
|
||||||
#"response_type": "code",
|
|
||||||
# "scope":oauth_data['scope'],
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
response = requests.post(url,auth=HTTPBasicAuth(oauth_data['client_id'],oauth_data['client_secret']),
|
||||||
|
data=post_data)
|
||||||
|
|
||||||
|
if response.status_code != 200:
|
||||||
|
return [0,response.text,0,0]
|
||||||
|
|
||||||
|
token_json = response.json()
|
||||||
|
|
||||||
|
access_token = token_json['access_token']
|
||||||
|
refresh_token = token_json['refresh_token']
|
||||||
|
expires_in = token_json['expires_in']
|
||||||
|
nk_owner_id = token_json['user_id']
|
||||||
|
|
||||||
|
return [access_token, expires_in, refresh_token,nk_owner_id]
|
||||||
|
|
||||||
response = requests.post(url,data=json.dumps(post_data),headers=headers)
|
|
||||||
print('Status Code',response.status_code)
|
|
||||||
return [0,response.text,0]
|
|
||||||
#return imports_get_token(code, oauth_data)
|
|
||||||
|
|
||||||
def nk_open(user):
|
def nk_open(user):
|
||||||
t = time.localtime()
|
r = Rower.objects.get(user=user)
|
||||||
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
print(r.nktokenexpirydate)
|
||||||
token = imports_open(user,oauth_data)
|
if (r.nktoken == '') or (r.nktoken is None):
|
||||||
return token
|
s = "Token doesn't exist. Need to authorize"
|
||||||
|
raise NoTokenError("User has no token")
|
||||||
|
else:
|
||||||
|
if (timezone.now()>r.nktokenexpirydate):
|
||||||
|
thetoken = rower_nk_token_refresh(user)
|
||||||
|
if thetoken == None:
|
||||||
|
raise NoTokenError("User has no token")
|
||||||
|
return thetoken
|
||||||
|
else:
|
||||||
|
thetoken = r.nktoken
|
||||||
|
|
||||||
|
return thetoken
|
||||||
|
|
||||||
def do_refresh_token(refreshtoken):
|
def do_refresh_token(refreshtoken):
|
||||||
return imports_do_refresh_token(refreshtoken, oauth_data)
|
post_data = {"grant_type": "refresh_token",
|
||||||
|
#"client_id":NK_CLIENT_ID,
|
||||||
|
"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.request.headers)
|
||||||
|
print(post_data)
|
||||||
|
print(response.status_code,response.text)
|
||||||
|
|
||||||
|
if response.status_code != 200:
|
||||||
|
return [0,0,0]
|
||||||
|
|
||||||
|
token_json = response.json()
|
||||||
|
|
||||||
|
access_token = token_json['access_token']
|
||||||
|
refresh_token = token_json['refresh_token']
|
||||||
|
expires_in = token_json['expires_in']
|
||||||
|
|
||||||
|
return access_token, expires_in, refresh_token
|
||||||
|
|
||||||
|
|
||||||
def rower_nk_token_refresh(user):
|
def rower_nk_token_refresh(user):
|
||||||
r = Rower.objects.get(user=user)
|
r = Rower.objects.get(user=user)
|
||||||
@@ -128,16 +161,25 @@ def get_nk_workout_list(user,fake=False):
|
|||||||
return custom_exception_handler(401,s)
|
return custom_exception_handler(401,s)
|
||||||
else:
|
else:
|
||||||
# ready to fetch. Hurray
|
# ready to fetch. Hurray
|
||||||
|
endTime = int(arrow.now().timestamp())*1000
|
||||||
|
endTime = str(endTime)
|
||||||
|
startTime = arrow.now()-timedelta(days=90)*1000
|
||||||
|
startTime = str(int(startTime.timestamp()))
|
||||||
authorizationstring = str('Bearer ' + r.nktoken)
|
authorizationstring = str('Bearer ' + r.nktoken)
|
||||||
headers = {'Authorization': authorizationstring,
|
headers = {'Authorization': authorizationstring,
|
||||||
'user-agent': 'sanderroosendaal',
|
'user-agent': 'sanderroosendaal',
|
||||||
'Content-Type': 'application/json'}
|
'Content-Type': 'application/json',
|
||||||
|
}
|
||||||
|
|
||||||
url = NK_API_LOCATION+"api/v1/sessions"
|
url = NK_API_LOCATION+"api/v1/sessions"
|
||||||
|
|
||||||
params = {} # start / end time
|
params = {
|
||||||
|
'startTime':startTime,
|
||||||
|
'endTime':endTime,
|
||||||
|
} # start / end time
|
||||||
|
|
||||||
s = requests.get(url,headers=headers,params=params)
|
s = requests.get(url,headers=headers,params=params)
|
||||||
|
#print(s.status_code,s.json())
|
||||||
|
|
||||||
return s
|
return s
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,9 @@
|
|||||||
{% if rower.c2token is not None and rower.c2token != '' %}
|
{% if rower.c2token is not None and rower.c2token != '' %}
|
||||||
Concept2 Logbook,
|
Concept2 Logbook,
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if rower.nktoken is not None and rower.nktoken != '' %}
|
||||||
|
NK LiNK,
|
||||||
|
{% endif %}
|
||||||
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
|
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
|
||||||
SportTracks,
|
SportTracks,
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -776,14 +776,10 @@ def rower_process_garmincallback(request):
|
|||||||
# Process NK Callback
|
# Process NK Callback
|
||||||
@login_required()
|
@login_required()
|
||||||
def rower_process_nkcallback(request):
|
def rower_process_nkcallback(request):
|
||||||
uri = request.build_absolute_uri()
|
|
||||||
uri = 'https://dunav.ngrok.io/'+uri[22:]
|
|
||||||
print(uri)
|
|
||||||
|
|
||||||
# do stuff
|
# do stuff
|
||||||
try:
|
try:
|
||||||
code = request.GET.get('code',None)
|
code = request.GET.get('code',None)
|
||||||
res = nkstuff.get_token(code,uri)
|
res = nkstuff.get_token(code)
|
||||||
except MultiValueDictKeyError:
|
except MultiValueDictKeyError:
|
||||||
message = "The resource owner or authorization server denied the request"
|
message = "The resource owner or authorization server denied the request"
|
||||||
messages.error(request,message)
|
messages.error(request,message)
|
||||||
@@ -791,8 +787,6 @@ def rower_process_nkcallback(request):
|
|||||||
url = reverse('rower_exportsettings_view')
|
url = reverse('rower_exportsettings_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
|
|
||||||
uri = request.build_absolute_uri()
|
|
||||||
|
|
||||||
access_token = res[0]
|
access_token = res[0]
|
||||||
if access_token == 0:
|
if access_token == 0:
|
||||||
message = res[1]
|
message = res[1]
|
||||||
@@ -805,12 +799,14 @@ def rower_process_nkcallback(request):
|
|||||||
|
|
||||||
expires_in = res[1]
|
expires_in = res[1]
|
||||||
refresh_token = res[2]
|
refresh_token = res[2]
|
||||||
|
nk_owner_id = res[3]
|
||||||
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
|
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
|
||||||
|
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
r.nktoken = access_token
|
r.nktoken = access_token
|
||||||
r.nktokenexpirydate = expirydatetime
|
r.nktokenexpirydate = expirydatetime
|
||||||
r.nkrefreshtoken = refresh_token
|
r.nkrefreshtoken = refresh_token
|
||||||
|
r.nk_owner_id = nk_owner_id
|
||||||
|
|
||||||
r.save()
|
r.save()
|
||||||
|
|
||||||
@@ -836,7 +832,7 @@ def workout_nkimport_view(request,userid=0):
|
|||||||
if (r.stravatoken == '') or (r.stravatoken is None):
|
if (r.stravatoken == '') or (r.stravatoken is None):
|
||||||
s = "Token doesn't exist. Need to authorize"
|
s = "Token doesn't exist. Need to authorize"
|
||||||
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
||||||
message = "Something went wrong in workout_stravaimport_view"
|
message = "Something went wrong in workout_nkimport_view"
|
||||||
messages.error(request,message)
|
messages.error(request,message)
|
||||||
url = reverse('workouts_view')
|
url = reverse('workouts_view')
|
||||||
return HttpResponseRedirect(url)
|
return HttpResponseRedirect(url)
|
||||||
@@ -846,7 +842,7 @@ def workout_nkimport_view(request,userid=0):
|
|||||||
nkdata = [{
|
nkdata = [{
|
||||||
'id':int(item['id']),
|
'id':int(item['id']),
|
||||||
'elapsed_time':item['elapsedTime'],
|
'elapsed_time':item['elapsedTime'],
|
||||||
'start_date':item['startTime'],
|
'start_date':arrow.get(item['startTime']),
|
||||||
} for item in res.json()]
|
} for item in res.json()]
|
||||||
|
|
||||||
workouts = []
|
workouts = []
|
||||||
@@ -857,12 +853,17 @@ def workout_nkimport_view(request,userid=0):
|
|||||||
n = item['name']
|
n = item['name']
|
||||||
nnn = ''
|
nnn = ''
|
||||||
ttot = str(datetime.timedelta(seconds=int(float(item['elapsedTime'])/1000.)))
|
ttot = str(datetime.timedelta(seconds=int(float(item['elapsedTime'])/1000.)))
|
||||||
s = item['startTime']
|
s = arrow.get(item['startTime'],tzinfo=r.defaulttimezone).format(arrow.FORMAT_W3C)
|
||||||
|
#s = arrow.get(item['startTime']).to(r.defaulttimezone).isoformat()
|
||||||
keys = ['id','distance','duration','starttime','name','new']
|
keys = ['id','distance','duration','starttime','name','new']
|
||||||
values = [i,d,ttot,s,n,nnn]
|
values = [i,d,ttot,s,n,nnn]
|
||||||
res = dict(zip(keys, values))
|
res = dict(zip(keys, values))
|
||||||
workouts.append(res)
|
workouts.append(res)
|
||||||
|
|
||||||
|
workouts = workouts[::-1]
|
||||||
|
|
||||||
|
print(workouts)
|
||||||
|
|
||||||
breadcrumbs = [
|
breadcrumbs = [
|
||||||
{
|
{
|
||||||
'url':'/rowers/list-workouts/',
|
'url':'/rowers/list-workouts/',
|
||||||
|
|||||||
Reference in New Issue
Block a user