diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index 58c14b07..200adba1 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -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, diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index 5e4e77f1..d63a4503 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -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 = {