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 import FITParser as FP
|
||||||
from rowingdata.otherparsers import FitSummaryData
|
from rowingdata.otherparsers import FitSummaryData
|
||||||
from rowers.rower_rules import user_is_not_basic, user_is_coachee
|
from rowers.rower_rules import user_is_not_basic, user_is_coachee
|
||||||
|
from rowers.dataroutines import totaltime_sec_to_string
|
||||||
|
|
||||||
from rowers import mytypes
|
from rowers import mytypes
|
||||||
import shutil
|
import shutil
|
||||||
from rowers.rower_rules import is_workout_user, ispromember
|
from rowers.rower_rules import is_workout_user, ispromember
|
||||||
from rowers.utils import myqueue, dologging, custom_exception_handler
|
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 urllib
|
||||||
import gzip
|
import gzip
|
||||||
@@ -368,20 +369,87 @@ class IntervalsIntegration(SyncIntegration):
|
|||||||
_ = self.open()
|
_ = self.open()
|
||||||
r = self.rower
|
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
|
# check if workout with this id already exists
|
||||||
known_interval_ids = get_known_ids(r, 'intervalsid')
|
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)
|
return self.update_workout(id)
|
||||||
|
|
||||||
record = create_or_update_syncrecord(r, None, intervalsid=id)
|
record = create_or_update_syncrecord(r, None, intervalsid=id)
|
||||||
|
|
||||||
_ = myqueue(queuehigh,
|
if do_async:
|
||||||
handle_intervals_getworkout,
|
_ = myqueue(queuehigh,
|
||||||
self.rower,
|
handle_intervals_getworkout,
|
||||||
self.rower.intervals_token,
|
self.rower,
|
||||||
id)
|
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):
|
def get_workouts(self, *args, **kwargs):
|
||||||
startdate = timezone.now() - timedelta(days=7)
|
startdate = timezone.now() - timedelta(days=7)
|
||||||
@@ -660,7 +728,7 @@ class IntervalsIntegration(SyncIntegration):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
id = record['id']
|
id = record['id']
|
||||||
result = self.get_workout(id)
|
result = self.get_workout(id, do_async=False)
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -931,6 +931,7 @@ def intervals_webhook_view(request):
|
|||||||
dologging("intervals_webhooks.log",request.body)
|
dologging("intervals_webhooks.log",request.body)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
dologging("intervals_webhooks.log","request.body")
|
||||||
data = json.loads(request.body)
|
data = json.loads(request.body)
|
||||||
try:
|
try:
|
||||||
verificationtoken = data['secret']
|
verificationtoken = data['secret']
|
||||||
|
|||||||
Reference in New Issue
Block a user