From 7626a6a8aec5c07508f97ce3094025b922d895ef Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 30 Dec 2024 13:19:44 +0100 Subject: [PATCH] auto import now direct --- rowers/integrations/intervals.py | 86 +++++++++++++++++++++++--- rowers/tests/testdata/testdata.tcx.gz | Bin 3989 -> 3989 bytes rowers/views/importviews.py | 1 + 3 files changed, 78 insertions(+), 9 deletions(-) diff --git a/rowers/integrations/intervals.py b/rowers/integrations/intervals.py index 9a29b75e..92a3beb1 100644 --- a/rowers/integrations/intervals.py +++ b/rowers/integrations/intervals.py @@ -4,12 +4,13 @@ from rowingdata import rowingdata from rowingdata import FITParser as FP from rowingdata.otherparsers import FitSummaryData from rowers.rower_rules import user_is_not_basic, user_is_coachee +from rowers.dataroutines import totaltime_sec_to_string from rowers import mytypes import shutil from rowers.rower_rules import is_workout_user, ispromember from rowers.utils import myqueue, dologging, custom_exception_handler -from rowers.tasks import handle_intervals_getworkout +from rowers.tasks import handle_intervals_getworkout, handle_request_post import urllib import gzip @@ -368,20 +369,87 @@ class IntervalsIntegration(SyncIntegration): _ = self.open() r = self.rower + do_async = kwargs.get('do_async', True) + force_download = kwargs.get('force_download', False) + # check if workout with this id already exists known_interval_ids = get_known_ids(r, 'intervalsid') - if id in known_interval_ids: + if not force_download and id in known_interval_ids: return self.update_workout(id) record = create_or_update_syncrecord(r, None, intervalsid=id) - _ = myqueue(queuehigh, - handle_intervals_getworkout, - self.rower, - self.rower.intervals_token, - id) + if do_async: + _ = myqueue(queuehigh, + handle_intervals_getworkout, + self.rower, + self.rower.intervals_token, + id) + + return 1 + + authorizationstring = str('Bearer ' + r.intervals_token) + headers = { + 'Authorization': authorizationstring, + } + + url = self.oauth_data['base_url'] + 'activity/' + str(id) + response = requests.get(url, headers=headers) + if response.status_code != 200: + dologging('intervals.icu.log', response.text) + return 0 + + data = response.json() + try: + title = data['name'] + except KeyError: + title = 'Intervals workout' + + try: + workouttype = mytypes.intervalsmappinginv[data['type']] + except KeyError: + workouttype = 'water' + + url = self.oauth_data['base_url'] + 'activity/' + str(id) + '/fit-file' + response = requests.get(url, headers=headers) + + if response.status_code != 200: + dologging('intervals.icu.log', response.text) + return 0 + + try: + fit_data = response.content + fit_filename = 'media/intervals_' + str(id) + '.fit' + with open(fit_filename, 'wb') as f: + f.write(fit_data) + except: + return 0 + + try: + row = FP(fit_filename) + rowdata = rowingdata(df=row.df) + rowsummary = FitSummaryData(fit_filename) + duration = totaltime_sec_to_string(rowdata.duration) + distance = rowdata.df[' Horizontal (meters)'].iloc[-1] + except: + return 0 + + uploadoptions = { + 'secret': UPLOAD_SERVICE_SECRET, + 'user': r.user.id, + 'boattype': '1x', + 'workouttype': workouttype, + 'file': fit_filename, + 'intervalsid': id, + 'title': title, + 'rpe': 0, + 'notes': '', + 'offline': False, + } + + url = UPLOAD_SERVICE_URL + return handle_request_post(url, uploadoptions) - return 1 def get_workouts(self, *args, **kwargs): startdate = timezone.now() - timedelta(days=7) @@ -660,7 +728,7 @@ class IntervalsIntegration(SyncIntegration): try: id = record['id'] - result = self.get_workout(id) + result = self.get_workout(id, do_async=False) except KeyError: pass diff --git a/rowers/tests/testdata/testdata.tcx.gz b/rowers/tests/testdata/testdata.tcx.gz index ec90a271834e431f378e9c89449d033b64d98fab..17d933a59d9236a8d55f230a76dcbd92afffd347 100644 GIT binary patch delta 16 XcmbO#KUJPxzMF$XySHc~dmldlCqe|N delta 16 XcmbO#KUJPxzMF%?xv+2}dmldlCp`qD diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index c7d33f1d..6a824771 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -931,6 +931,7 @@ def intervals_webhook_view(request): dologging("intervals_webhooks.log",request.body) else: + dologging("intervals_webhooks.log","request.body") data = json.loads(request.body) try: verificationtoken = data['secret']