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)
|
||||
nkrefreshtoken = models.TextField(default='',max_length=1000,
|
||||
blank=True,null=True)
|
||||
nk_owner_id = models.BigIntegerField(default=0)
|
||||
|
||||
trainingpeaks_auto_export = models.BooleanField(default=False)
|
||||
|
||||
|
||||
@@ -53,51 +53,84 @@ oauth_data = {
|
||||
'scope':'read',
|
||||
}
|
||||
|
||||
import http.client as http_client
|
||||
http_client.HTTPConnection.debuglevel = 1
|
||||
from requests.auth import HTTPBasicAuth
|
||||
|
||||
def get_token(code,callbackuri):
|
||||
#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]
|
||||
def get_token(code):
|
||||
url = oauth_data['base_url']
|
||||
|
||||
|
||||
headers = {'Accept': 'application/json',
|
||||
#'Api-Key': oauth_data['client_id'],
|
||||
#'Content-Type': 'application/x-www-form-urlencoded',
|
||||
#'Authorization': auth_header,
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
#'user-agent': 'sanderroosendaal'
|
||||
}
|
||||
|
||||
|
||||
|
||||
post_data = {"client_id": oauth_data['client_id'],
|
||||
"grant_type": "authorization_code",
|
||||
"redirect_uri": oauth_data['redirect_uri'],
|
||||
"client_secret": oauth_data['client_secret'],
|
||||
"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):
|
||||
t = time.localtime()
|
||||
timestamp = time.strftime('%b-%d-%Y_%H%M', t)
|
||||
token = imports_open(user,oauth_data)
|
||||
return token
|
||||
r = Rower.objects.get(user=user)
|
||||
print(r.nktokenexpirydate)
|
||||
if (r.nktoken == '') or (r.nktoken is None):
|
||||
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):
|
||||
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):
|
||||
r = Rower.objects.get(user=user)
|
||||
@@ -128,16 +161,25 @@ def get_nk_workout_list(user,fake=False):
|
||||
return custom_exception_handler(401,s)
|
||||
else:
|
||||
# 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)
|
||||
headers = {'Authorization': authorizationstring,
|
||||
'user-agent': 'sanderroosendaal',
|
||||
'Content-Type': 'application/json'}
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
|
||||
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)
|
||||
#print(s.status_code,s.json())
|
||||
|
||||
return s
|
||||
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
{% if rower.c2token is not None and rower.c2token != '' %}
|
||||
Concept2 Logbook,
|
||||
{% endif %}
|
||||
{% if rower.nktoken is not None and rower.nktoken != '' %}
|
||||
NK LiNK,
|
||||
{% endif %}
|
||||
{% if rower.sporttrackstoken is not None and rower.sporttrackstoken != '' %}
|
||||
SportTracks,
|
||||
{% endif %}
|
||||
|
||||
@@ -776,14 +776,10 @@ def rower_process_garmincallback(request):
|
||||
# Process NK Callback
|
||||
@login_required()
|
||||
def rower_process_nkcallback(request):
|
||||
uri = request.build_absolute_uri()
|
||||
uri = 'https://dunav.ngrok.io/'+uri[22:]
|
||||
print(uri)
|
||||
|
||||
# do stuff
|
||||
try:
|
||||
code = request.GET.get('code',None)
|
||||
res = nkstuff.get_token(code,uri)
|
||||
res = nkstuff.get_token(code)
|
||||
except MultiValueDictKeyError:
|
||||
message = "The resource owner or authorization server denied the request"
|
||||
messages.error(request,message)
|
||||
@@ -791,8 +787,6 @@ def rower_process_nkcallback(request):
|
||||
url = reverse('rower_exportsettings_view')
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
uri = request.build_absolute_uri()
|
||||
|
||||
access_token = res[0]
|
||||
if access_token == 0:
|
||||
message = res[1]
|
||||
@@ -805,12 +799,14 @@ def rower_process_nkcallback(request):
|
||||
|
||||
expires_in = res[1]
|
||||
refresh_token = res[2]
|
||||
nk_owner_id = res[3]
|
||||
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
|
||||
|
||||
r = getrower(request.user)
|
||||
r.nktoken = access_token
|
||||
r.nktokenexpirydate = expirydatetime
|
||||
r.nkrefreshtoken = refresh_token
|
||||
r.nk_owner_id = nk_owner_id
|
||||
|
||||
r.save()
|
||||
|
||||
@@ -836,7 +832,7 @@ def workout_nkimport_view(request,userid=0):
|
||||
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_stravaimport_view"
|
||||
message = "Something went wrong in workout_nkimport_view"
|
||||
messages.error(request,message)
|
||||
url = reverse('workouts_view')
|
||||
return HttpResponseRedirect(url)
|
||||
@@ -846,7 +842,7 @@ def workout_nkimport_view(request,userid=0):
|
||||
nkdata = [{
|
||||
'id':int(item['id']),
|
||||
'elapsed_time':item['elapsedTime'],
|
||||
'start_date':item['startTime'],
|
||||
'start_date':arrow.get(item['startTime']),
|
||||
} for item in res.json()]
|
||||
|
||||
workouts = []
|
||||
@@ -857,12 +853,17 @@ def workout_nkimport_view(request,userid=0):
|
||||
n = item['name']
|
||||
nnn = ''
|
||||
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']
|
||||
values = [i,d,ttot,s,n,nnn]
|
||||
res = dict(zip(keys, values))
|
||||
workouts.append(res)
|
||||
|
||||
workouts = workouts[::-1]
|
||||
|
||||
print(workouts)
|
||||
|
||||
breadcrumbs = [
|
||||
{
|
||||
'url':'/rowers/list-workouts/',
|
||||
|
||||
Reference in New Issue
Block a user