Merge branch 'release/v23.6.12'
This commit is contained in:
@@ -1521,7 +1521,10 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
||||
cntr = Workout.objects.filter(user=r, workouttype__in=otwtypes,
|
||||
startdatetime__gt=tz.now()-tz.timedelta(days=42),
|
||||
duplicate=False).count()
|
||||
new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0)
|
||||
try:
|
||||
new_value = (cntr*r.running_wps_erg + row.df['driveenergy'].mean())/(cntr+1.0)
|
||||
except TypeError:
|
||||
new_value = r.running_wps
|
||||
if not (math.isnan(new_value) or math.isinf(new_value) or new_value == 0):
|
||||
r.running_wps = new_value
|
||||
elif not (math.isnan(r.running_wps) or math.isinf(r.running_wps) or r.running_wps == 0):
|
||||
|
||||
@@ -3759,11 +3759,19 @@ def handle_intervals_getworkout(rower, intervalstoken, workoutid, debug=False, *
|
||||
|
||||
data = response.json()
|
||||
|
||||
try:
|
||||
workoutsource = data['device_name']
|
||||
except KeyError:
|
||||
workoutsource = 'intervals.icu'
|
||||
|
||||
try:
|
||||
title = data['name']
|
||||
except KeyError:
|
||||
title = 'Intervals workout'
|
||||
|
||||
if 'garmin' in workoutsource.lower():
|
||||
title = 'Garmin: '+ title
|
||||
|
||||
try:
|
||||
workouttype = intervalsmappinginv[data['type']]
|
||||
except KeyError:
|
||||
@@ -3825,6 +3833,7 @@ def handle_intervals_getworkout(rower, intervalstoken, workoutid, debug=False, *
|
||||
'user': rower.user.id,
|
||||
'boattype': '1x',
|
||||
'workouttype': workouttype,
|
||||
'workoutsource': workoutsource,
|
||||
'file': fit_filename,
|
||||
'intervalsid': workoutid,
|
||||
'title': title,
|
||||
|
||||
@@ -955,6 +955,9 @@ def mocked_requests(*args, **kwargs):
|
||||
with open('rowers/tests/testdata/tpuploadresponse.txt','r') as f:
|
||||
tpuploadresponse = json.load(f)
|
||||
|
||||
with open('rowers/tests/testdata/intervals.json','r') as f:
|
||||
intervalsjson = json.load(f)
|
||||
|
||||
stravastreamjson = {
|
||||
'time':stravatimejson,
|
||||
'velocity_smooth':stravavelojson,
|
||||
@@ -1136,6 +1139,7 @@ def mocked_requests(*args, **kwargs):
|
||||
garmintester = re.compile(r'.*?garmin\.com')
|
||||
fakturoidtester = re.compile(r'.*?fakturoid\.cz')
|
||||
idokladtester = re.compile(r'.*?idoklad\.cz')
|
||||
intervalstester = re.compile(r'.*?intervals\.icu')
|
||||
|
||||
polarlistregex = r'.*?polaraccesslink\.com\/.*\/(\d+)$'
|
||||
polarlisttester = re.compile(polarlistregex)
|
||||
@@ -1441,10 +1445,6 @@ def mocked_requests(*args, **kwargs):
|
||||
pass
|
||||
json_data = rp3workoutlist
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if stravatester.match(args[0]):
|
||||
if stravaworkoutlisttester.match(args[0]):
|
||||
@@ -1559,6 +1559,10 @@ def mocked_requests(*args, **kwargs):
|
||||
]
|
||||
return MockResponse(response,200)
|
||||
|
||||
if intervalstester.match(args[0]):
|
||||
return MockResponse(intervalsjson,200)
|
||||
|
||||
|
||||
return MockResponse(None,404)
|
||||
|
||||
class MockEmailMessage:
|
||||
|
||||
@@ -27,6 +27,82 @@ import rowers.garmin_stuff as gs
|
||||
import rowers.integrations.strava as strava
|
||||
from rowers.nkimportutils import *
|
||||
|
||||
@pytest.mark.django_db
|
||||
@override_settings(TESTING=True)
|
||||
class IntervalsObjects(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, ftpset=True,surveydone=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.r.save()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
|
||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||
hrut1=self.r.ut1,hrat=self.r.at,
|
||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||
row = rdata(csvfile=filename,rower=rr)
|
||||
totaldist = row.df['cum_dist'].max()
|
||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||
totaltime = totaltime+row.df.loc[:,' ElapsedTime (sec)'].iloc[0]
|
||||
|
||||
|
||||
hours = int(totaltime/3600.)
|
||||
minutes = int((totaltime - 3600.*hours)/60.)
|
||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||
|
||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||
|
||||
|
||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||
|
||||
self.w = Workout.objects.create(
|
||||
name='testworkout',workouttype='water',
|
||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=workoutstarttime,
|
||||
startdatetime=row.rowdatetime,
|
||||
duration=duration,distance=totaldist,
|
||||
csvfilename=filename
|
||||
)
|
||||
self.u2 = User.objects.create_user('john2',
|
||||
'ba@ds.ds',
|
||||
'koeinsloot2')
|
||||
self.u2.first_name = 'John'
|
||||
self.u2.last_name = 'Sander2'
|
||||
self.u2.save()
|
||||
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
self.w2 = Workout.objects.create(
|
||||
name='testworkout',workouttype='water',
|
||||
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=workoutstarttime,
|
||||
startdatetime=row.rowdatetime,
|
||||
duration=duration,distance=totaldist,
|
||||
csvfilename=filename
|
||||
)
|
||||
|
||||
@patch('rowers.tasks.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.tasks.requests.post', side_effect=mocked_requests)
|
||||
def test_intervals_import(self, mock_get, mock_post):
|
||||
res = tasks.handle_intervals_getworkout(self.r,
|
||||
'12345',
|
||||
'i101042071')
|
||||
self.assertEqual(res,1)
|
||||
|
||||
@pytest.mark.django_db
|
||||
@override_settings(TESTING=True)
|
||||
class RojaboObjects(DjangoTestCase):
|
||||
|
||||
@@ -120,7 +120,7 @@ class OtherUnitTests(TestCase):
|
||||
|
||||
|
||||
def test_summaryfromsplitdata(self):
|
||||
with open('rowers/tests/testdata/c2splits.json','r') as f:
|
||||
with open('rowers/tests/c2jsonintervaldata.txt','r') as f:
|
||||
s = f.read()
|
||||
data = json.loads(s)
|
||||
splitdata = data['workout']['intervals']
|
||||
|
||||
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Binary file not shown.
@@ -833,6 +833,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
|
||||
avgpower = targetpower
|
||||
if valuelow != 0 and valuehigh != 0: # pragma: no cover
|
||||
avgpower = (valuelow+valuehigh)/2.
|
||||
targetpower = ftp*0.6
|
||||
if avgpower < 10 and avgpower > 0:
|
||||
targetpower = ftp*0.6
|
||||
elif avgpower > 10 and avgpower < 1000:
|
||||
|
||||
Reference in New Issue
Block a user