Private
Public Access
1
0

delete functionality

This commit is contained in:
2024-12-21 14:57:31 +01:00
parent 75314a5da3
commit 81b2b78f7c
5 changed files with 67 additions and 7 deletions

View File

@@ -380,16 +380,34 @@ class IntervalsIntegration(SyncIntegration):
stepstext = ps.steps_intervals()
category = 'WORKOUT'
startdate = ps.preferreddate.strftime('%Y-%m-%dT%H:%M:%S')
enddate = ps.preferreddate.strftime('%Y-%m-%d') + 'T23:59:59'
if ps.sessiontype == 'cycletarget':
category = 'TARGET'
startdate = ps.startdate.strftime('%Y-%m-%dT%H:%M:%S')
enddate = ps.enddate.strftime('%Y-%m-%d') + 'T23:59:59'
data = {
"start_date_local": ps.preferreddate.strftime('%Y-%m-%dT%H:%M:%S'),
"start_date_local": startdate,
"type": mytypes.intervalsmapping[ps.sessionsport],
"category": "WORKOUT",
"end_date_local": ps.preferreddate.strftime('%Y-%m-%d') + 'T23:59:59',
"category": category,
"end_date_local": enddate,
"name": ps.name,
"description": stepstext,
"indoor": ps.sessionsport in mytypes.ergtypes,
}
if ps.sessiontype == 'cycletarget':
if ps.sessionmode == 'time':
data['time_target'] = ps.sessionvalue*60
elif ps.sessionmode == 'distance':
data['distance_target'] = ps.sessionvalue
elif ps.sessionmode == 'rScore':
data['load_target'] = ps.sessionvalue
elif ps.sessionmode == 'Trimp':
data['load_target'] = ps.sessionvalue/2.
url = self.oauth_data['base_url'] + 'athlete/0/events'
response = requests.post(url, headers=headers, json=data)
@@ -399,8 +417,28 @@ class IntervalsIntegration(SyncIntegration):
data = response.json()
id = data['id']
ps.intervalsid = id
ps.intervals_icu_id = id
ps.save()
return id
def plannedsession_delete(self, ps, *args, **kwargs):
_ = self.open()
r = self.rower
headers = {
'Authorization': 'Bearer ' + r.intervals_token,
}
url = self.oauth_data['base_url'] + 'athlete/0/events/' + str(ps.intervals_icu_id)
response = requests.delete(url, headers=headers)
if response.status_code != 200:
dologging('intervals.icu.log', response.text)
return 0
ps.intervals_icu_id = None
ps.save()
return 1

View File

@@ -5,7 +5,8 @@ from rowers.courseutils import coordinate_in_path
from rowers.utils import (
# workflowleftpanel, workflowmiddlepanel,
defaultleft, defaultmiddle, landingpages, landingpages2,
steps_read_fit, steps_write_fit, steps_read_intervals, ps_dict_order, uniqify
steps_read_fit, steps_write_fit, steps_read_intervals, ps_dict_order, uniqify,
dologging
)
from rowers.metrics import axlabels
from rowers.utils import geo_distance, move_one_meter
@@ -1174,6 +1175,7 @@ class Rower(models.Model):
c2_auto_import = models.BooleanField(default=False)
intervals_auto_export = models.BooleanField(default=False)
intervals_auto_import = models.BooleanField(default=False)
intervals_delete_plannedsession = models.BooleanField(default=False, verbose_name="Deleting planned session deletes it on intervals.icu")
intervals_resample_to_1s = models.BooleanField(default=False, verbose_name='Resample to 1s on export')
sporttrackstoken = models.CharField(
default='', max_length=200, blank=True, null=True)
@@ -1246,6 +1248,7 @@ class Rower(models.Model):
intervals_token = models.CharField(
default='', max_length=200, blank=True, null=True)
intervals_owner_id = models.CharField(default='', max_length=200,blank=True, null=True)
privacychoices = (
('visible', 'Visible'),
@@ -2952,6 +2955,19 @@ class PlannedSession(models.Model):
s = steps_read_intervals(settings.MEDIA_ROOT+'/'+self.fitfile.name)
return s
def delete(self, *args, **kwargs):
r = self.manager.rower
if self.intervals_icu_id and r.intervals_delete_plannedsession:
headers = {
'Authorization': 'Bearer '+ r.intervals_token
}
url = 'https://intervals.icu/api/v1/athlete/0/events/'+str(self.intervals_icu_id)
response = requests.delete(url, headers=headers)
if response.status_code != 200:
dologging('intervals.icu.log', response.text)
super(PlannedSession, self).delete(*args, **kwargs)
def save(self, *args, **kwargs):
if self.sessionvalue <= 0: # pragma: no cover
self.sessionvalue = 1
@@ -4628,6 +4644,7 @@ class RowerExportForm(ModelForm):
'rp3_auto_import',
'intervals_auto_import',
'intervals_auto_export',
'intervals_delete_plannedsession',
'intervals_resample_to_1s',
'imports_are_private'
]
@@ -4656,6 +4673,7 @@ class RowerExportFormIntervals(ModelForm):
'intervals_auto_import',
'intervals_auto_export',
'intervals_resample_to_1s',
'intervals_delete_plannedsession',
]
class RowerExportFormGarmin(ModelForm):

View File

@@ -23,8 +23,8 @@
{% else %}
<a href="/rowers/sessions/{{ psdict.id.1 }}/togarmin/?next={{ request.path|urlencode }}"><i class="fas fa-watch-fitness fa-fw"></i> Export to Garmin</a>
{% endif %}
{% if ps.intervalsid != "" %}
<a href="https://intervals.icu/"><i class="fa-solid fa-wave-pulse"></i> Exported to intervals.icu</a>
{% if plannedsession.intervals_icu_id %}
<a href="https://intervals.icu/?w={{ plannedsession.preferreddate }}"><i class="fa-solid fa-wave-pulse"></i> Exported to intervals.icu</a>
{% else %}
<a href="/rowers/sessions/{{ psdict.id.1 }}/tointervals/?next={{ request.path|urlencode }}"><i class="fa-solid fa-wave-pulse fa-fw"></i> Export to intervals.icu</a>
{% endif %}

View File

@@ -1042,6 +1042,10 @@ def mocked_requests(*args, **kwargs):
class MockSession:
def __init__(self):
self.status_code = 200
self.text = "- 20m 200W"
class headers:
def __init__(self,*args,**kwargs): # pragma: no cover
pass

Binary file not shown.