Private
Public Access
1
0

Merge branch 'release/v23.6.12'

This commit is contained in:
2025-10-24 16:15:59 +02:00
7 changed files with 99 additions and 6 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -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']

Binary file not shown.

View File

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