From c10c6fafe188f0a4785deb8a378866f7de3e562e Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 27 Jun 2018 18:22:24 +0200 Subject: [PATCH] improved dataprepnodjango? --- rowers/dataprep.py | 1 - rowers/dataprepnodjango.py | 6 ++++-- rowers/metrics.py | 2 +- rowers/stravastuff.py | 31 ++++++++++++++++++++----------- rowers/tasks.py | 2 ++ rowers/urls.py | 1 + rowers/views.py | 34 ++++++++++++++++++++++++++++++++++ 7 files changed, 62 insertions(+), 15 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index bd238950..8e346aba 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -56,7 +56,6 @@ from django.conf import settings from sqlalchemy import create_engine import sqlalchemy as sa import sys - import utils import datautils from utils import lbstoN,myqueue,is_ranking_piece,wavg diff --git a/rowers/dataprepnodjango.py b/rowers/dataprepnodjango.py index 0dd4d25b..05fc224f 100644 --- a/rowers/dataprepnodjango.py +++ b/rowers/dataprepnodjango.py @@ -627,11 +627,11 @@ def delete_strokedata(id,debug=False): conn.close() engine.dispose() -def update_strokedata(id,df,debug=False): +def update_strokedata(id,df,debug=False,bands=True,barchart=True,otwpower=True): delete_strokedata(id,debug=debug) if debug: print "updating ",id - rowdata = dataprep(df,id=id,bands=True,barchart=True,otwpower=True, + rowdata = dataprep(df,id=id,bands=False,barchart=True,otwpower=True, debug=debug) return rowdata @@ -1222,10 +1222,12 @@ def dataprep(rowdatadf,id=0,bands=True,barchart=True,otwpower=True, # write data if id given if id != 0: + data['workoutid'] = id if debug: engine = create_engine(database_url_debug, echo=False) else: engine = create_engine(database_url, echo=False) + with engine.connect() as conn, conn.begin(): data.to_sql('strokedata',engine,if_exists='append',index=False) conn.close() diff --git a/rowers/metrics.py b/rowers/metrics.py index 4a0cb4d2..f2a53c0f 100644 --- a/rowers/metrics.py +++ b/rowers/metrics.py @@ -70,7 +70,7 @@ rowingmetrics = ( ('velo',{ 'numtype':'float', - 'null':False, + 'null':True, 'verbose_name': 'Boat Speed (m/s)', 'ax_min': 0, 'ax_max': 8, diff --git a/rowers/stravastuff.py b/rowers/stravastuff.py index b1c2d3ed..42e585c1 100644 --- a/rowers/stravastuff.py +++ b/rowers/stravastuff.py @@ -119,19 +119,28 @@ def get_strava_workout_list(user): return s -def add_stroke_data(user,stravaid,workoutid,startdatetime,csvfilename): +def add_stroke_data(user,stravaid,workoutid,startdatetime,csvfilename,debug=False): r = Rower.objects.get(user=user) starttimeunix = arrow.get(startdatetime).timestamp - - job = myqueue(queue, - handle_strava_import_stroke_data, - r.stravatoken, - stravaid, - workoutid, - starttimeunix, - csvfilename) + if not debug: + job = myqueue(queue, + handle_strava_import_stroke_data, + r.stravatoken, + stravaid, + workoutid, + starttimeunix, + csvfilename) + else: + handle_strava_import_stroke_data( + r.stravatoken, + stravaid, + workoutid, + starttimeunix, + csvfilename, + debug=debug + ) # gets all new Strava workouts for a rower def get_strava_workouts(rower): @@ -160,7 +169,7 @@ def get_strava_workouts(rower): return 1 -def create_async_workout(alldata,user,stravaid): +def create_async_workout(alldata,user,stravaid,debug=False): data = alldata[stravaid] r = Rower.objects.get(user=user) distance = data['distance'] @@ -245,7 +254,7 @@ def create_async_workout(alldata,user,stravaid): # Check if workout has stroke data, and get the stroke data - result = add_stroke_data(user,stravaid,w.id,rowdatetime,csvfilename) + result = add_stroke_data(user,stravaid,w.id,rowdatetime,csvfilename,debug=debug) return w.id diff --git a/rowers/tasks.py b/rowers/tasks.py index c4d8dba9..0263626c 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -206,6 +206,8 @@ def handle_strava_import_stroke_data(stravatoken, res = df.to_csv(csvfilename+'.gz',index_label='index',compression='gzip') + + # data = update_strokedata(workoutid,df,debug=debug) data = dataprep(df,id=workoutid,bands=False,debug=debug) # startdatetime = datetime.datetime.strptime(startdatetime,"%Y-%m-%d-%H:%M:%S") diff --git a/rowers/urls.py b/rowers/urls.py index ff7ba9e6..e27a3b71 100644 --- a/rowers/urls.py +++ b/rowers/urls.py @@ -326,6 +326,7 @@ urlpatterns = [ url(r'^workout/c2import/all/(?P\d+)$',views.workout_getc2workout_all), url(r'^workout/stravaimport/(?P\d+)/$',views.workout_getstravaworkout_view), url(r'^workout/stravaimport/all/$',views.workout_getstravaworkout_all), + url(r'^workout/stravaimport/next/$',views.workout_getstravaworkout_next), url(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view), url(r'^workout/sporttracksimport/(?P\d+)/$',views.workout_getsporttracksworkout_view), url(r'^workout/sporttracksimport/all/$',views.workout_getsporttracksworkout_all), diff --git a/rowers/views.py b/rowers/views.py index 71b439b2..fdeee6b5 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -10234,6 +10234,40 @@ def workout_getstravaworkout_all(request): return HttpResponseRedirect(url) +# Imports all new workouts from SportTracks +@login_required() +def workout_getstravaworkout_next(request): + + r = Rower.objects.get(user=request.user) + + res = stravastuff.get_strava_workout_list(r.user) + + if (res.status_code != 200): + return 0 + else: + stravaids = [int(item['id']) for item in res.json()] + + alldata = {} + for item in res.json(): + alldata[item['id']] = item + + knownstravaids = uniqify([ + w.uploadedtostrava for w in Workout.objects.filter(user=r) + ]) + newids = [stravaid for stravaid in stravaids if not stravaid in knownstravaids] + + theid = newids[0] + + workoutid = stravastuff.create_async_workout(alldata,r.user,stravaid,debug=True) + + + + url = reverse(workouts_view) + return HttpResponseRedirect(url) + + + + # Imports a workout from Concept2 @login_required()