sort of importing ok
This commit is contained in:
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -71,6 +71,11 @@
|
|||||||
<i class="fas fa-cloud-download fa-fw"></i> Import from Rojabo
|
<i class="fas fa-cloud-download fa-fw"></i> 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> 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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user