strava and c2 and sporttracks done
This commit is contained in:
@@ -931,6 +931,7 @@ def default(o): # pragma: no cover
|
|||||||
# Uploading workout
|
# Uploading workout
|
||||||
def workout_c2_upload(user,w,asynchron=False):
|
def workout_c2_upload(user,w,asynchron=False):
|
||||||
message = 'trying C2 upload'
|
message = 'trying C2 upload'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if mytypes.c2mapping[w.workouttype] is None: # pragma: no cover
|
if mytypes.c2mapping[w.workouttype] is None: # pragma: no cover
|
||||||
return "This workout type cannot be uploaded to Concept2",0
|
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)
|
r = Rower.objects.get(user=user)
|
||||||
|
|
||||||
# ready to upload. Hurray
|
# ready to upload. Hurray
|
||||||
|
|
||||||
if (is_workout_user(user,w)):
|
if (is_workout_user(user,w)):
|
||||||
|
|
||||||
c2userid = get_userid(r.c2token)
|
c2userid = get_userid(r.c2token)
|
||||||
if not c2userid: # pragma: no cover
|
if not c2userid: # pragma: no cover
|
||||||
raise NoTokenError("User has no token")
|
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
|
message = "Something went wrong in workout_c2_upload_view. Response code 200/201 but C2 sync failed: "+response.text
|
||||||
c2id = 0
|
c2id = 0
|
||||||
else: # pragma: no cover
|
else: # pragma: no cover
|
||||||
|
|
||||||
job = myqueue(queue,
|
job = myqueue(queue,
|
||||||
handle_c2_sync,
|
handle_c2_sync,
|
||||||
w.id,
|
w.id,
|
||||||
|
|||||||
@@ -81,113 +81,17 @@ def workout_tp_upload_view(request,id=0):
|
|||||||
def workout_strava_upload_view(request,id=0):
|
def workout_strava_upload_view(request,id=0):
|
||||||
message = ""
|
message = ""
|
||||||
r = getrower(request.user)
|
r = getrower(request.user)
|
||||||
res = -1
|
|
||||||
|
|
||||||
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)
|
w = get_workout_by_opaqueid(request,id)
|
||||||
r = w.user
|
result = -1
|
||||||
|
comment, result = stravastuff.workout_strava_upload(r.user,w,asynchron=True)
|
||||||
try:
|
messages.info(request,'Your workout will be synchronized to Strava in the background')
|
||||||
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,
|
url = reverse(r.defaultlandingpage,
|
||||||
kwargs = {
|
kwargs = {
|
||||||
'id':encoder.encode_hex(w.id),
|
'id':encoder.encode_hex(w.id),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
response = HttpResponseRedirect(url)
|
return 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
|
|
||||||
|
|
||||||
# Upload workout to Concept2 logbook
|
# Upload workout to Concept2 logbook
|
||||||
@login_required()
|
@login_required()
|
||||||
@@ -205,15 +109,12 @@ def workout_c2_upload_view(request,id=0):
|
|||||||
dologging(s)
|
dologging(s)
|
||||||
|
|
||||||
try:
|
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
|
except NoTokenError: # pragma: no cover
|
||||||
|
print('jet')
|
||||||
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
return HttpResponseRedirect("/rowers/me/c2authorize/")
|
||||||
|
|
||||||
if message and c2id <=0: # pragma: no cover
|
messages.info(request,'Your workout will be synchronized to the Concept2 Logbook in the background')
|
||||||
messages.error(request,message)
|
|
||||||
elif message:
|
|
||||||
messages.info(request,message)
|
|
||||||
|
|
||||||
|
|
||||||
url = reverse(r.defaultlandingpage,
|
url = reverse(r.defaultlandingpage,
|
||||||
kwargs = {
|
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
|
# Upload workout to SportTracks
|
||||||
@@ -234,53 +134,9 @@ def workout_sporttracks_upload_view(request,id=0):
|
|||||||
w = get_workout(id)
|
w = get_workout(id)
|
||||||
r = w.user
|
r = w.user
|
||||||
|
|
||||||
try:
|
message, res = sporttracksstuff.workout_sporttracks_upload(r.user,w,asynchron=True)
|
||||||
thetoken = sporttracks_open(r.user)
|
|
||||||
except NoTokenError: # pragma: no cover
|
|
||||||
return HttpResponseRedirect("/rowers/me/sporttracksauthorize/")
|
|
||||||
|
|
||||||
|
messages.info(request,'Your workout will be synchronized with SportTracks in the background')
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
url = reverse(r.defaultlandingpage,
|
url = reverse(r.defaultlandingpage,
|
||||||
kwargs = {
|
kwargs = {
|
||||||
|
|||||||
Reference in New Issue
Block a user