From 77e52ac9c11d15d3523a7b8ab1a1d58b6a36162d Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 18 Jun 2018 12:30:56 +0200 Subject: [PATCH 1/7] fxed submission with teams --- rowers/models.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/rowers/models.py b/rowers/models.py index b2f26e18..9278e80b 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -1641,12 +1641,23 @@ class VirtualRaceResult(models.Model): u1 = rr.user.first_name, u2 = rr.user.last_name, ) - return u'Entry for {n} for "{r}" in {c} {d}'.format( - n = name, - r = self.race, - d = self.boattype, - c = self.boatclass, + if self.teamname: + return u'Entry for {n} for "{r}" in {c} {d} with {t} ({s})'.format( + n = name, + r = self.race, + d = self.boattype, + c = self.boatclass, + t = self.teamname, + s = self.sex, ) + else: + return u'Entry for {n} for "{r}" in {c} {d} ({s})'.format( + n = name, + r = self.race, + d = self.boattype, + c = self.boatclass, + s = self.sex, + ) class CourseTestResult(models.Model): From 12bb31553bad605362aca43131380dd02f686a12 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Mon, 18 Jun 2018 14:07:42 +0200 Subject: [PATCH 2/7] small bug fixes --- rowers/interactiveplots.py | 2 +- rowers/views.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 7f59ef89..02fb115b 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -3398,7 +3398,7 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0, try: tseconds = rowdata.ix[:,'time'] except KeyError: - return '','No time data - cannot make flex plot','','' + return '','No time data - cannot make flex plot' try: diff --git a/rowers/views.py b/rowers/views.py index d968cae2..d64b4f38 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -11305,7 +11305,7 @@ def workout_summary_edit_view(request,id,message="",successmessage="" try: avpace = datetime.timedelta(seconds=int(500./normv)) except: - avpage = datetime.timedelta(seconds=130) + avpace = datetime.timedelta(seconds=130) data = { 'power': int(normp), From d7b7b0b6d475a68d827d3243dfb595ea4dabe057 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Tue, 19 Jun 2018 22:17:36 +0200 Subject: [PATCH 3/7] graying out the intervals --- rowers/interactiveplots.py | 20 +++++++++++++++++++- rowers/views.py | 33 +++++++++++++++++++++++++-------- 2 files changed, 44 insertions(+), 9 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 02fb115b..7450ee0a 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2114,7 +2114,7 @@ def interactive_streamchart(id=0,promember=0): return [script,div] -def interactive_chart(id=0,promember=0): +def interactive_chart(id=0,promember=0,intervaldata = {}): # Add hover to this comma-separated string and see what changes if (promember==1): TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair' @@ -2219,6 +2219,24 @@ def interactive_chart(id=0,promember=0): plot.add_layout(LinearAxis(y_range_name="spmax",axis_label="SPM"),'right') plot.legend.location = "bottom_right" + + # add shaded bar chart areas + intervaldf = pd.DataFrame(intervaldata) + intervaldf['itime'] = intervaldf['itime']*1.e3 + intervaldf['time'] = intervaldf['itime'].cumsum() + intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'].shift(-1) + intervaldf['value'] = 45 + mask = intervaldf['itype'] == 3 + intervaldf.loc[mask,'value'] = 10 + intervaldf['bottom'] = 10 + + intervalsource = ColumnDataSource( + intervaldf + ) + + plot.quad(left='time',top='value',bottom='bottom', + right='time_r',source=intervalsource,color='gray', + y_range_name='spmax',fill_alpha=0.2,line_alpha=0.2) script, div = components(plot) diff --git a/rowers/views.py b/rowers/views.py index d64b4f38..7948a933 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -11286,13 +11286,6 @@ def workout_summary_edit_view(request,id,message="",successmessage="" return HttpResponse("Error: CSV Data File Not Found") nrintervals = len(idist) - # create interactive plot - try: - res = interactive_chart(id,promember=1) - script = res[0] - div = res[1] - except ValueError: - pass savebutton = 'nosavebutton' formvalues = {} @@ -11310,8 +11303,16 @@ def workout_summary_edit_view(request,id,message="",successmessage="" data = { 'power': int(normp), 'pace': avpace, - 'selector': normp, + 'selector': 'power', } + + powerorpace = 'power' + + if normp == 0: + data['selector'] = 'pace' + powerorpace = 'pace' + + powerupdateform = PowerIntervalUpdateForm(initial=data) @@ -11568,6 +11569,22 @@ def workout_summary_edit_view(request,id,message="",successmessage="" detailform = IntervalUpdateForm(aantal=nrintervals,initial=initial) + # create interactive plot + try: + intervaldata = { + 'itime':itime, + 'idist':idist, + 'itype':itype, + 'selector': powerorpace, + 'normp': normp, + 'normv': normv, + } + res = interactive_chart(id,promember=1,intervaldata=intervaldata) + script = res[0] + div = res[1] + except ValueError: + pass + # render page return render(request, 'summary_edit.html', From ddc8d08c3f232b68ca6d6b582e72c7d2627fe7c9 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 20 Jun 2018 15:44:01 +0200 Subject: [PATCH 4/7] coloring pink --- rowers/interactiveplots.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 7450ee0a..8c48f881 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2225,9 +2225,9 @@ def interactive_chart(id=0,promember=0,intervaldata = {}): intervaldf['itime'] = intervaldf['itime']*1.e3 intervaldf['time'] = intervaldf['itime'].cumsum() intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'].shift(-1) - intervaldf['value'] = 45 + intervaldf['value'] = 10 mask = intervaldf['itype'] == 3 - intervaldf.loc[mask,'value'] = 10 + intervaldf.loc[mask,'value'] = 45 intervaldf['bottom'] = 10 intervalsource = ColumnDataSource( @@ -2235,7 +2235,7 @@ def interactive_chart(id=0,promember=0,intervaldata = {}): ) plot.quad(left='time',top='value',bottom='bottom', - right='time_r',source=intervalsource,color='gray', + right='time_r',source=intervalsource,color='pink', y_range_name='spmax',fill_alpha=0.2,line_alpha=0.2) script, div = components(plot) From a8ca762ee9009e047e3d8d47712dbbfe3e326927 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Wed, 20 Jun 2018 20:30:01 +0200 Subject: [PATCH 5/7] ritmotime implemented --- rowers/dataprep.py | 7 +++++++ rowers/interactiveplots.py | 34 ++++++++++++++++++---------------- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index 24869490..d4f73744 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -34,6 +34,7 @@ from rowingdata import ( MysteryParser, BoatCoachOTWParser,QuiskeParser, painsledDesktopParser, speedcoachParser, ErgStickParser, SpeedCoach2Parser, FITParser, fitsummarydata, + RitmoTimeParser, make_cumvalues,cumcpdata,ExcelTemplate, summarydata, get_file_type, ) @@ -1109,6 +1110,11 @@ def parsenonpainsled(fileformat,f2,summary): row = MysteryParser(f2) hasrecognized = True + # handle ritmo + if (fileformat == 'ritmotime'): + row = RitmoTimeParser(f2) + hasrecognized = True + # handle Quiske if (fileformat == 'quiske'): row = QuiskeParser(f2) @@ -1312,6 +1318,7 @@ def new_workout_from_file(r, f2, fileformat, summary=summary ) + print f2,'noot' if not f2: message = 'Something went wrong' return (0, message, '') diff --git a/rowers/interactiveplots.py b/rowers/interactiveplots.py index 8c48f881..0f5e4594 100644 --- a/rowers/interactiveplots.py +++ b/rowers/interactiveplots.py @@ -2220,23 +2220,25 @@ def interactive_chart(id=0,promember=0,intervaldata = {}): plot.legend.location = "bottom_right" - # add shaded bar chart areas - intervaldf = pd.DataFrame(intervaldata) - intervaldf['itime'] = intervaldf['itime']*1.e3 - intervaldf['time'] = intervaldf['itime'].cumsum() - intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'].shift(-1) - intervaldf['value'] = 10 - mask = intervaldf['itype'] == 3 - intervaldf.loc[mask,'value'] = 45 - intervaldf['bottom'] = 10 - - intervalsource = ColumnDataSource( - intervaldf - ) - plot.quad(left='time',top='value',bottom='bottom', - right='time_r',source=intervalsource,color='pink', - y_range_name='spmax',fill_alpha=0.2,line_alpha=0.2) + # add shaded bar chart areas + if intervaldata: + intervaldf = pd.DataFrame(intervaldata) + intervaldf['itime'] = intervaldf['itime']*1.e3 + intervaldf['time'] = intervaldf['itime'].cumsum() + intervaldf['time_r'] = intervaldf['time'] +intervaldf['itime'].shift(-1) + intervaldf['value'] = 10 + mask = intervaldf['itype'] == 3 + intervaldf.loc[mask,'value'] = 45 + intervaldf['bottom'] = 10 + + intervalsource = ColumnDataSource( + intervaldf + ) + + plot.quad(left='time',top='value',bottom='bottom', + right='time_r',source=intervalsource,color='pink', + y_range_name='spmax',fill_alpha=0.2,line_alpha=0.2) script, div = components(plot) From 67b9879f7fa5c902f0ea668b7049f4034163ddd1 Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 21 Jun 2018 11:07:39 +0200 Subject: [PATCH 6/7] code reuse --- rowers/dataprep.py | 102 +++++++++++---------------------------------- 1 file changed, 24 insertions(+), 78 deletions(-) diff --git a/rowers/dataprep.py b/rowers/dataprep.py index d4f73744..d5c46c6b 100644 --- a/rowers/dataprep.py +++ b/rowers/dataprep.py @@ -1089,82 +1089,37 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower', return (w.id, message) +parsers = { + 'xls': ExcelTemplate, + 'rp': RowProParser, + 'tcx':TCXParser, + 'mystery':MysteryParser, + 'ritmotime':RitmoTimeParser, + 'quiske': QuiskeParser, + 'rowperfect3': RowPerfectParser, + 'coxmate': CoxMateParser, + 'bcmike': BoatCoachAdvancedParser, + 'boatcoach': BoatCoachParser, + 'boatcoachotw': BoatCoachOTWParser, + 'painsleddesktop': painsledDesktopParser, + 'speedcoach': speedcoachParser, + 'speedcoach2': SpeedCoach2Parser, + 'ergstick': ErgStickParser, + 'fit': FITParser, + 'ergdata': ErgDataParser, + } + def parsenonpainsled(fileformat,f2,summary): - # handle RowPro: - if (fileformat == 'xls'): - row = ExcelTemplate(f2) - hasrecognized = True - - - if (fileformat == 'rp'): - row = RowProParser(f2) - hasrecognized = True - # handle TCX - if (fileformat == 'tcx'): - row = TCXParser(f2) - hasrecognized = True - - # handle Mystery - if (fileformat == 'mystery'): - row = MysteryParser(f2) + try: + row = parsers[fileformat](f2) hasrecognized = True + except KeyError: + hasrecognized = False - # handle ritmo - if (fileformat == 'ritmotime'): - row = RitmoTimeParser(f2) - hasrecognized = True - - # handle Quiske - if (fileformat == 'quiske'): - row = QuiskeParser(f2) - hasrecognized = True - - # handle RowPerfect - if (fileformat == 'rowperfect3'): - row = RowPerfectParser(f2) - hasrecognized = True - - # handle ErgData - if (fileformat == 'ergdata'): - row = ErgDataParser(f2) - hasrecognized = True - - # handle CoxMate - if (fileformat == 'coxmate'): - row = CoxMateParser(f2) - hasrecognized = True - - # handle Mike - if (fileformat == 'bcmike'): - row = BoatCoachAdvancedParser(f2) - hasrecognized = True - - # handle BoatCoach - if (fileformat == 'boatcoach'): - row = BoatCoachParser(f2) - hasrecognized = True - - # handle BoatCoach OTW - if (fileformat == 'boatcoachotw'): - row = BoatCoachOTWParser(f2) - hasrecognized = True - - # handle painsled desktop - if (fileformat == 'painsleddesktop'): - row = painsledDesktopParser(f2) - hasrecognized = True - - # handle speed coach GPS - if (fileformat == 'speedcoach'): - row = speedcoachParser(f2) - hasrecognized = True # handle speed coach GPS 2 if (fileformat == 'speedcoach2'): - row = SpeedCoach2Parser(f2) - hasrecognized = True - oarlength, inboard = get_empower_rigging(f2) empowerfirmware = get_empower_firmware(f2) if empowerfirmware != '': @@ -1174,15 +1129,8 @@ def parsenonpainsled(fileformat,f2,summary): summary = row.allstats() - # handle ErgStick - if (fileformat == 'ergstick'): - row = ErgStickParser(f2) - hasrecognized = True - # handle FIT if (fileformat == 'fit'): - row = FITParser(f2) - hasrecognized = True try: s = fitsummarydata(f2) s.setsummary() @@ -1318,13 +1266,11 @@ def new_workout_from_file(r, f2, fileformat, summary=summary ) - print f2,'noot' if not f2: message = 'Something went wrong' return (0, message, '') except Exception as e: errorstring = str(sys.exc_info()[0]) - print e.message message = 'Something went wrong: ' + e.message return (0, message, '') From adbb91dddd2013a4e3e6688867a71d6b0867c09b Mon Sep 17 00:00:00 2001 From: Sander Roosendaal Date: Thu, 21 Jun 2018 13:47:58 +0200 Subject: [PATCH 7/7] localization off in summary_edit --- rowers/templates/summary_edit.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rowers/templates/summary_edit.html b/rowers/templates/summary_edit.html index 3419f077..3a399ebe 100644 --- a/rowers/templates/summary_edit.html +++ b/rowers/templates/summary_edit.html @@ -164,9 +164,11 @@ {% csrf_token %} + {% localize off %} {% for key,value in formvalues.items %} {% endfor %} + {% endlocalize %} {% for field in detailform %} {{ field.as_hidden }} {% endfor %}