Private
Public Access
1
0

Merge branch 'develop' into feature/basicpro

This commit is contained in:
2024-12-30 13:24:25 +01:00
2 changed files with 78 additions and 9 deletions

View File

@@ -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

View File

@@ -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']