Private
Public Access
1
0

import now behaving

This commit is contained in:
2024-12-09 21:53:34 +01:00
parent 950f6ffb0f
commit a0b13f3f3d
7 changed files with 80 additions and 15 deletions

View File

@@ -1572,6 +1572,13 @@ def new_workout_from_file(r, f2,
# Get workout type from fit & tcx # Get workout type from fit & tcx
if (fileformat == 'fit'): # pragma: no cover if (fileformat == 'fit'): # pragma: no cover
workouttype = get_workouttype_from_fit(f2, workouttype=workouttype) workouttype = get_workouttype_from_fit(f2, workouttype=workouttype)
new_title = get_title_from_fit(f2)
if new_title:
title = new_title
new_notes = get_notes_from_fit(f2)
if new_notes:
notes = new_notes
# if (fileformat == 'tcx'): # if (fileformat == 'tcx'):
# workouttype_from_tcx = get_workouttype_from_tcx(f2,workouttype=workouttype) # workouttype_from_tcx = get_workouttype_from_tcx(f2,workouttype=workouttype)
# if workouttype != 'rower' and workouttype_from_tcx not in mytypes.otwtypes: # if workouttype != 'rower' and workouttype_from_tcx not in mytypes.otwtypes:

View File

@@ -1350,6 +1350,39 @@ def handle_nonpainsled(f2, fileformat, summary='', startdatetime='', empowerfirm
# Create new workout from file and store it in the database # Create new workout from file and store it in the database
# This routine should be used everywhere in views.py # This routine should be used everywhere in views.py
def get_notes_from_fit(filename):
try:
fitfile = FitFile(filename, check_crc=False)
except FitHeaderError: # pragma: no cover
return ''
records = fitfile.messages
notes = ''
for record in records:
if record.name == 'session':
try:
notes = ' '.join(record.get_values()['description'].split())
except KeyError:
pass
return notes
def get_title_from_fit(filename):
try:
fitfile = FitFile(filename, check_crc=False)
except FitHeaderError: # pragma: no cover
return ''
records = fitfile.messages
title = ''
for record in records:
if record.name == 'workout':
try:
title = ' '.join(record.get_values()['wkt_name'].split())
except KeyError:
pass
return title
def get_workouttype_from_fit(filename, workouttype='water'): def get_workouttype_from_fit(filename, workouttype='water'):
try: try:
@@ -1359,17 +1392,27 @@ def get_workouttype_from_fit(filename, workouttype='water'):
records = fitfile.messages records = fitfile.messages
fittype = 'rowing' fittype = 'rowing'
subsporttype = ''
for record in records: for record in records:
if record.name in ['sport', 'lap']: if record.name in ['sport', 'lap','session']:
try: try:
fittype = record.get_values()['sport'].lower() fittype = record.get_values()['sport'].lower()
try:
subsporttype = record.get_values()['sub_sport'].lower()
except KeyError:
subsporttype = ''
except (KeyError, AttributeError): # pragma: no cover except (KeyError, AttributeError): # pragma: no cover
return 'water' pass
try: if subsporttype:
workouttype = mytypes.fitmappinginv[fittype] try:
return workouttype workouttype = mytypes.fitmappinginv[subsporttype]
except KeyError: # pragma: no cover except KeyError:
return workouttype pass
else:
try:
workouttype = mytypes.fitmappinginv[fittype]
except KeyError:
pass
return workouttype return workouttype

View File

@@ -107,8 +107,20 @@ class IntervalsIntegration(SyncIntegration):
def get_workout_list(self, *args, **kwargs) -> int: def get_workout_list(self, *args, **kwargs) -> int:
url = self.oauth_data['base_url'] + 'athlete/0/activities?' url = self.oauth_data['base_url'] + 'athlete/0/activities?'
startdate = timezone.now() - timedelta(days=365) startdate = timezone.now() - timedelta(days=30)
enddate = timezone.now() + timedelta(days=1) enddate = timezone.now() + timedelta(days=1)
startdatestring = kwargs.get("startdate","")
enddatestring = kwargs.get("enddate","")
try:
startdate = arrow.get(startdatestring).datetime
except:
pass
try:
enddate = arrow.get(enddatestring).datetime
except:
pass
url += 'oldest=' + startdate.strftime('%Y-%m-%d') + '&newest=' + enddate.strftime('%Y-%m-%d') url += 'oldest=' + startdate.strftime('%Y-%m-%d') + '&newest=' + enddate.strftime('%Y-%m-%d')
headers = { headers = {
'accept': '*/*', 'accept': '*/*',
@@ -122,7 +134,6 @@ class IntervalsIntegration(SyncIntegration):
data = response.json() data = response.json()
known_interval_ids = get_known_ids(self.rower, 'intervalsid') known_interval_ids = get_known_ids(self.rower, 'intervalsid')
workouts = [] workouts = []
for item in data: for item in data:

View File

@@ -3697,7 +3697,7 @@ class Workout(models.Model):
uploadedtogarmin = models.BigIntegerField(default=0) uploadedtogarmin = models.BigIntegerField(default=0)
uploadedtorp3 = models.BigIntegerField(default=0) uploadedtorp3 = models.BigIntegerField(default=0)
uploadedtonk = models.BigIntegerField(default=0) uploadedtonk = models.BigIntegerField(default=0)
uploadedtointervals = models.BigIntegerField(default=0) uploadedtointervals = models.CharField(default=None,null=True, max_length=100)
forceunit = models.CharField(default='lbs', forceunit = models.CharField(default='lbs',
choices=( choices=(
('lbs', 'lbs'), ('lbs', 'lbs'),
@@ -3829,7 +3829,7 @@ class TombStone(models.Model):
uploadedtosporttracks = models.BigIntegerField(default=0) uploadedtosporttracks = models.BigIntegerField(default=0)
uploadedtotp = models.BigIntegerField(default=0) uploadedtotp = models.BigIntegerField(default=0)
uploadedtonk = models.BigIntegerField(default=0) uploadedtonk = models.BigIntegerField(default=0)
uploadedtointervals = models.BigIntegerField(default=0) uploadedtointervals = models.CharField(default=None,null=True, max_length=100)
@receiver(models.signals.pre_delete, sender=Workout) @receiver(models.signals.pre_delete, sender=Workout)
def create_tombstone_on_delete(sender, instance, **kwargs): def create_tombstone_on_delete(sender, instance, **kwargs):
@@ -3855,7 +3855,7 @@ class SyncRecord(models.Model):
c2id = models.BigIntegerField(unique=True,null=True,default=None) c2id = models.BigIntegerField(unique=True,null=True,default=None)
tpid = models.BigIntegerField(unique=True,null=True,default=None) tpid = models.BigIntegerField(unique=True,null=True,default=None)
rp3id = models.BigIntegerField(unique=True,null=True,default=None) rp3id = models.BigIntegerField(unique=True,null=True,default=None)
intervalsid = models.BigIntegerField(unique=True, null=True, default=None) intervalsid = models.CharField(unique=True, null=True, default=None, max_length=100)
def save(self, *args, **kwargs): def save(self, *args, **kwargs):
if self.workout: if self.workout:

View File

@@ -148,6 +148,7 @@ garminmapping = {key: value for key, value in Reverse(garmincollection)}
fitcollection = ( fitcollection = (
('water', 'rowing'), ('water', 'rowing'),
('rower', 'rowing'), ('rower', 'rowing'),
('rower', 'indoor_rowing'),
('skierg', 'cross_country_skiing'), ('skierg', 'cross_country_skiing'),
('bike', 'cycling'), ('bike', 'cycling'),
('bikeerg', 'cycling'), ('bikeerg', 'cycling'),

View File

@@ -3543,7 +3543,7 @@ def handle_intervals_getworkout(rower, intervalstoken, workoutid, debug=False, *
'boattype': '1x', 'boattype': '1x',
'workouttype': workouttype, 'workouttype': workouttype,
'file': fit_filename, 'file': fit_filename,
'intervalsid': intervalsid, 'intervalsid': workoutid,
'title': title, 'title': title,
'rpe': 0, 'rpe': 0,
'notes': '', 'notes': '',

View File

@@ -471,7 +471,10 @@ def workout_import_view(request, source='c2'):
try: try:
tdict = dict(request.POST.lists()) tdict = dict(request.POST.lists())
ids = tdict['workoutid'] ids = tdict['workoutid']
nkids = [int(id) for id in ids] try:
nkids = [int(id) for id in ids]
except ValueError:
nkids = ids
for nkid in nkids: for nkid in nkids:
try: try:
_ = integration.get_workout(nkid, startdate=startdate, enddate=enddate) _ = integration.get_workout(nkid, startdate=startdate, enddate=enddate)