Merge branch 'release/v18.8.5'
This commit is contained in:
@@ -2729,6 +2729,7 @@ class PlannedSession(models.Model):
|
||||
dct = trainingparser.parsetodict(self.interval_string)
|
||||
dct = [item for item in dct if item['value'] != 0]
|
||||
dct = trainingparser.tofitdict(dct)
|
||||
|
||||
for step in dct['steps']:
|
||||
try:
|
||||
step['targetValue'] = int(step['targetValue'])
|
||||
|
||||
@@ -169,6 +169,68 @@ aweekago = timezone.now()-timedelta(days=7)
|
||||
today = timezone.now()
|
||||
a_week_from_now = timezone.now()+timedelta(days=7)
|
||||
|
||||
def stepsconvert(rojabo_steps, startid = 0, warmup = False, cooldown = False):
|
||||
workout_steps = []
|
||||
for step in rojabo_steps:
|
||||
durationtype = 'Time'
|
||||
durationvalue = 10
|
||||
if step['duration_type'] == 'seconds':
|
||||
durationvalue = 1000*step['duration_value'] # milliseconds
|
||||
if step['duration_type'] == 'meters':
|
||||
durationtype = 'Distance'
|
||||
durationvalue = step['duration_value']*100 # centimeters
|
||||
elif step['duration_type'] == 'strokes':
|
||||
durationtype = 'Time'
|
||||
try:
|
||||
durationvalue = int(60.*step['duration_value']/step['stroke_rate'])
|
||||
except TypeError:
|
||||
try:
|
||||
durationvalue = step['time']*1000
|
||||
except KeyError:
|
||||
durationvalue = 1000
|
||||
|
||||
intensity = 'Active'
|
||||
if warmup:
|
||||
intensity = 'Warmup'
|
||||
if cooldown:
|
||||
intensity = 'Cooldown'
|
||||
targettype = 'Power'
|
||||
targetvalue = step['target_value']
|
||||
if targetvalue is None:
|
||||
targettype = 'Cadence'
|
||||
targetvalue = step['stroke_rate']
|
||||
if targettype == 'Power':
|
||||
targetvalue += 1000
|
||||
|
||||
if step['target_type'] == 'rest':
|
||||
targettype = ''
|
||||
intensity = 'Rest'
|
||||
targetvalue = 0
|
||||
|
||||
description = step['description']
|
||||
|
||||
if step['stroke_rate'] is not None:
|
||||
description = description +' Stroke Rate {cadence} SPM'.format(
|
||||
cadence = step['stroke_rate']
|
||||
)
|
||||
|
||||
newstep = {
|
||||
'stepId': startid,
|
||||
'wkt_step_name': step['id'],
|
||||
'durationType': durationtype,
|
||||
'durationValue': durationvalue,
|
||||
'targetType': targettype,
|
||||
'targetValue': targetvalue,
|
||||
'intensity': intensity,
|
||||
'description': description
|
||||
}
|
||||
|
||||
startid += 1
|
||||
workout_steps.append(newstep)
|
||||
|
||||
return workout_steps
|
||||
|
||||
|
||||
def get_rojabo_workout_list(user,startdate=aweekago,enddate=a_week_from_now):
|
||||
r = Rower.objects.get(user=user)
|
||||
if (r.rojabo_token == '') or (r.rojabo_token is None): # pragma: no cover
|
||||
@@ -190,7 +252,7 @@ def get_rojabo_workout_list(user,startdate=aweekago,enddate=a_week_from_now):
|
||||
date2 = enddate.strftime('%Y-%m-%d')
|
||||
|
||||
|
||||
url = ROJABO_OAUTH_LOCATION+'api/v1/training_sessions?from={date1}&to={date2}'.format(date1=date1,date2=date2)
|
||||
url = ROJABO_OAUTH_LOCATION+'api/v2/training_sessions?from={date1}&to={date2}'.format(date1=date1,date2=date2)
|
||||
|
||||
response = requests.get(url, headers=headers)
|
||||
|
||||
|
||||
@@ -734,6 +734,9 @@ def mocked_requests(*args, **kwargs):
|
||||
with open('rowers/tests/testdata/c2_timezone.json','r') as infile:
|
||||
c2timezoneworkoutdata = json.load(infile)
|
||||
|
||||
with open('rowers/tests/testdata/rojabolist.json','r') as infile:
|
||||
rojabodata = json.load(infile)
|
||||
|
||||
with open('rowers/tests/testdata/c2_timezone2.json','r') as infile:
|
||||
c2timezoneworkoutdata2 = json.load(infile)
|
||||
|
||||
@@ -1045,6 +1048,9 @@ def mocked_requests(*args, **kwargs):
|
||||
|
||||
return MockResponse(jsonresponse,200)
|
||||
|
||||
if 'rojabo' in args[0]:
|
||||
return MockResponse(rojabodata, 200)
|
||||
|
||||
|
||||
polartester = re.compile(r'.*?polaraccesslink\.com')
|
||||
polarremotetester = re.compile(r'.*?polarremote\.com')
|
||||
|
||||
@@ -66,6 +66,7 @@ from mock import Mock, patch
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
import rowers.sporttracksstuff as sporttracksstuff
|
||||
import rowers.rojabo_stuff as rojabo_stuff
|
||||
|
||||
from django.urls import reverse, reverse_lazy
|
||||
|
||||
|
||||
@@ -21,11 +21,64 @@ import urllib
|
||||
import json
|
||||
|
||||
import rowers.utils as utils
|
||||
import rowers.rojabo_stuff as rojabo_stuff
|
||||
|
||||
|
||||
from django.db import transaction
|
||||
import rowers.garmin_stuff as gs
|
||||
|
||||
@pytest.mark.django_db
|
||||
@override_settings(TESTING=True)
|
||||
class RojaboObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,surveydone=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
self.r.rojabo_token = '12'
|
||||
self.r.rojabo_refreshtoken = 'ab'
|
||||
self.r.rojabo_tokenexpirydate = arrow.get(datetime.datetime.now()+datetime.timedelta(days=1)).datetime
|
||||
self.r.defaulttimezone = 'Europe/Prague'
|
||||
self.r.rowerplan = 'plan'
|
||||
self.r.save()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
@patch('rowers.rojabo_stuff.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.rojabo_stuff.requests.post', side_effect=mocked_requests)
|
||||
def test_rojabo_import(self, mock_get, mock_post):
|
||||
url = '/rowers/session/rojaboimport/'
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
form_data = {
|
||||
'csrfmiddlewaretoken': ['xalRrf8y7P2Hhobges9QC4aKCWg4l06gexDc8g2DeuVExgadfk4YhV8oSE1Yu43U'],
|
||||
'sessions': ['Import selected sessions'],
|
||||
'sessionid': ['862172']
|
||||
}
|
||||
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
pss = PlannedSession.objects.filter(manager=self.r.user)
|
||||
self.assertEqual(pss.count(),1)
|
||||
|
||||
ps = pss[0]
|
||||
self.assertEqual(ps.approximate_duration,57)
|
||||
|
||||
self.assertEqual(len(ps.steps['steps']),20)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@override_settings(TESTING=True)
|
||||
class GarminObjects(DjangoTestCase):
|
||||
|
||||
@@ -1062,7 +1062,7 @@ def workout_rojaboimport_view(request, message="", userid=0):
|
||||
if (res.status_code != 200): # pragma: no cover
|
||||
if (res.status_code == 401):
|
||||
r = getrower(request.user)
|
||||
if (r.stravatoken == '') or (r.stravatoken is None):
|
||||
if (r.rojabo_token == '') or (r.rojabo_token is None):
|
||||
s = "Token doesn't exist. Need to authorize"
|
||||
return HttpResponseRedirect("/rowers/me/rojaboauthorize/")
|
||||
message = "Something went wrong in workout_rojaboimport_view"
|
||||
@@ -1111,6 +1111,39 @@ def workout_rojaboimport_view(request, message="", userid=0):
|
||||
ps.rower.add(r)
|
||||
ps.tags.add('ROJABO')
|
||||
ps.save()
|
||||
# get steps if there are any
|
||||
steps = []
|
||||
try:
|
||||
steps = steps+rojabo_stuff.stepsconvert(
|
||||
item['warm_up']['steps'],
|
||||
warmup=True
|
||||
)
|
||||
except KeyError:
|
||||
pass
|
||||
try:
|
||||
steps = steps + rojabo_stuff.stepsconvert(
|
||||
item['primary']['steps'],
|
||||
startid=len(steps)
|
||||
)
|
||||
except KeyError:
|
||||
pass
|
||||
try:
|
||||
steps = steps + rojabo_stuff.stepsconvert(
|
||||
item['cool_down']['steps'],
|
||||
cooldown=True,
|
||||
startid=len(steps))
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
if steps:
|
||||
ps.steps = {
|
||||
'name':'',
|
||||
'sport':'rowing',
|
||||
'filename':'',
|
||||
'steps': steps,
|
||||
}
|
||||
ps.save()
|
||||
|
||||
messages.info(request,'Saved planned session {id}'.format(id=ps.id))
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
@@ -5,5 +5,8 @@ DATABASES = {
|
||||
'ENGINE': 'django.db.backends.sqlite3',
|
||||
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
|
||||
'HOST': 'localhost',
|
||||
'USER': '',
|
||||
'PORT': 1,
|
||||
'PASSWORD': 'aap'
|
||||
},
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user