Private
Public Access
1
0

oauth working again (CORS allow all)

This commit is contained in:
Sander Roosendaal
2016-11-26 09:24:43 +01:00
parent 3ef5c40be4
commit 70f4a187ab
8 changed files with 603 additions and 37 deletions

279
rowers/#ownapistuff.py# Normal file
View File

@@ -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)

1
rowers/.#ownapistuff.py Normal file
View File

@@ -0,0 +1 @@
E408191@CZ27LT9RCGN72.5176:1479844733

View File

@@ -84,6 +84,16 @@ def rdata(file,rower=rrower()):
return res 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): def testdata(time,distance,pace,spm):
t1 = np.issubdtype(time,np.number) t1 = np.issubdtype(time,np.number)
t2 = np.issubdtype(distance,np.number) t2 = np.issubdtype(distance,np.number)

279
rowers/ownapistuff.py Normal file
View File

@@ -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)

View File

@@ -24,6 +24,11 @@ import numpy as np
from rowers import urls from rowers import urls
from rowers.views import error500_view,error404_view,error400_view,error403_view from rowers.views import error500_view,error404_view,error400_view,error403_view
from dataprep import delete_strokedata
class DjangoTestCase(TestCase, MockTestCase): class DjangoTestCase(TestCase, MockTestCase):
def _pre_setup(self): def _pre_setup(self):
MockTestCase.setUp(self) MockTestCase.setUp(self)
@@ -33,12 +38,12 @@ class DjangoTestCase(TestCase, MockTestCase):
def _post_teardown(self): def _post_teardown(self):
TestCase._post_teardown(self) TestCase._post_teardown(self)
MockTestCase.tearDown(self) MockTestCase.tearDown(self)
delete_strokedata(1)
# Create your tests here. # Create your tests here.
class C2Objects(DjangoTestCase): class C2Objects(DjangoTestCase):
def test_strokedata(self): def test_strokedata(self):
print "C2 strokedata"
with open('rowers/testdata/c2stroketestdata.txt','r') as infile: with open('rowers/testdata/c2stroketestdata.txt','r') as infile:
res = json.load(infile) res = json.load(infile)
@@ -60,7 +65,6 @@ class C2Objects(DjangoTestCase):
class StravaObjects(DjangoTestCase): class StravaObjects(DjangoTestCase):
def test_strokedata(self): def test_strokedata(self):
print "STRAVA strokedata"
timejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r')) timejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
velojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r')) velojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
distancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r')) distancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
@@ -136,7 +140,6 @@ class StravaObjects(DjangoTestCase):
class STObjects(DjangoTestCase): class STObjects(DjangoTestCase):
def test_strokedata(self): def test_strokedata(self):
print "SportTracks strokedata"
with open('rowers/testdata/sporttrackstestdata.txt','r') as infile: with open('rowers/testdata/sporttrackstestdata.txt','r') as infile:
data = json.load(infile) data = json.load(infile)
@@ -152,7 +155,6 @@ class STObjects(DjangoTestCase):
class TestErrorPages(TestCase): class TestErrorPages(TestCase):
def test_error_handlers(self): def test_error_handlers(self):
print "Error Handlers"
self.assertTrue(urls.handler404.endswith('.error404_view')) self.assertTrue(urls.handler404.endswith('.error404_view'))
self.assertTrue(urls.handler500.endswith('.error500_view')) self.assertTrue(urls.handler500.endswith('.error500_view'))
@@ -178,7 +180,6 @@ class WorkoutTests(TestCase):
duration="0:55:00",distance=8000) duration="0:55:00",distance=8000)
def test_checkworkoutuser(self): def test_checkworkoutuser(self):
print "Check Workout User"
u = User.objects.get(username='john') u = User.objects.get(username='john')
r = Rower.objects.get(user=u) r = Rower.objects.get(user=u)
w = Workout.objects.get(user=r) w = Workout.objects.get(user=r)
@@ -198,7 +199,6 @@ class C2Tests(TestCase):
duration="0:55:00",distance=8000) duration="0:55:00",distance=8000)
def c2_notokentest(self): def c2_notokentest(self):
print "C2 No token"
thetoken = c2_open(self.u) thetoken = c2_open(self.u)
# should raise C2NoTokenError # should raise C2NoTokenError
self.assertRaises(C2NoTokenError) self.assertRaises(C2NoTokenError)
@@ -213,7 +213,6 @@ class DataTest(TestCase):
def test_workoutform(self): def test_workoutform(self):
print "Workout Form"
form_data = { form_data = {
'name':'test', 'name':'test',
'date':'2016-05-01', 'date':'2016-05-01',
@@ -227,7 +226,6 @@ class DataTest(TestCase):
self.assertTrue(form.is_valid()) self.assertTrue(form.is_valid())
def test_rower_form_withvalidnumbers(self): def test_rower_form_withvalidnumbers(self):
print "Workout Form with Valid Numbers"
form_data = { form_data = {
'max':192, 'max':192,
'rest':48, 'rest':48,
@@ -243,7 +241,6 @@ class DataTest(TestCase):
def test_rower_form_twoequalvalues(self): def test_rower_form_twoequalvalues(self):
print "Workout Form Error"
form_data = { form_data = {
'max':192, 'max':192,
'rest':48, 'rest':48,
@@ -258,7 +255,6 @@ class DataTest(TestCase):
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_rower_form_abovemaxallowed(self): def test_rower_form_abovemaxallowed(self):
print "Workout Form Error 2"
form_data = { form_data = {
'max':300, 'max':300,
'rest':48, 'rest':48,
@@ -273,7 +269,6 @@ class DataTest(TestCase):
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_rower_form_wrongorder(self): def test_rower_form_wrongorder(self):
print "Workout form error 3"
form_data = { form_data = {
'max':192, 'max':192,
'rest':48, 'rest':48,
@@ -288,7 +283,6 @@ class DataTest(TestCase):
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_rower_form_belowminalloed(self): def test_rower_form_belowminalloed(self):
print "Workout form error 4"
form_data = { form_data = {
'max':192, 'max':192,
'rest':2, 'rest':2,
@@ -303,7 +297,6 @@ class DataTest(TestCase):
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_rower_form_wrongorder2(self): def test_rower_form_wrongorder2(self):
print "Workout form error 5"
form_data = { form_data = {
'max':192, 'max':192,
'rest':48, 'rest':48,
@@ -318,7 +311,6 @@ class DataTest(TestCase):
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
def test_painsled(self): def test_painsled(self):
print "Test Painsled"
filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv'
f = open(filename,'rb') f = open(filename,'rb')
file_data = {'file': SimpleUploadedFile(f.name, f.read())} file_data = {'file': SimpleUploadedFile(f.name, f.read())}
@@ -399,7 +391,6 @@ class ViewTest(TestCase):
self.nu = datetime.datetime.now() self.nu = datetime.datetime.now()
def test_upload_view_notloggedin(self): def test_upload_view_notloggedin(self):
print "Upload not logged in"
response = self.c.post('/rowers/workout/upload/',follow=True) response = self.c.post('/rowers/workout/upload/',follow=True)
@@ -409,7 +400,6 @@ class ViewTest(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_upload_view_sled(self): def test_upload_view_sled(self):
print "Upload painsled"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv'
@@ -452,7 +442,6 @@ class ViewTest(TestCase):
def test_upload_view_notloggedin(self): def test_upload_view_notloggedin(self):
print "Upload not logged in"
response = self.c.post('/rowers/workout/upload/',follow=True) response = self.c.post('/rowers/workout/upload/',follow=True)
@@ -462,7 +451,6 @@ class ViewTest(TestCase):
self.assertEqual(response.status_code, 200) self.assertEqual(response.status_code, 200)
def test_upload_view_sled_negativetime(self): def test_upload_view_sled_negativetime(self):
print "Painsled error"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\tim.csv' filename = 'C:\\python\\rowingdata\\testdata\\tim.csv'
@@ -504,7 +492,6 @@ class ViewTest(TestCase):
def test_upload_view_sled_noname(self): def test_upload_view_sled_noname(self):
print "Upload no name"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv' filename = 'C:\\python\\rowingdata\\testdata\\testdata.csv'
@@ -538,7 +525,6 @@ class ViewTest(TestCase):
def test_upload_view_TCX_CN(self): def test_upload_view_TCX_CN(self):
print "Upload TCX"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\crewnerddata.tcx' filename = 'C:\\python\\rowingdata\\testdata\\crewnerddata.tcx'
@@ -582,7 +568,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_TCX_SpeedCoach2(self): def test_upload_view_TCX_SpeedCoach2(self):
print "Upload TCX 2"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv' filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv'
@@ -613,7 +598,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_TCX_SpeedCoach2(self): def test_upload_view_TCX_SpeedCoach2(self):
print "Upload TCX 3"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv' filename = 'C:\\python\\rowingdata\\testdata\\Speedcoach2example.csv'
@@ -646,7 +630,6 @@ class ViewTest(TestCase):
def test_upload_view_TCX_SpeedCoach2(self): def test_upload_view_TCX_SpeedCoach2(self):
print "Upload TCX 3"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\speedcoach3test3.csv' filename = 'C:\\python\\rowingdata\\testdata\\speedcoach3test3.csv'
@@ -677,7 +660,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_TCX_NoHR(self): def test_upload_view_TCX_NoHR(self):
print "Upload TCX no HR"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\NoHR.tcx' filename = 'C:\\python\\rowingdata\\testdata\\NoHR.tcx'
@@ -708,7 +690,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_TCX_CN(self): def test_upload_view_TCX_CN(self):
print "Upload TCX 10"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\rowinginmotionexample.tcx' filename = 'C:\\python\\rowingdata\\testdata\\rowinginmotionexample.tcx'
@@ -736,7 +717,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_RP(self): def test_upload_view_RP(self):
print "Upload RowPro"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\RP_testdata.csv' filename = 'C:\\python\\rowingdata\\testdata\\RP_testdata.csv'
@@ -764,7 +744,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_Mystery(self): def test_upload_view_Mystery(self):
print "Upload Mystery"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\mystery.csv' filename = 'C:\\python\\rowingdata\\testdata\\mystery.csv'
@@ -792,7 +771,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_RP_interval(self): def test_upload_view_RP_interval(self):
print "Upload RowPro Interval"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\RP_interval.csv' filename = 'C:\\python\\rowingdata\\testdata\\RP_interval.csv'
@@ -820,7 +798,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_sled_desktop(self): def test_upload_view_sled_desktop(self):
print "Upload Painsled Desktop"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\painsled_desktop_example.csv' filename = 'C:\\python\\rowingdata\\testdata\\painsled_desktop_example.csv'
@@ -848,7 +825,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_sled_ergdata(self): def test_upload_view_sled_ergdata(self):
print "Upload Ergdata"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\ergdata_example.csv' filename = 'C:\\python\\rowingdata\\testdata\\ergdata_example.csv'
@@ -876,7 +852,6 @@ class ViewTest(TestCase):
os.remove(f_to_be_deleted) os.remove(f_to_be_deleted)
def test_upload_view_sled_ergstick(self): def test_upload_view_sled_ergstick(self):
print "Upload Ergstick"
self.c.login(username='john',password='koeinsloot') self.c.login(username='john',password='koeinsloot')
filename = 'C:\\python\\rowingdata\\testdata\\ergstick.csv' filename = 'C:\\python\\rowingdata\\testdata\\ergstick.csv'
@@ -953,7 +928,6 @@ class subroutinetests(TestCase):
def c2stuff(self): def c2stuff(self):
print "Test C2 Stuff"
data = c2stuff.createc2workoutdata(self.w) data = c2stuff.createc2workoutdata(self.w)
jsond = json.dumps(data) jsond = json.dumps(data)
data = c2stuff.createc2workoutdata_as_splits(w) data = c2stuff.createc2workoutdata_as_splits(w)
@@ -999,7 +973,6 @@ class PlotTests(TestCase):
def test_ote_plots(self): def test_ote_plots(self):
print "Plots"
w = self.wote w = self.wote
f1 = 'testdata.csv'[:-4] f1 = 'testdata.csv'[:-4]
timestr = strftime("%Y%m%d-%H%M%S") timestr = strftime("%Y%m%d-%H%M%S")
@@ -1107,7 +1080,6 @@ class PlotTests(TestCase):
os.remove(fullpathimagename) os.remove(fullpathimagename)
def test_otw_plots(self): def test_otw_plots(self):
print "Plots 2"
w = self.wotw w = self.wotw
f1 = 'testdata.csv'[:-4] f1 = 'testdata.csv'[:-4]
timestr = strftime("%Y%m%d-%H%M%S") timestr = strftime("%Y%m%d-%H%M%S")

View File

@@ -163,6 +163,8 @@ urlpatterns = [
url(r'^workout/(?P<id>\d+)/flexchart$',views.workout_flexchart3_view), url(r'^workout/(?P<id>\d+)/flexchart$',views.workout_flexchart3_view),
url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/(?P<plottype>\w+.*)$',views.workout_comparison_view2), url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/(?P<plottype>\w+.*)$',views.workout_comparison_view2),
url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view2), url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view2),
url(r'^test\_callback',views.rower_process_testcallback),
] ]
if settings.DEBUG: if settings.DEBUG:

View File

@@ -29,6 +29,8 @@ from c2stuff import C2NoTokenError
from iso8601 import ParseError from iso8601 import ParseError
import stravastuff import stravastuff
import sporttracksstuff 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 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 from rowsandall_app.settings import SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI, SPORTTRACKS_CLIENT_SECRET
import requests import requests
@@ -1169,6 +1171,7 @@ def rower_process_stravacallback(request):
return imports_view(request,successmessage=successmessage) return imports_view(request,successmessage=successmessage)
@login_required() @login_required()
def rower_process_sporttrackscallback(request): def rower_process_sporttrackscallback(request):
code = request.GET['code'] code = request.GET['code']
@@ -1190,6 +1193,26 @@ def rower_process_sporttrackscallback(request):
successmessage = "Tokens stored. Good to go" successmessage = "Tokens stored. Good to go"
return imports_view(request,successmessage=successmessage) 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() @login_required()
def histo_all(request,theuser=0): def histo_all(request,theuser=0):
promember=0 promember=0
@@ -3731,7 +3754,7 @@ def workout_upload_view(request,message=""):
'user-agent': 'sanderroosendaal', 'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json'} 'Content-Type': 'application/json'}
import urllib 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 = requests.post(url,headers=headers,data=json.dumps(data))
# response = c2stuff.workout_c2_upload(request.user,w) # response = c2stuff.workout_c2_upload(request.user,w)
@@ -4556,7 +4579,7 @@ def strokedatajson(request,id):
res = df.to_csv(csvfilename,index_label='index') res = df.to_csv(csvfilename,index_label='index')
row.csvfilename = csvfilename row.csvfilename = csvfilename
row.save() row.save()
datadf = dataprep.dataprep(data,id=row.id,bands=True,barchart=True,otwpower=True)
except: except:
return HttpResponse("Not OK") return HttpResponse("Not OK")
# mangling # mangling

View File

@@ -98,7 +98,7 @@ TEMPLATES = [
] ]
#CORS_ORIGIN_ALLOW_ALL = True CORS_ORIGIN_ALLOW_ALL = True
WSGI_APPLICATION = 'rowsandall_app.wsgi.application' WSGI_APPLICATION = 'rowsandall_app.wsgi.application'