diff --git a/rowers/#ownapistuff.py# b/rowers/#ownapistuff.py# new file mode 100644 index 00000000..528013b3 --- /dev/null +++ b/rowers/#ownapistuff.py# @@ -0,0 +1,279 @@ +# Python +import oauth2 as oauth +import cgi +import requests +import requests.auth +import json +from django.utils import timezone +from datetime import datetime +import numpy as np +from dateutil import parser +import time +import math +from math import sin,cos,atan2,sqrt + +import urllib +import c2stuff + +# Django +from django.shortcuts import render_to_response +from django.http import HttpResponseRedirect, HttpResponse,JsonResponse +from django.conf import settings +from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.models import User +from django.contrib.auth.decorators import login_required + +# Project +# from .models import Profile +from rowingdata import rowingdata +import pandas as pd +from rowers.models import Rower,Workout + +from rowsandall_app.settings import C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, SPORTTRACKS_CLIENT_SECRET, SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI + +TEST_CLIENT_ID = "LTqH0nUe8BySMEJgohJBoo1q4PV16xQJ8uF0XQPU" +TEST_CLIENT_SECRET = "HI4bM21rh7pTEXOwCAHLNe3SlLMgbksuzCOARSBbolbQyquZ5quNF8i9PiIaGumbBG4OHCJiQqZJh7Nez6aRiZFgO8POBRVkwCg1fLNk1oY5EJHtLiNrgWY0nbWWDedt" + +TEST_REDIRECT_URI = "http://localhost:8000/rowers/test_callback" + +def custom_exception_handler(exc,message): + + response = { + "errors": [ + { + "code": str(exc), + "detail": message, + } + ] + } + + res = HttpResponse(message) + res.status_code = 401 + res.json = json.dumps(response) + + return res + +def do_refresh_token(refreshtoken): + client_auth = requests.auth.HTTPBasicAuth(TEST_CLIENT_ID, TEST_CLIENT_SECRET) + post_data = {"grant_type": "refresh_token", + "client_secret": TEST_CLIENT_SECRET, + "client_id":TEST_CLIENT_ID, + "refresh_token": refreshtoken, + } + headers = {'user-agent': 'sanderroosendaal', + 'Accept': 'application/json', + 'Content-Type': 'application/json'} + + url = "http://localhost:8000/rowers/o/token" + + response = requests.post(url, + data=json.dumps(post_data), + headers=headers) + + token_json = response.json() + thetoken = token_json['access_token'] + expires_in = token_json['expires_in'] + try: + refresh_token = token_json['refresh_token'] + except KeyError: + refresh_token = refreshtoken + + return [thetoken,expires_in,refresh_token] + + +def get_token(code): + client_auth = requests.auth.HTTPBasicAuth(TEST_CLIENT_ID, TEST_CLIENT_SECRET) + post_data = {"grant_type": "authorization_code", + "code": code, + "redirect_uri": TEST_REDIRECT_URI, + "client_secret": TEST_CLIENT_SECRET, + "client_id":TEST_CLIENT_ID, + } + headers = {'Accept': 'application/json', + 'Content-Type': 'application/json'} + + url = "http://localhost:8000/rowers/o/token/" + + + response = requests.post(url, + data=json.dumps(post_data), + headers=headers) + print response + token_json = response.json() + thetoken = token_json['access_token'] + expires_in = token_json['expires_in'] + refresh_token = token_json['refresh_token'] + + return [thetoken,expires_in,refresh_token] + +def make_authorization_url(request): + # Generate a random string for the state parameter + # Save it for use later to prevent xsrf attacks + from uuid import uuid4 + state = str(uuid4()) + + params = {"client_id": TEST_CLIENT_ID, + "response_type": "code", + "redirect_uri": TEST_REDIRECT_URI, + "scope":"write", + "state":state} + + + import urllib + url = "http://localhost:8000/rowers/o/authorize" +urllib.urlencode(params) + + return HttpResponseRedirect(url) + + +def rower_ownapi_token_refresh(user): + r = Rower.objects.get(user=user) + res = do_refresh_token(r.ownapirefreshtoken) + access_token = res[0] + expires_in = res[1] + refresh_token = res[2] + expirydatetime = timezone.now()+timedelta(seconds=expires_in) + + r = Rower.objects.get(user=user) + r.ownapitoken = access_token + r.tokenexpirydate = expirydatetime + r.ownapirefreshtoken = refresh_token + + r.save() + return r.ownapitoken + +def get_ownapi_workout_list(user): + r = Rower.objects.get(user=user) + if (r.ownapitoken == '') or (r.ownapitoken is None): + s = "Token doesn't exist. Need to authorize" + return custom_exception_handler(401,s) + elif (timezone.now()>r.ownapitokenexpirydate): + s = "Token expired. Needs to refresh." + return custom_exception_handler(401,s) + else: + # ready to fetch. Hurray + authorizationstring = str('Bearer ' + r.ownapitoken) + headers = {'Authorization': authorizationstring, + 'user-agent': 'sanderroosendaal', + 'Content-Type': 'application/json'} + url = "https://api.ownapi.mobi/api/v2/fitnessActivities" + s = requests.get(url,headers=headers) + + return s + + +def get_ownapi_workout(user,ownapiid): + r = Rower.objects.get(user=user) + if (r.ownapitoken == '') or (r.ownapitoken is None): + return custom_exception_handler(401,s) + s = "Token doesn't exist. Need to authorize" + elif (timezone.now()>r.ownapitokenexpirydate): + s = "Token expired. Needs to refresh." + return custom_exception_handler(401,s) + else: + # ready to fetch. Hurray + authorizationstring = str('Bearer ' + r.ownapitoken) + headers = {'Authorization': authorizationstring, + 'user-agent': 'sanderroosendaal', + 'Content-Type': 'application/json'} + url = "https://api.ownapi.mobi/api/v2/fitnessActivities/"+str(ownapiid) + s = requests.get(url,headers=headers) + + return s + +def createownapiworkoutdata(w): + filename = w.csvfilename + row = rowingdata(filename) + averagehr = int(row.df[' HRCur (bpm)'].mean()) + maxhr = int(row.df[' HRCur (bpm)'].max()) + + # adding diff, trying to see if this is valid + t = row.df.ix[:,'TimeStamp (sec)'].values-10*row.df.ix[0,'TimeStamp (sec)'] + t[0] = t[1] + d = row.df.ix[:,'cum_dist'].values + d[0] = d[1] + t = t.astype(int) + d = d.astype(int) + spm = row.df[' Cadence (stokes/min)'].astype(int) + spm[0] = spm[1] + hr = row.df[' HRCur (bpm)'].astype(int) + + haslatlon=1 + + try: + lat = row.df[' latitude'].values + lon = row.df[' longitude'].values + except KeyError: + haslatlon = 0 + + haspower = 1 + try: + power = row.df[' Power (watts)'].values + except KeyError: + haspower = 0 + + locdata = [] + hrdata = [] + spmdata = [] + distancedata = [] + powerdata = [] + + for i in range(len(t)): + hrdata.append(t[i]) + hrdata.append(hr[i]) + distancedata.append(t[i]) + distancedata.append(d[i]) + spmdata.append(t[i]) + spmdata.append(spm[i]) + if haslatlon: + locdata.append(t[i]) + locdata.append([lat[i],lon[i]]) + if haspower: + powerdata.append(t[i]) + powerdata.append(power[i]) + + + if haslatlon: + data = { + "type": "Rowing", + "name": w.name, +# "start_time": str(w.date)+"T"+str(w.starttime)+"Z", + "start_time": w.startdatetime.isoformat(), + "total_distance": int(w.distance), + "duration": int(max(t)), + "notes": w.notes, + "avg_heartrate": averagehr, + "max_heartrate": maxhr, + "location": locdata, + "distance": distancedata, + "cadence": spmdata, + "heartrate": hrdata, + } + else: + data = { + "type": "Rowing", + "name": w.name, +# "start_time": str(w.date)+"T"+str(w.starttime)+"Z", + "start_time": w.startdatetime.isoformat(), + "total_distance": int(w.distance), + "duration": int(max(t)), + "notes": w.notes, + "avg_heartrate": averagehr, + "max_heartrate": maxhr, + "distance": distancedata, + "cadence": spmdata, + "heartrate": hrdata, + } + + if haspower: + data['power'] = powerdata + + return data + +def getidfromresponse(response): + t = json.loads(response.text) + uri = t['uris'][0] + id = uri[len(uri)-13:len(uri)-5] + + return int(id) + + diff --git a/rowers/.#ownapistuff.py b/rowers/.#ownapistuff.py new file mode 100644 index 00000000..d6b83c16 --- /dev/null +++ b/rowers/.#ownapistuff.py @@ -0,0 +1 @@ +E408191@CZ27LT9RCGN72.5176:1479844733 \ No newline at end of file diff --git a/rowers/dataprep.py b/rowers/dataprep.py index e5796b76..86573376 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -84,6 +84,16 @@ def rdata(file,rower=rrower()): return res +def delete_strokedata(id): + query = sa.text('DELETE FROM strokedata WHERE workoutid={id};'.format( + id=id, + )) + with engine.connect() as conn, conn.begin(): + try: + result = conn.execute(query) + except: + print "Database Locked" + def testdata(time,distance,pace,spm): t1 = np.issubdtype(time,np.number) t2 = np.issubdtype(distance,np.number) diff --git a/rowers/ownapistuff.py b/rowers/ownapistuff.py new file mode 100644 index 00000000..528013b3 --- /dev/null +++ b/rowers/ownapistuff.py @@ -0,0 +1,279 @@ +# Python +import oauth2 as oauth +import cgi +import requests +import requests.auth +import json +from django.utils import timezone +from datetime import datetime +import numpy as np +from dateutil import parser +import time +import math +from math import sin,cos,atan2,sqrt + +import urllib +import c2stuff + +# Django +from django.shortcuts import render_to_response +from django.http import HttpResponseRedirect, HttpResponse,JsonResponse +from django.conf import settings +from django.contrib.auth import authenticate, login, logout +from django.contrib.auth.models import User +from django.contrib.auth.decorators import login_required + +# Project +# from .models import Profile +from rowingdata import rowingdata +import pandas as pd +from rowers.models import Rower,Workout + +from rowsandall_app.settings import C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, SPORTTRACKS_CLIENT_SECRET, SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI + +TEST_CLIENT_ID = "LTqH0nUe8BySMEJgohJBoo1q4PV16xQJ8uF0XQPU" +TEST_CLIENT_SECRET = "HI4bM21rh7pTEXOwCAHLNe3SlLMgbksuzCOARSBbolbQyquZ5quNF8i9PiIaGumbBG4OHCJiQqZJh7Nez6aRiZFgO8POBRVkwCg1fLNk1oY5EJHtLiNrgWY0nbWWDedt" + +TEST_REDIRECT_URI = "http://localhost:8000/rowers/test_callback" + +def custom_exception_handler(exc,message): + + response = { + "errors": [ + { + "code": str(exc), + "detail": message, + } + ] + } + + res = HttpResponse(message) + res.status_code = 401 + res.json = json.dumps(response) + + return res + +def do_refresh_token(refreshtoken): + client_auth = requests.auth.HTTPBasicAuth(TEST_CLIENT_ID, TEST_CLIENT_SECRET) + post_data = {"grant_type": "refresh_token", + "client_secret": TEST_CLIENT_SECRET, + "client_id":TEST_CLIENT_ID, + "refresh_token": refreshtoken, + } + headers = {'user-agent': 'sanderroosendaal', + 'Accept': 'application/json', + 'Content-Type': 'application/json'} + + url = "http://localhost:8000/rowers/o/token" + + response = requests.post(url, + data=json.dumps(post_data), + headers=headers) + + token_json = response.json() + thetoken = token_json['access_token'] + expires_in = token_json['expires_in'] + try: + refresh_token = token_json['refresh_token'] + except KeyError: + refresh_token = refreshtoken + + return [thetoken,expires_in,refresh_token] + + +def get_token(code): + client_auth = requests.auth.HTTPBasicAuth(TEST_CLIENT_ID, TEST_CLIENT_SECRET) + post_data = {"grant_type": "authorization_code", + "code": code, + "redirect_uri": TEST_REDIRECT_URI, + "client_secret": TEST_CLIENT_SECRET, + "client_id":TEST_CLIENT_ID, + } + headers = {'Accept': 'application/json', + 'Content-Type': 'application/json'} + + url = "http://localhost:8000/rowers/o/token/" + + + response = requests.post(url, + data=json.dumps(post_data), + headers=headers) + print response + token_json = response.json() + thetoken = token_json['access_token'] + expires_in = token_json['expires_in'] + refresh_token = token_json['refresh_token'] + + return [thetoken,expires_in,refresh_token] + +def make_authorization_url(request): + # Generate a random string for the state parameter + # Save it for use later to prevent xsrf attacks + from uuid import uuid4 + state = str(uuid4()) + + params = {"client_id": TEST_CLIENT_ID, + "response_type": "code", + "redirect_uri": TEST_REDIRECT_URI, + "scope":"write", + "state":state} + + + import urllib + url = "http://localhost:8000/rowers/o/authorize" +urllib.urlencode(params) + + return HttpResponseRedirect(url) + + +def rower_ownapi_token_refresh(user): + r = Rower.objects.get(user=user) + res = do_refresh_token(r.ownapirefreshtoken) + access_token = res[0] + expires_in = res[1] + refresh_token = res[2] + expirydatetime = timezone.now()+timedelta(seconds=expires_in) + + r = Rower.objects.get(user=user) + r.ownapitoken = access_token + r.tokenexpirydate = expirydatetime + r.ownapirefreshtoken = refresh_token + + r.save() + return r.ownapitoken + +def get_ownapi_workout_list(user): + r = Rower.objects.get(user=user) + if (r.ownapitoken == '') or (r.ownapitoken is None): + s = "Token doesn't exist. Need to authorize" + return custom_exception_handler(401,s) + elif (timezone.now()>r.ownapitokenexpirydate): + s = "Token expired. Needs to refresh." + return custom_exception_handler(401,s) + else: + # ready to fetch. Hurray + authorizationstring = str('Bearer ' + r.ownapitoken) + headers = {'Authorization': authorizationstring, + 'user-agent': 'sanderroosendaal', + 'Content-Type': 'application/json'} + url = "https://api.ownapi.mobi/api/v2/fitnessActivities" + s = requests.get(url,headers=headers) + + return s + + +def get_ownapi_workout(user,ownapiid): + r = Rower.objects.get(user=user) + if (r.ownapitoken == '') or (r.ownapitoken is None): + return custom_exception_handler(401,s) + s = "Token doesn't exist. Need to authorize" + elif (timezone.now()>r.ownapitokenexpirydate): + s = "Token expired. Needs to refresh." + return custom_exception_handler(401,s) + else: + # ready to fetch. Hurray + authorizationstring = str('Bearer ' + r.ownapitoken) + headers = {'Authorization': authorizationstring, + 'user-agent': 'sanderroosendaal', + 'Content-Type': 'application/json'} + url = "https://api.ownapi.mobi/api/v2/fitnessActivities/"+str(ownapiid) + s = requests.get(url,headers=headers) + + return s + +def createownapiworkoutdata(w): + filename = w.csvfilename + row = rowingdata(filename) + averagehr = int(row.df[' HRCur (bpm)'].mean()) + maxhr = int(row.df[' HRCur (bpm)'].max()) + + # adding diff, trying to see if this is valid + t = row.df.ix[:,'TimeStamp (sec)'].values-10*row.df.ix[0,'TimeStamp (sec)'] + t[0] = t[1] + d = row.df.ix[:,'cum_dist'].values + d[0] = d[1] + t = t.astype(int) + d = d.astype(int) + spm = row.df[' Cadence (stokes/min)'].astype(int) + spm[0] = spm[1] + hr = row.df[' HRCur (bpm)'].astype(int) + + haslatlon=1 + + try: + lat = row.df[' latitude'].values + lon = row.df[' longitude'].values + except KeyError: + haslatlon = 0 + + haspower = 1 + try: + power = row.df[' Power (watts)'].values + except KeyError: + haspower = 0 + + locdata = [] + hrdata = [] + spmdata = [] + distancedata = [] + powerdata = [] + + for i in range(len(t)): + hrdata.append(t[i]) + hrdata.append(hr[i]) + distancedata.append(t[i]) + distancedata.append(d[i]) + spmdata.append(t[i]) + spmdata.append(spm[i]) + if haslatlon: + locdata.append(t[i]) + locdata.append([lat[i],lon[i]]) + if haspower: + powerdata.append(t[i]) + powerdata.append(power[i]) + + + if haslatlon: + data = { + "type": "Rowing", + "name": w.name, +# "start_time": str(w.date)+"T"+str(w.starttime)+"Z", + "start_time": w.startdatetime.isoformat(), + "total_distance": int(w.distance), + "duration": int(max(t)), + "notes": w.notes, + "avg_heartrate": averagehr, + "max_heartrate": maxhr, + "location": locdata, + "distance": distancedata, + "cadence": spmdata, + "heartrate": hrdata, + } + else: + data = { + "type": "Rowing", + "name": w.name, +# "start_time": str(w.date)+"T"+str(w.starttime)+"Z", + "start_time": w.startdatetime.isoformat(), + "total_distance": int(w.distance), + "duration": int(max(t)), + "notes": w.notes, + "avg_heartrate": averagehr, + "max_heartrate": maxhr, + "distance": distancedata, + "cadence": spmdata, + "heartrate": hrdata, + } + + if haspower: + data['power'] = powerdata + + return data + +def getidfromresponse(response): + t = json.loads(response.text) + uri = t['uris'][0] + id = uri[len(uri)-13:len(uri)-5] + + return int(id) + + diff --git a/rowers/tests.py b/rowers/tests.py index f32736b1..a556c64c 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -24,6 +24,11 @@ import numpy as np from rowers import urls from rowers.views import error500_view,error404_view,error400_view,error403_view +from dataprep import delete_strokedata + + + + class DjangoTestCase(TestCase, MockTestCase): def _pre_setup(self): MockTestCase.setUp(self) @@ -33,12 +38,12 @@ class DjangoTestCase(TestCase, MockTestCase): def _post_teardown(self): TestCase._post_teardown(self) MockTestCase.tearDown(self) + delete_strokedata(1) # Create your tests here. class C2Objects(DjangoTestCase): def test_strokedata(self): - print "C2 strokedata" with open('rowers/testdata/c2stroketestdata.txt','r') as infile: res = json.load(infile) @@ -60,7 +65,6 @@ class C2Objects(DjangoTestCase): class StravaObjects(DjangoTestCase): def test_strokedata(self): - print "STRAVA strokedata" timejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r')) velojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r')) distancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r')) @@ -136,7 +140,6 @@ class StravaObjects(DjangoTestCase): class STObjects(DjangoTestCase): def test_strokedata(self): - print "SportTracks strokedata" with open('rowers/testdata/sporttrackstestdata.txt','r') as infile: data = json.load(infile) @@ -152,7 +155,6 @@ class STObjects(DjangoTestCase): class TestErrorPages(TestCase): def test_error_handlers(self): - print "Error Handlers" self.assertTrue(urls.handler404.endswith('.error404_view')) self.assertTrue(urls.handler500.endswith('.error500_view')) @@ -178,7 +180,6 @@ class WorkoutTests(TestCase): duration="0:55:00",distance=8000) def test_checkworkoutuser(self): - print "Check Workout User" u = User.objects.get(username='john') r = Rower.objects.get(user=u) w = Workout.objects.get(user=r) @@ -198,7 +199,6 @@ class C2Tests(TestCase): duration="0:55:00",distance=8000) def c2_notokentest(self): - print "C2 No token" thetoken = c2_open(self.u) # should raise C2NoTokenError self.assertRaises(C2NoTokenError) @@ -213,7 +213,6 @@ class DataTest(TestCase): def test_workoutform(self): - print "Workout Form" form_data = { 'name':'test', 'date':'2016-05-01', @@ -227,7 +226,6 @@ class DataTest(TestCase): self.assertTrue(form.is_valid()) def test_rower_form_withvalidnumbers(self): - print "Workout Form with Valid Numbers" form_data = { 'max':192, 'rest':48, @@ -243,7 +241,6 @@ class DataTest(TestCase): def test_rower_form_twoequalvalues(self): - print "Workout Form Error" form_data = { 'max':192, 'rest':48, @@ -258,7 +255,6 @@ class DataTest(TestCase): self.assertFalse(form.is_valid()) def test_rower_form_abovemaxallowed(self): - print "Workout Form Error 2" form_data = { 'max':300, 'rest':48, @@ -273,7 +269,6 @@ class DataTest(TestCase): self.assertFalse(form.is_valid()) def test_rower_form_wrongorder(self): - print "Workout form error 3" form_data = { 'max':192, 'rest':48, @@ -288,7 +283,6 @@ class DataTest(TestCase): self.assertFalse(form.is_valid()) def test_rower_form_belowminalloed(self): - print "Workout form error 4" form_data = { 'max':192, 'rest':2, @@ -303,7 +297,6 @@ class DataTest(TestCase): self.assertFalse(form.is_valid()) def test_rower_form_wrongorder2(self): - print "Workout form error 5" form_data = { 'max':192, 'rest':48, @@ -318,7 +311,6 @@ class DataTest(TestCase): self.assertFalse(form.is_valid()) def test_painsled(self): - print "Test Painsled" filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' f = open(filename,'rb') file_data = {'file': SimpleUploadedFile(f.name, f.read())} @@ -399,7 +391,6 @@ class ViewTest(TestCase): self.nu = datetime.datetime.now() def test_upload_view_notloggedin(self): - print "Upload not logged in" response = self.c.post('/rowers/workout/upload/',follow=True) @@ -409,7 +400,6 @@ class ViewTest(TestCase): self.assertEqual(response.status_code, 200) def test_upload_view_sled(self): - print "Upload painsled" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' @@ -452,7 +442,6 @@ class ViewTest(TestCase): def test_upload_view_notloggedin(self): - print "Upload not logged in" response = self.c.post('/rowers/workout/upload/',follow=True) @@ -462,7 +451,6 @@ class ViewTest(TestCase): self.assertEqual(response.status_code, 200) def test_upload_view_sled_negativetime(self): - print "Painsled error" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\tim.csv' @@ -504,7 +492,6 @@ class ViewTest(TestCase): def test_upload_view_sled_noname(self): - print "Upload no name" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' @@ -538,7 +525,6 @@ class ViewTest(TestCase): def test_upload_view_TCX_CN(self): - print "Upload TCX" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\crewnerddata.tcx' @@ -582,7 +568,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_TCX_SpeedCoach2(self): - print "Upload TCX 2" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv' @@ -613,7 +598,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_TCX_SpeedCoach2(self): - print "Upload TCX 3" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv' @@ -646,7 +630,6 @@ class ViewTest(TestCase): def test_upload_view_TCX_SpeedCoach2(self): - print "Upload TCX 3" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\speedcoach3test3.csv' @@ -677,7 +660,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_TCX_NoHR(self): - print "Upload TCX no HR" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\NoHR.tcx' @@ -708,7 +690,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_TCX_CN(self): - print "Upload TCX 10" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\rowinginmotionexample.tcx' @@ -736,7 +717,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_RP(self): - print "Upload RowPro" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\RP_testdata.csv' @@ -764,7 +744,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_Mystery(self): - print "Upload Mystery" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\mystery.csv' @@ -792,7 +771,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_RP_interval(self): - print "Upload RowPro Interval" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\RP_interval.csv' @@ -820,7 +798,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_sled_desktop(self): - print "Upload Painsled Desktop" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\painsled_desktop_example.csv' @@ -848,7 +825,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_sled_ergdata(self): - print "Upload Ergdata" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\ergdata_example.csv' @@ -876,7 +852,6 @@ class ViewTest(TestCase): os.remove(f_to_be_deleted) def test_upload_view_sled_ergstick(self): - print "Upload Ergstick" self.c.login(username='john',password='koeinsloot') filename = 'C:\\python\\rowingdata\\testdata\\ergstick.csv' @@ -953,7 +928,6 @@ class subroutinetests(TestCase): def c2stuff(self): - print "Test C2 Stuff" data = c2stuff.createc2workoutdata(self.w) jsond = json.dumps(data) data = c2stuff.createc2workoutdata_as_splits(w) @@ -999,7 +973,6 @@ class PlotTests(TestCase): def test_ote_plots(self): - print "Plots" w = self.wote f1 = 'testdata.csv'[:-4] timestr = strftime("%Y%m%d-%H%M%S") @@ -1107,7 +1080,6 @@ class PlotTests(TestCase): os.remove(fullpathimagename) def test_otw_plots(self): - print "Plots 2" w = self.wotw f1 = 'testdata.csv'[:-4] timestr = strftime("%Y%m%d-%H%M%S") diff --git a/rowers/urls.py b/rowers/urls.py index 203b238b..0b740ab7 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -163,6 +163,8 @@ urlpatterns = [ url(r'^workout/(?P\d+)/flexchart$',views.workout_flexchart3_view), url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/(?P\w+.*)$',views.workout_comparison_view2), url(r'^workout/compare/(?P\d+)/(?P\d+)/(?P\w+.*)/(?P\w+.*)/$',views.workout_comparison_view2), + url(r'^test\_callback',views.rower_process_testcallback), + ] if settings.DEBUG: diff --git a/rowers/views.py b/rowers/views.py index 8f90b2b8..831b4098 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -29,6 +29,8 @@ from c2stuff import C2NoTokenError from iso8601 import ParseError import stravastuff import sporttracksstuff +import ownapistuff +from ownapistuff import TEST_CLIENT_ID, TEST_CLIENT_SECRET, TEST_REDIRECT_URI from rowsandall_app.settings import C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET from rowsandall_app.settings import SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI, SPORTTRACKS_CLIENT_SECRET import requests @@ -1169,6 +1171,7 @@ def rower_process_stravacallback(request): return imports_view(request,successmessage=successmessage) + @login_required() def rower_process_sporttrackscallback(request): code = request.GET['code'] @@ -1190,6 +1193,26 @@ def rower_process_sporttrackscallback(request): successmessage = "Tokens stored. Good to go" return imports_view(request,successmessage=successmessage) +@login_required() +def rower_process_testcallback(request): + code = request.GET['code'] + res = ownapistuff.get_token(code) + + + access_token = res[0] + expires_in = res[1] + refresh_token = res[2] + expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in) + + text = "Access Token:\n" + text += access_token + + text += "\n\nRefresh Token:\n" + text += refresh_token + + return HttpResponse(text) + + @login_required() def histo_all(request,theuser=0): promember=0 @@ -3731,7 +3754,7 @@ def workout_upload_view(request,message=""): 'user-agent': 'sanderroosendaal', 'Content-Type': 'application/json'} import urllib - url = "https://log.concept2.com/api/users/%s/results" % (c2userid) + url = "httpvs://log.concept2.com/api/users/%s/results" % (c2userid) response = requests.post(url,headers=headers,data=json.dumps(data)) # response = c2stuff.workout_c2_upload(request.user,w) @@ -4556,7 +4579,7 @@ def strokedatajson(request,id): res = df.to_csv(csvfilename,index_label='index') row.csvfilename = csvfilename row.save() - + datadf = dataprep.dataprep(data,id=row.id,bands=True,barchart=True,otwpower=True) except: return HttpResponse("Not OK") # mangling diff --git a/rowsandall_app/settings.py b/rowsandall_app/settings.py index d608b6af..1e78bec2 100644 --- a/rowsandall_app/settings.py +++ b/rowsandall_app/settings.py @@ -98,7 +98,7 @@ TEMPLATES = [ ] -#CORS_ORIGIN_ALLOW_ALL = True +CORS_ORIGIN_ALLOW_ALL = True WSGI_APPLICATION = 'rowsandall_app.wsgi.application'