Private
Public Access
1
0

strava and c2 and sporttracks done

This commit is contained in:
Sander Roosendaal
2021-05-22 15:16:58 +02:00
parent 791ed4a2bb
commit 5c8177f6ea
2 changed files with 20 additions and 160 deletions

View File

@@ -931,6 +931,7 @@ def default(o): # pragma: no cover
# Uploading workout
def workout_c2_upload(user,w,asynchron=False):
message = 'trying C2 upload'
try:
if mytypes.c2mapping[w.workouttype] is None: # pragma: no cover
return "This workout type cannot be uploaded to Concept2",0
@@ -942,7 +943,9 @@ def workout_c2_upload(user,w,asynchron=False):
r = Rower.objects.get(user=user)
# ready to upload. Hurray
if (is_workout_user(user,w)):
c2userid = get_userid(r.c2token)
if not c2userid: # pragma: no cover
raise NoTokenError("User has no token")
@@ -980,6 +983,7 @@ def workout_c2_upload(user,w,asynchron=False):
message = "Something went wrong in workout_c2_upload_view. Response code 200/201 but C2 sync failed: "+response.text
c2id = 0
else: # pragma: no cover
job = myqueue(queue,
handle_c2_sync,
w.id,

View File

@@ -81,113 +81,17 @@ def workout_tp_upload_view(request,id=0):
def workout_strava_upload_view(request,id=0):
message = ""
r = getrower(request.user)
res = -1
w = get_workout_by_opaqueid(request,id)
result = -1
comment, result = stravastuff.workout_strava_upload(r.user,w,asynchron=True)
messages.info(request,'Your workout will be synchronized to Strava in the background')
try:
thetoken = strava_open(request.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
if (r.stravatoken == '') or (r.stravatoken is None): # pragma: no cover
s = "Token doesn't exist. Need to authorize"
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
else:
# ready to upload. Hurray
w = get_workout_by_opaqueid(request,id)
r = w.user
try:
tcxfile,tcxmessg = stravastuff.createstravaworkoutdata(w)
if tcxfile:
with open(tcxfile,'rb') as f:
try:
newnotes = w.notes+'\n from '+w.workoutsource+' via rowsandall.com'
except TypeError:
newnotes = 'from '+w.workoutsource+' via rowsandall.com'
activity_type = 'Ride'
if w.workouttype in mytypes.rowtypes:
activity_type = r.stravaexportas
if activity_type == 'match':
try:
activity_type = mytypes.stravamapping[w.workouttype]
except KeyError: # pragma: no cover
activity_type = 'Ride'
else: # pragma: no cover
try:
activity_type = mytypes.stravamapping[w.workouttype]
except KeyError:
activity_type = 'Ride'
res,mes = stravastuff.handle_stravaexport(
f,w.name,
r.stravatoken,
description=newnotes,
activity_type=activity_type,quick=False)
if res==0: # pragma: no cover
messages.error(request,mes)
w.uploadedtostrava = -1
w.save()
try:
os.remove(tcxfile)
except WindowsError:
pass
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
})
response = HttpResponseRedirect(url)
return response
try:
w.uploadedtostrava = res
w.save()
try:
os.remove(tcxfile)
except WindowsError: # pragma: no cover
pass
url = reverse('workout_edit_view',kwargs={'id':w.id})
messages.info(request,mes)
except: # pragma: no cover
with open("media/stravaerrors.log","a") as errorlog:
errorstring = str(sys.exc_info()[0])
timestr = strftime("%Y%m%d-%H%M%S")
errorlog.write(timestr+errorstring+"\r\n")
errorlog.write("views.py line 826\r\n")
message = 'Error: '+errorstring
messages.error(request,message)
else: # pragma: no cover # No tcxfile
message = "Strava Data error "+tcxmessg
messages.error(request,message)
w.uploadedtostrava = -1
w.save()
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
})
response = HttpResponseRedirect(url)
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
}
)
response = HttpResponseRedirect(url)
except ActivityUploadFailed as e: # pragma: no cover
message = "Strava Upload error: %s" % e
messages.error(request,message)
w.uploadedtostrava = -1
w.save()
os.remove(tcxfile)
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
})
response = HttpResponseRedirect(url)
return response
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
}
)
return HttpResponseRedirect(url)
# Upload workout to Concept2 logbook
@login_required()
@@ -205,15 +109,12 @@ def workout_c2_upload_view(request,id=0):
dologging(s)
try:
message,c2id = c2stuff.workout_c2_upload(request.user,w)
message,c2id = c2stuff.workout_c2_upload(request.user,w,asynchron=True)
except NoTokenError: # pragma: no cover
print('jet')
return HttpResponseRedirect("/rowers/me/c2authorize/")
if message and c2id <=0: # pragma: no cover
messages.error(request,message)
elif message:
messages.info(request,message)
messages.info(request,'Your workout will be synchronized to the Concept2 Logbook in the background')
url = reverse(r.defaultlandingpage,
kwargs = {
@@ -221,9 +122,8 @@ def workout_c2_upload_view(request,id=0):
})
response = HttpResponseRedirect(url)
return HttpResponseRedirect(url)
return response
# Upload workout to SportTracks
@@ -234,53 +134,9 @@ def workout_sporttracks_upload_view(request,id=0):
w = get_workout(id)
r = w.user
try:
thetoken = sporttracks_open(r.user)
except NoTokenError: # pragma: no cover
return HttpResponseRedirect("/rowers/me/sporttracksauthorize/")
message, res = sporttracksstuff.workout_sporttracks_upload(r.user,w,asynchron=True)
data = sporttracksstuff.createsporttracksworkoutdata(w)
if not data: # pragma: no cover
message = "Data error"
messages.error(request,message)
url = reverse(r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(w.id),
})
return HttpResponseRedirect(url)
authorizationstring = str('Bearer ' + thetoken)
headers = {'Authorization': authorizationstring,
'user-agent': 'sanderroosendaal',
'Content-Type': 'application/json'}
url = "https://api.sporttracks.mobi/api/v2/fitnessActivities.json"
response = requests.post(url,headers=headers,data=json.dumps(data,default=default))
# check for duplicate error first
if (response.status_code == 409 ): # pragma: no cover
message = "Duplicate error"
messages.error(request,message)
w.uploadedtosporttracks = -1
w.save()
elif (response.status_code == 201 or response.status_code==200):
s= response.json()
sporttracksid = sporttracksstuff.getidfromresponse(response)
w.uploadedtosporttracks = sporttracksid
w.save()
message = "Upload to SportTracks was successful"
messages.info(request,message)
url = reverse('workout_edit_view',kwargs={'id':encoder.encode_hex(w.id)})
return HttpResponseRedirect(url)
else: # pragma: no cover
s = response
message = "Something went wrong in workout_sporttracks_upload_view: %s" % s.reason
messages.error(request,message)
messages.info(request,'Your workout will be synchronized with SportTracks in the background')
url = reverse(r.defaultlandingpage,
kwargs = {