diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 6e3b0802..5aa8720d 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1571,11 +1571,11 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', oarlength=2.89, inboard=0.88, forceunit='lbs', consistencychecks=False, + startdatetime='', impeller=False): message = None - powerperc = 100 * np.array([r.pw_ut2, r.pw_ut1, r.pw_at, @@ -1587,6 +1587,9 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', hrtr=r.tr, hran=r.an, ftp=r.ftp, powerperc=powerperc, powerzones=r.powerzones) row = rdata(f2, rower=rr) + if startdatetime != '': + row.rowdatetime = arrow.get(startdatetime).datetime + if title is None or title == '': title = 'Workout' @@ -1613,7 +1616,7 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', return new_workout_from_df(r, newdf, title=title,boattype=boattype, workouttype=workouttype, - workoutsource=workoutsource) + workoutsource=workoutsource,startdatetime=startdatetime) try: checks = row.check_consistency() allchecks = 1 @@ -1700,12 +1703,20 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', summary = row.allstats() + if startdatetime != '': + workoutstartdatetime = arrow.get(startdatetime).datetime + else: + workoutstartdatetime = row.rowdatetime + timezone_str = 'UTC' try: - workoutstartdatetime = timezone.make_aware(row.rowdatetime) + workoutstartdatetime = timezone.make_aware(workoutstartdatetime) except ValueError: - workoutstartdatetime = row.rowdatetime + pass + + + try: latavg = row.df[' latitude'].mean() @@ -1840,9 +1851,11 @@ parsers = { 'eth': ETHParser, } -def parsenonpainsled(fileformat,f2,summary): +def parsenonpainsled(fileformat,f2,summary,startdatetime=''): try: row = parsers[fileformat](f2) + if startdatetime != '': + row.rowdatetime = arrow.get(startdatetime).datetime hasrecognized = True except (KeyError,IndexError,ValueError): hasrecognized = False @@ -1874,13 +1887,13 @@ def parsenonpainsled(fileformat,f2,summary): return row,hasrecognized,summary,fileformat -def handle_nonpainsled(f2, fileformat, summary=''): +def handle_nonpainsled(f2, fileformat, summary='',startdatetime=''): oarlength = 2.89 inboard = 0.88 hasrecognized = False impeller = False - row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary) + row,hasrecognized,summary,fileformat = parsenonpainsled(fileformat,f2,summary,startdatetime=startdatetime) # Handle c2log if (fileformat == 'c2log' or fileformat == 'rowprolog'): @@ -1973,6 +1986,7 @@ def new_workout_from_file(r, f2, boattype='1x', rpe=-1, makeprivate=False, + startdatetime='', notes='', uploadoptions={'boattype':'1x','workouttype':'rower'}): message = "" @@ -2078,6 +2092,7 @@ def new_workout_from_file(r, f2, f2, summary, oarlength, inboard, fileformat, impeller = handle_nonpainsled( f2, fileformat, + startdatetime=startdatetime, summary=summary ) if not f2: @@ -2106,6 +2121,7 @@ def new_workout_from_file(r, f2, dosummary=dosummary, workoutsource=workoutsource, summary=summary, + startdatetime=startdatetime, rpe=rpe, inboard=inboard, oarlength=oarlength, title=title, @@ -2222,6 +2238,7 @@ def new_workout_from_df(r, df, boattype='1x', workouttype='rower', parent=None, + startdatetime='', setprivate=False, forceunit='lbs', dt=datetime.timedelta()): @@ -2250,7 +2267,8 @@ def new_workout_from_df(r, df, notes = '' summary = '' makeprivate = False - startdatetime = timezone.now() + if startdatetime == '': + startdatetime = timezone.now() if setprivate: makeprivate = True diff --git a/rowers/rp3stuff.py b/rowers/rp3stuff.py index 2c846ae0..3b733b88 100644 --- a/rowers/rp3stuff.py +++ b/rowers/rp3stuff.py @@ -178,6 +178,10 @@ def get_rp3_workout(user,workout_id,startdatetime=None): r = Rower.objects.get(user=user) auth_token = rp3_open(user) + if not startdatetime: + startdatetime = str(timezone.now()) + + status_code = download_rp3_file(url, auth_token, filename) if status_code != 200: @@ -192,6 +196,7 @@ def get_rp3_workout(user,workout_id,startdatetime=None): 'workouttype':'dynamic', 'boattype':'1x', 'rp3id':workout_id, + 'startdatetime':startdatetime, } session = requests.session() diff --git a/rowers/tasks.py b/rowers/tasks.py index c1ae1086..09ccae77 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -2712,6 +2712,84 @@ def handle_sendemail_invite_accept(email, name, teamname, managername, def add2(x, y,debug=False,**kwargs): return x + y +graphql_url = "https://rp3rowing-app.com/graphql" + +@app.task +def handle_rp3_async_workout(userid,rp3token,rp3id,startdatetime,debug=False,**kwargs): + headers = {'Authorization': 'Bearer ' + rp3token } + + get_download_link = """{ + download(workout_id: """ + str(rp3id) + """, type:csv){ + id + status + link + } +}""" + + have_link = False + download_url = '' + counter = 0 + max_attempts = 20 + waittime = 3 + while not have_link: + response = requests.post( + url=graphql_url, + headers=headers, + json={'query': get_download_link} + ) + + if response.status_code != 200: + have_link = True + + workout_download_details = pd.json_normalize(response.json()['data']['download']) + + if workout_download_details.iat[0,1] == 'ready': + download_url = workout_download_details.iat[0,2] + have_link = True + + counter += 1 + + if counter>max_attempts: + have_link = True + + time.sleep(waittime) + + filename = 'media/RP3Import_'+str(rp3id)+'.csv' + res = requests.get(download_url,headers=headers) + + if not startdatetime: + startdatetime = str(timezone.now()) + + if res.status_code != 200: + return 0 + + + with open(filename,'wb') as f: + f.write(res.content) + + uploadoptions = { + 'secret': UPLOAD_SERVICE_SECRET, + 'user': userid, + 'file': filename, + 'workouttype':'dynamic', + 'boattype':'1x', + 'rp3id':rp3id, + 'startdatetime':startdatetime, + } + + session = requests.session() + newHeaders = {'Content-type': 'application/json', 'Accept': 'text/plain'} + session.headers.update(newHeaders) + + response = session.post(UPLOAD_SERVICE_URL,json=uploadoptions) + + if response.status_code != 200: + return 0 + + workoutid = response.json()['id'] + + return workoutid + @app.task def handle_c2_async_workout(alldata,userid,c2token,c2id,debug=False,**kwargs): data = alldata[c2id] diff --git a/rowers/templates/menu_workout.html b/rowers/templates/menu_workout.html index 28f1292c..8c0d8385 100644 --- a/rowers/templates/menu_workout.html +++ b/rowers/templates/menu_workout.html @@ -241,6 +241,21 @@ {% endif %} +