Private
Public Access
1
0

strava done

This commit is contained in:
Sander Roosendaal
2018-07-02 23:15:21 +02:00
parent afb58ef6e4
commit 3421d1a685
11 changed files with 59 additions and 167 deletions

View File

@@ -197,6 +197,8 @@ def create_async_workout(alldata,user,stravaid,debug=False):
from utils import get_strava_stream
# Get a Strava workout summary data and stroke data by ID
def get_workout(user,stravaid):
r = Rower.objects.get(user=user)
@@ -225,12 +227,15 @@ def get_workout(user,stravaid):
distancejson = get_strava_stream(r,'distance',stravaid)
latlongjson = get_strava_stream(r,'latlng',stravaid)
try:
t = np.array(timejson.json()[0]['data'])
nr_rows = len(t)
d = np.array(distancejson.json()[1]['data'])
if nr_rows == 0:
return (0,"Error: Time data had zero length")
except IndexError:
d = 0*t
# return (0,"Error: No Distance information in the Strava data")
@@ -277,6 +282,7 @@ def get_workout(user,stravaid):
strokelength = velo*60./(spm)
strokelength[np.isinf(strokelength)] = 0.0
pace = 500./(1.0*velo2)
pace[np.isinf(pace)] = 0.0
@@ -290,6 +296,7 @@ def get_workout(user,stravaid):
'strokelength':strokelength,
})
# startdatetime = datetime.datetime.strptime(startdatetime,"%Y-%m-%d-%H:%M:%S")
return [workoutsummary,df]
@@ -488,6 +495,7 @@ def add_workout_from_data(user,importid,data,strokedata,
df.sort_values(by='TimeStamp (sec)',ascending=True)
timestr = strftime("%Y%m%d-%H%M%S")
@@ -510,7 +518,6 @@ def add_workout_from_data(user,importid,data,strokedata,
)
return id,message
def workout_strava_upload(user,w):

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -61,6 +61,23 @@ def mocked_requests(*args, **kwargs):
c2workoutlist = json.load(open('rowers/testdata/c2workoutlist.txt'))
stravaworkoutlist = json.load(open('rowers/testdata/stravaworkoutlist.txt'))
stravasummaryjson = json.load(open('rowers/testdata/stravaworkoutsummary.txt','r'))
stravatimejson = json.load(open('rowers/testdata/stravatimetestdata.txt','r'))
stravavelojson = json.load(open('rowers/testdata/stravavelotestdata.txt','r'))
stravadistancejson = json.load(open('rowers/testdata/stravadistancetestdata.txt','r'))
stravalatlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
stravahrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
stravaspmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
stravastreamjson = {
'time':stravatimejson,
'velocity_smooth':stravavelojson,
'distance':stravadistancejson,
'latlng':stravalatlongjson,
'heartrate':stravahrjson,
'cadence':stravaspmjson,
}
class MockResponse:
def __init__(self, json_data, status_code):
@@ -103,9 +120,21 @@ def mocked_requests(*args, **kwargs):
stravaworkoutlistregex = '.*?strava\.com\/api\/v3\/athlete\/activities'
stravaworkoutlisttester = re.compile(stravaworkoutlistregex)
stravastreamregex = '.*?strava\.com\/api\/v3\/activities\/\d+\/streams\/(\w.*?)\?'
stravastreamtester = re.compile(stravastreamregex)
stravasummaryregex = '.*?strava\.com\/api\/v3\/activities\/\d+$'
stravasummarytester = re.compile(stravasummaryregex)
if stravatester.match(args[0]):
if stravaworkoutlisttester.match(args[0]):
return MockResponse(stravaworkoutlist,200)
if stravastreamtester.match(args[0]):
metric = stravastreamtester.match(args[0]).group(1)
json_data = stravastreamjson[metric]
return MockResponse(json_data,200)
elif stravasummarytester.match(args[0]):
return MockResponse(stravasummaryjson,200)
if c2tester.match(args[0]):
if c2strokestester.match(args[0]):
@@ -245,170 +274,22 @@ class StravaObjects(DjangoTestCase):
self.r.save()
self.c.login(username='john',password='koeinsloot')
@patch('rowers.stravastuff.requests.post', side_effects=mocked_requests)
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
def test_strava_list(self, mock_get):
response = self.c.get('/rowers/workout/stravaimport',follow=True)
response = self.c.get('/rowers/workout/stravaimport/',follow=True)
self.assertEqual(response.status_code,200)
@patch('rowers.utils.requests.get', side_effect=mocked_requests)
def test_strava_import(self, mock_get):
response = self.c.get('/rowers/workout/stravaimport/12',follow=True)
def test_strokedata(self):
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'))
latlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
hrjson = json.load(open('rowers/testdata/stravahrtestdata.txt','r'))
spmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
workoutsummary = json.load(open('rowers/testdata/stravasummarytestdata.txt','r'))
workoutsummary['timezone'] = "Etc/UTC"
startdatetime = workoutsummary['start_date']
self.assertRedirects(response,
expected_url='/rowers/workout/1/edit',
status_code=301,target_status_code=200)
t = np.array(timejson[0]['data'])
d = np.array(distancejson[0]['data'])
nr_rows = len(t)
try:
spm = np.array( spmjson[1]['data'])
except IndexError:
spm = np.zeros(nr_rows)
try:
hr = np.array(hrjson[1]['data'])
except IndexError:
hr = np.zeros(nr_rows)
try:
velo = np.array(velojson[1]['data'])
except IndexError:
velo = np.zeros(nr_rows)
dt = np.diff(t).mean()
wsize = round(5./dt)
from stravastuff import ewmovingaverage
velo2 = ewmovingaverage(velo,wsize)
coords = np.array(latlongjson[0]['data'])
try:
lat = coords[:,0]
lon = coords[:,1]
except IndexError:
lat = np.zeros(len(t))
lon = np.zeros(len(t))
strokelength = velo*60./(spm)
strokelength[np.isinf(strokelength)] = 0.0
pace = 500./(1.0*velo2)
pace[np.isinf(pace)] = 0.0
strokedata = pd.DataFrame({'t':10*t,
'd':10*d,
'p':10*pace,
'spm':spm,
'hr':hr,
'lat':lat,
'lon':lon,
'strokelength':strokelength,
})
from rowers.views import add_workout_from_strokedata
u = User.objects.create_user('john',
'sander@ds.ds',
'koeinsloot')
u.first_name = 'John'
u.last_name = 'Sander'
u.save()
r = Rower.objects.create(user=u,gdproptin=True,
gdproptindate=timezone.now()
)
res = add_workout_from_strokedata(u,1,workoutsummary,strokedata,
source='strava')
def test_strokedatanohr(self):
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'))
latlongjson = json.load(open('rowers/testdata/stravalatlongtestdata.txt','r'))
hrjson = json.load(open('rowers/testdata/stravahrtestnodata.txt','r'))
spmjson = json.load(open('rowers/testdata/stravaspmtestdata.txt','r'))
workoutsummary = json.load(open('rowers/testdata/stravasummarytestdata.txt','r'))
workoutsummary['timezone'] = "Etc/UTC"
startdatetime = workoutsummary['start_date']
t = np.array(timejson[0]['data'])
d = np.array(distancejson[0]['data'])
nr_rows = len(t)
try:
spm = np.array( spmjson[1]['data'])
except IndexError:
spm = np.zeros(nr_rows)
try:
hr = np.array(hrjson[1]['data'])
except IndexError:
hr = np.zeros(nr_rows)
try:
velo = np.array(velojson[1]['data'])
except IndexError:
velo = np.zeros(nr_rows)
dt = np.diff(t).mean()
wsize = round(5./dt)
from stravastuff import ewmovingaverage
velo2 = ewmovingaverage(velo,wsize)
coords = np.array(latlongjson[0]['data'])
try:
lat = coords[:,0]
lon = coords[:,1]
except IndexError:
lat = np.zeros(len(t))
lon = np.zeros(len(t))
strokelength = velo*60./(spm)
strokelength[np.isinf(strokelength)] = 0.0
pace = 500./(1.0*velo2)
pace[np.isinf(pace)] = 0.0
strokedata = pd.DataFrame({'t':10*t,
'd':10*d,
'p':10*pace,
'spm':spm,
'hr':hr,
'lat':lat,
'lon':lon,
'strokelength':strokelength,
})
from rowers.views import add_workout_from_strokedata
u = User.objects.create_user('john',
'sander@ds.ds',
'koeinsloot')
u.first_name = 'John'
u.last_name = 'Sander'
u.save()
r = Rower.objects.create(user=u,gdproptin=True,
gdproptindate=timezone.now()
)
res = add_workout_from_strokedata(u,1,workoutsummary,strokedata,
source='strava')
self.assertEqual(response.status_code, 200)

View File

@@ -445,4 +445,7 @@ def get_strava_stream(r,metric,stravaid,series_type='time',fetchresolution='high
metric=metric
)
return requests.get(url,headers=headers)
s = requests.get(url,headers=headers)
return s