Merge branch 'develop' into feature/basicpro
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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']
|
||||
|
||||
Reference in New Issue
Block a user