From d588de2a42ac2e184833fb282df18e239a8bb4c5 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 7 Nov 2019 18:04:21 +0100 Subject: [PATCH] minimal refactoring and unique together constraint --- rowers/models.py | 3 + rowers/views/workoutviews.py | 124 +++++++++++++---------------------- 2 files changed, 50 insertions(+), 77 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index e130d8a1..6e947bc3 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -3728,5 +3728,8 @@ class VideoAnalysis(models.Model): delay = models.IntegerField(default=0) workout = models.ForeignKey(Workout, on_delete=models.CASCADE) + class Meta: + unique_together = ('video_id','workout') + def __str__(self): return self.name diff --git a/rowers/views/workoutviews.py b/rowers/views/workoutviews.py index eb3c146b..05bc68e2 100644 --- a/rowers/views/workoutviews.py +++ b/rowers/views/workoutviews.py @@ -46,6 +46,50 @@ def get_video_id(url): else: raise ValueError +def get_video_data(w): + df = getsmallrowdata_db(['time','velo','spm'],ids=[w.id], + workstrokesonly=False,doclean=False,compute=False) + df['time'] = (df['time']-df['time'].min())/1000. + df.sort_values(by='time',inplace=True) + + + df.set_index(pd.to_timedelta(df['time'],unit='s'),inplace=True) + df2 = df.resample('1s').mean().interpolate() + + + #mask = df2['time'] < delay + #df2 = df2.mask(mask).dropna() + df2['time'] = (df2['time']-df2['time'].min()) + + boatspeed = (100*df2['velo']).astype(int)/100. + spm = (10*df2['spm']).astype(int)/10. + + coordinates = dataprep.get_latlon_time(w.id) + + coordinates.set_index(pd.to_timedelta(coordinates['time'],unit='s'),inplace=True) + coordinates = coordinates.resample('1s').mean().interpolate() + #mask = coordinates['time'] < delay + #coordinates = coordinates.mask(mask).dropna() + coordinates['time'] = coordinates['time']-coordinates['time'].min() + latitude = coordinates['latitude'] + longitude = coordinates['longitude'] + + # create map + mapscript, mapdiv = leaflet_chart_video(latitude,longitude, + w.name) + + # bundle data + data = { + 'boatspeed':[ v for v in boatspeed.values], + 'latitude':[ l for l in latitude.values], + 'longitude':[ l for l in longitude.values], + 'spm':[ s for s in spm.values ] + } + + maxtime = coordinates['time'].max() + + return data, mapscript, mapdiv, maxtime + # Show a video compared with data def workout_video_view(request,id=''): try: @@ -95,44 +139,7 @@ def workout_video_view(request,id=''): form = None # get data - df = getsmallrowdata_db(['time','velo','spm'],ids=[w.id], - workstrokesonly=False,doclean=False,compute=False) - df['time'] = (df['time']-df['time'].min())/1000. - df.sort_values(by='time',inplace=True) - - - df.set_index(pd.to_timedelta(df['time'],unit='s'),inplace=True) - df2 = df.resample('1s').mean().interpolate() - - - #mask = df2['time'] < delay - #df2 = df2.mask(mask).dropna() - df2['time'] = (df2['time']-df2['time'].min()) - - boatspeed = (100*df2['velo']).astype(int)/100. - spm = (10*df2['spm']).astype(int)/10. - - coordinates = dataprep.get_latlon_time(w.id) - - coordinates.set_index(pd.to_timedelta(coordinates['time'],unit='s'),inplace=True) - coordinates = coordinates.resample('1s').mean().interpolate() - #mask = coordinates['time'] < delay - #coordinates = coordinates.mask(mask).dropna() - coordinates['time'] = coordinates['time']-coordinates['time'].min() - latitude = coordinates['latitude'] - longitude = coordinates['longitude'] - - # create map - mapscript, mapdiv = leaflet_chart_video(latitude,longitude, - w.name) - - # bundle data - data = { - 'boatspeed':[ v for v in boatspeed.values], - 'latitude':[ l for l in latitude.values], - 'longitude':[ l for l in longitude.values], - 'spm':[ s for s in spm.values ] - } + data, mapscript, mapdiv, maxtime = get_video_data(w) breadcrumbs = [ { @@ -162,7 +169,7 @@ def workout_video_view(request,id=''): 'form':form, 'breadcrumbs':breadcrumbs, 'analysis':analysis, - 'maxtime':coordinates['time'].max(), + 'maxtime':maxtime, }) @@ -201,44 +208,7 @@ def workout_video_create_view(request,id=0): delay = 0 # get data - df = getsmallrowdata_db(['time','velo','spm'],ids=[w.id], - workstrokesonly=False,doclean=False,compute=False) - df['time'] = (df['time']-df['time'].min())/1000. - df.sort_values(by='time',inplace=True) - - - df.set_index(pd.to_timedelta(df['time'],unit='s'),inplace=True) - df2 = df.resample('1s').mean().interpolate() - - - #mask = df2['time'] < delay - #df2 = df2.mask(mask).dropna() - df2['time'] = (df2['time']-df2['time'].min()) - - boatspeed = (100*df2['velo']).astype(int)/100. - spm = (10*df2['spm']).astype(int)/10. - - coordinates = dataprep.get_latlon_time(w.id) - - coordinates.set_index(pd.to_timedelta(coordinates['time'],unit='s'),inplace=True) - coordinates = coordinates.resample('1s').mean().interpolate() - #mask = coordinates['time'] < delay - #coordinates = coordinates.mask(mask).dropna() - coordinates['time'] = coordinates['time']-coordinates['time'].min() - latitude = coordinates['latitude'] - longitude = coordinates['longitude'] - - # create map - mapscript, mapdiv = leaflet_chart_video(latitude,longitude, - w.name) - - # bundle data - data = { - 'boatspeed':[ v for v in boatspeed.values], - 'latitude':[ l for l in latitude.values], - 'longitude':[ l for l in longitude.values], - 'spm':[ s for s in spm.values ] - } + data, mapscript, mapdiv, maxtime = get_video_data(w) breadcrumbs = [ {