Private
Public Access
1
0

sort of importing ok

This commit is contained in:
2024-12-17 20:13:17 +01:00
parent ada31089ee
commit e808b0c51f
6 changed files with 67 additions and 23 deletions

View File

@@ -324,7 +324,10 @@ class IntervalsIntegration(SyncIntegration):
} }
# first get the folders - we need the folder id for the next call # first get the folders - we need the folder id for the next call
url = self.oauth_data['base_url'] + 'athlete/0/events?category=WORKOUT' oldest = (timezone.now() - timedelta(days=30)).strftime('%Y-%m-%d')
newest = (timezone.now() + timedelta(days=30)).strftime('%Y-%m-%d')
url = self.oauth_data['base_url'] + 'athlete/0/events' #'?category=WORKOUT'
url += '?oldest=' + oldest + '&newest=' + newest
response = requests.get(url, headers=headers) response = requests.get(url, headers=headers)
if response.status_code != 200: if response.status_code != 200:
return [] return []
@@ -350,17 +353,20 @@ class IntervalsIntegration(SyncIntegration):
data = response.json() data = response.json()
# get file from athlete/0/events/{id}/downloadfit # get file from athlete/0/events/{id}/downloadfit
url = self.oauth_data['base_url'] + 'athlete/0/events/' + str(id) + '/downloadfit' if data['category'] == 'WORKOUT':
response = requests.get(url, headers=headers) url = self.oauth_data['base_url'] + 'athlete/0/events/' + str(id) + '/downloadfit'
if response.status_code != 200: response = requests.get(url, headers=headers)
dologging('intervals.icu.log', response.text) if response.status_code != 200:
return 0 dologging('intervals.icu.log', response.text)
return 0
filename = 'media/planned_' + str(id) + '.fit' filename = 'planned_' + str(id) + '.fit'
with open(filename, 'wb') as f: filename2 = 'media/planned_' + str(id) + '.fit'
f.write(response.content) with open(filename2, 'wb') as f:
f.write(response.content)
data['fitfile'] = filename
data['fitfile'] = filename
return data return data

View File

@@ -2688,9 +2688,15 @@ class PlannedSessionStep(models.Model):
targettypes = ( targettypes = (
("Speed", "Speed"), ("Speed", "Speed"),
("SpeedLap", "SpeedLap"),
("HeartRate", "HeartRate"), ("HeartRate", "HeartRate"),
("HeartRateLap", "HeartRateLap"),
("Cadence", "Cadence"), ("Cadence", "Cadence"),
("Power", "Power") ("CadenceLap", "CadenceLap"),
("Power", "Power"),
("PowerLap", "PowerLap"),
("Distance", "Distance"),
("Duration", "Duration"),
) )
manager = models.ForeignKey(User, null=True, on_delete=models.CASCADE) manager = models.ForeignKey(User, null=True, on_delete=models.CASCADE)

View File

@@ -17,6 +17,7 @@
<tr> <tr>
<th>Import</th> <th>Import</th>
<th>Date</th> <th>Date</th>
<th>Name</th>
<th>Description</th> <th>Description</th>
<th>Type</th> <th>Type</th>
<th>Training Load</th> <th>Training Load</th>
@@ -29,6 +30,7 @@
<input type="checkbox" name="session" value="{{ session.id }}"> <input type="checkbox" name="session" value="{{ session.id }}">
</td> </td>
<td>{{ session.start_date_local }}</td> <td>{{ session.start_date_local }}</td>
<td>{{ session.name }}</td>
<td>{{ session.description }}</td> <td>{{ session.description }}</td>
<td>{{ session.type }}</td> <td>{{ session.type }}</td>
<td>{{ session.icu_training_load }}</td> <td>{{ session.icu_training_load }}</td>

View File

@@ -71,6 +71,11 @@
<i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import from Rojabo <i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import from Rojabo
</a> </a>
</li> </li>
<li id="import-intervals">
<a href="/rowers/session/intervalsimport/">
<i class="fas fa-cloud-download fa-fw"></i>&nbsp;Import from Intervals
</a>
</li>
<li id="plan-microcycle"> <li id="plan-microcycle">
<a href="/rowers/sessions/multicreate/?when={{ timeperiod }}"> <a href="/rowers/sessions/multicreate/?when={{ timeperiod }}">
<i class="fas fa-expand fa-fw"></i>Plan Microcycle <i class="fas fa-expand fa-fw"></i>Plan Microcycle

View File

@@ -774,7 +774,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
rscoreperhour = 100.*veloratio rscoreperhour = 100.*veloratio
rscore = rscoreperhour*seconds/3600. rscore = rscoreperhour*seconds/3600.
if targettype == 'Power': if targettype in ['Power','PowerLap']:
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -798,7 +798,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
rscore = 100.*(avgpower/ftp)*seconds/3600. rscore = 100.*(avgpower/ftp)*seconds/3600.
if targettype == 'Cadence': if targettype in ['Cadence','CadenceLap']:
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -820,7 +820,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
seconds = distance/avgspeed seconds = distance/avgspeed
rscore = 60.*float(seconds)/3600. rscore = 60.*float(seconds)/3600.
if targettype == 'Speed': # pragma: no cover if targettype in ['Speed', 'SpeedLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -839,7 +839,7 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
if velomid > 0: if velomid > 0:
seconds = distance/velomid seconds = distance/velomid
if targettype == 'Power': # pragma: no cover if targettype in ['Power','PowerLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -856,12 +856,20 @@ def step_to_time_dist(step, avgspeed=3.2, ftp=200, ftspm=25, ftv=3.7, powerzones
avgpower = targetpower avgpower = targetpower
if valuelow != 0 and valuehigh != 0: if valuelow != 0 and valuehigh != 0:
avgpower = (valuelow+valuehigh)/2. avgpower = (valuelow+valuehigh)/2.
avgspeed = ftv*(avgpower/ftp)**(1./3.) if avgpower < 10 and avgpower > 0:
targetpower = ftp*0.6
elif avgpower > 10 and avgpower < 1000:
targetpower = avgpower*ftp/100.
elif avgpower > 1000:
targetpower = avgpower-1000
avgspeed = ftv*(targetpower/ftp)**(1./3.)
seconds = distance/avgspeed seconds = distance/avgspeed
rscore = 100.*(avgpower/ftp)*seconds/3600. rscore = 100.*(avgpower/ftp)*seconds/3600.
if targettype == 'Cadence': # pragma: no cover if targettype in ['Cadence','CadenceLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -1189,7 +1197,7 @@ def step_to_string(step, short=False):
except KeyError: except KeyError:
targettype = None targettype = None
if targettype == 'HeartRate': # pragma: no cover if targettype in ['HeartRate','HeartRateLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -1207,7 +1215,7 @@ def step_to_string(step, short=False):
l=valuelow - 100, l=valuelow - 100,
h=valuehigh - 100, h=valuehigh - 100,
) )
elif targettype == 'Power': # pragma: no cover elif targettype in ['Power', 'PowerLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)
@@ -1229,7 +1237,7 @@ def step_to_string(step, short=False):
l=valuelow-1000, l=valuelow-1000,
h=valuehigh-1000, h=valuehigh-1000,
) )
elif targettype == 'Speed': # pragma: no cover elif targettype in ['Speed', 'SpeedLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
@@ -1264,7 +1272,7 @@ def step_to_string(step, short=False):
pl=pacestringlow, pl=pacestringlow,
ph=pacestringhigh, ph=pacestringhigh,
) )
elif targettype == 'Cadence': # pragma: no cover elif targettype in ['Cadence','CadenceLap']: # pragma: no cover
value = step.get('targetValue', 0) value = step.get('targetValue', 0)
valuelow = step.get('targetValueLow', 0) valuelow = step.get('targetValueLow', 0)
valuehigh = step.get('targetValueHigh', 0) valuehigh = step.get('targetValueHigh', 0)

View File

@@ -703,10 +703,20 @@ def plannedsession_intervalsimport_view(request, message="", userid=0):
sessionids = [id for id in tdict['session']] sessionids = [id for id in tdict['session']]
for sessionid in sessionids: for sessionid in sessionids:
sessiondata = integration.get_plannedsession(sessionid) sessiondata = integration.get_plannedsession(sessionid)
if sessiondata['description'] is None:
sessiondata['description'] = ''
if sessiondata: if sessiondata:
timetarget = sessiondata['time_target']
if timetarget is None:
timetarget = sessiondata['moving_time']
if timetarget is None:
timetarget = 3600
timetarget = int(timetarget)/60.
ps = PlannedSession( ps = PlannedSession(
name=sessiondata['name'], name=sessiondata['name'],
comment=sessiondata['description'], comment=sessiondata['description'],
sessionmode='time',
sessionvalue=timetarget,
startdate=arrow.get(sessiondata['start_date_local']).datetime, startdate=arrow.get(sessiondata['start_date_local']).datetime,
enddate=arrow.get(sessiondata['end_date_local']).datetime, enddate=arrow.get(sessiondata['end_date_local']).datetime,
preferreddate=arrow.get(sessiondata['start_date_local']).datetime, preferreddate=arrow.get(sessiondata['start_date_local']).datetime,
@@ -714,11 +724,18 @@ def plannedsession_intervalsimport_view(request, message="", userid=0):
sessiontype='session', sessiontype='session',
intervals_icu_id=sessiondata['id'], intervals_icu_id=sessiondata['id'],
manager=request.user, manager=request.user,
fitfile=sessiondata['fitfile'],
) )
ps.save() ps.save()
ps.rower.add(r) ps.rower.add(r)
ps.update_steps() if sessiondata['category'].lower() == 'workout':
ps.fitfile = sessiondata['fitfile']
ps.save()
ps.update_steps()
if sessiondata['category'].lower() == 'target':
ps.sessiontype = 'cycletarget'
ps.sessionvalue = int(sessiondata['time_target'])/60.
ps.enddate = ps.startdate + datetime.timedelta(days=6)
ps.save()
url = reverse('plannedsessions_view') url = reverse('plannedsessions_view')
return HttpResponseRedirect(url) return HttpResponseRedirect(url)