Merge branch 'release/v6.95'
This commit is contained in:
+25
-72
@@ -34,6 +34,7 @@ from rowingdata import (
|
|||||||
MysteryParser, BoatCoachOTWParser,QuiskeParser,
|
MysteryParser, BoatCoachOTWParser,QuiskeParser,
|
||||||
painsledDesktopParser, speedcoachParser, ErgStickParser,
|
painsledDesktopParser, speedcoachParser, ErgStickParser,
|
||||||
SpeedCoach2Parser, FITParser, fitsummarydata,
|
SpeedCoach2Parser, FITParser, fitsummarydata,
|
||||||
|
RitmoTimeParser,
|
||||||
make_cumvalues,cumcpdata,ExcelTemplate,
|
make_cumvalues,cumcpdata,ExcelTemplate,
|
||||||
summarydata, get_file_type,
|
summarydata, get_file_type,
|
||||||
)
|
)
|
||||||
@@ -1088,77 +1089,37 @@ def save_workout_database(f2, r, dosmooth=True, workouttype='rower',
|
|||||||
|
|
||||||
return (w.id, message)
|
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):
|
def parsenonpainsled(fileformat,f2,summary):
|
||||||
# handle RowPro:
|
|
||||||
if (fileformat == 'xls'):
|
|
||||||
row = ExcelTemplate(f2)
|
|
||||||
hasrecognized = True
|
|
||||||
|
|
||||||
|
try:
|
||||||
if (fileformat == 'rp'):
|
row = parsers[fileformat](f2)
|
||||||
row = RowProParser(f2)
|
|
||||||
hasrecognized = True
|
hasrecognized = True
|
||||||
|
except KeyError:
|
||||||
|
hasrecognized = False
|
||||||
|
|
||||||
# handle TCX
|
|
||||||
if (fileformat == 'tcx'):
|
|
||||||
row = TCXParser(f2)
|
|
||||||
hasrecognized = True
|
|
||||||
|
|
||||||
# handle Mystery
|
|
||||||
if (fileformat == 'mystery'):
|
|
||||||
row = MysteryParser(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
|
# handle speed coach GPS 2
|
||||||
if (fileformat == 'speedcoach2'):
|
if (fileformat == 'speedcoach2'):
|
||||||
row = SpeedCoach2Parser(f2)
|
|
||||||
hasrecognized = True
|
|
||||||
|
|
||||||
oarlength, inboard = get_empower_rigging(f2)
|
oarlength, inboard = get_empower_rigging(f2)
|
||||||
empowerfirmware = get_empower_firmware(f2)
|
empowerfirmware = get_empower_firmware(f2)
|
||||||
if empowerfirmware != '':
|
if empowerfirmware != '':
|
||||||
@@ -1168,15 +1129,8 @@ def parsenonpainsled(fileformat,f2,summary):
|
|||||||
summary = row.allstats()
|
summary = row.allstats()
|
||||||
|
|
||||||
|
|
||||||
# handle ErgStick
|
|
||||||
if (fileformat == 'ergstick'):
|
|
||||||
row = ErgStickParser(f2)
|
|
||||||
hasrecognized = True
|
|
||||||
|
|
||||||
# handle FIT
|
# handle FIT
|
||||||
if (fileformat == 'fit'):
|
if (fileformat == 'fit'):
|
||||||
row = FITParser(f2)
|
|
||||||
hasrecognized = True
|
|
||||||
try:
|
try:
|
||||||
s = fitsummarydata(f2)
|
s = fitsummarydata(f2)
|
||||||
s.setsummary()
|
s.setsummary()
|
||||||
@@ -1317,7 +1271,6 @@ def new_workout_from_file(r, f2,
|
|||||||
return (0, message, '')
|
return (0, message, '')
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errorstring = str(sys.exc_info()[0])
|
errorstring = str(sys.exc_info()[0])
|
||||||
print e.message
|
|
||||||
message = 'Something went wrong: ' + e.message
|
message = 'Something went wrong: ' + e.message
|
||||||
return (0, message, '')
|
return (0, message, '')
|
||||||
|
|
||||||
|
|||||||
@@ -2114,7 +2114,7 @@ def interactive_streamchart(id=0,promember=0):
|
|||||||
|
|
||||||
return [script,div]
|
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
|
# Add hover to this comma-separated string and see what changes
|
||||||
if (promember==1):
|
if (promember==1):
|
||||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,resize,crosshair'
|
||||||
@@ -2220,6 +2220,26 @@ def interactive_chart(id=0,promember=0):
|
|||||||
|
|
||||||
plot.legend.location = "bottom_right"
|
plot.legend.location = "bottom_right"
|
||||||
|
|
||||||
|
|
||||||
|
# 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)
|
script, div = components(plot)
|
||||||
|
|
||||||
return [script,div]
|
return [script,div]
|
||||||
@@ -3398,7 +3418,7 @@ def thumbnail_flex_chart(rowdata,id=0,promember=0,
|
|||||||
try:
|
try:
|
||||||
tseconds = rowdata.ix[:,'time']
|
tseconds = rowdata.ix[:,'time']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return '','No time data - cannot make flex plot','',''
|
return '','No time data - cannot make flex plot'
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
+16
-5
@@ -1641,12 +1641,23 @@ class VirtualRaceResult(models.Model):
|
|||||||
u1 = rr.user.first_name,
|
u1 = rr.user.first_name,
|
||||||
u2 = rr.user.last_name,
|
u2 = rr.user.last_name,
|
||||||
)
|
)
|
||||||
return u'Entry for {n} for "{r}" in {c} {d}'.format(
|
if self.teamname:
|
||||||
n = name,
|
return u'Entry for {n} for "{r}" in {c} {d} with {t} ({s})'.format(
|
||||||
r = self.race,
|
n = name,
|
||||||
d = self.boattype,
|
r = self.race,
|
||||||
c = self.boatclass,
|
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):
|
class CourseTestResult(models.Model):
|
||||||
|
|||||||
@@ -164,9 +164,11 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="{{ savebutton }}" value="{{ intervalstring }}">
|
<input type="hidden" name="{{ savebutton }}" value="{{ intervalstring }}">
|
||||||
<input type="hidden" name="nrintervals" value={{ nrintervals }}>
|
<input type="hidden" name="nrintervals" value={{ nrintervals }}>
|
||||||
|
{% localize off %}
|
||||||
{% for key,value in formvalues.items %}
|
{% for key,value in formvalues.items %}
|
||||||
<input type="hidden" name="{{ key }}" value="{{ value }}">
|
<input type="hidden" name="{{ key }}" value="{{ value }}">
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
{% endlocalize %}
|
||||||
{% for field in detailform %}
|
{% for field in detailform %}
|
||||||
{{ field.as_hidden }}
|
{{ field.as_hidden }}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|||||||
+26
-9
@@ -11286,13 +11286,6 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
return HttpResponse("Error: CSV Data File Not Found")
|
return HttpResponse("Error: CSV Data File Not Found")
|
||||||
nrintervals = len(idist)
|
nrintervals = len(idist)
|
||||||
|
|
||||||
# create interactive plot
|
|
||||||
try:
|
|
||||||
res = interactive_chart(id,promember=1)
|
|
||||||
script = res[0]
|
|
||||||
div = res[1]
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
savebutton = 'nosavebutton'
|
savebutton = 'nosavebutton'
|
||||||
formvalues = {}
|
formvalues = {}
|
||||||
@@ -11305,14 +11298,22 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
try:
|
try:
|
||||||
avpace = datetime.timedelta(seconds=int(500./normv))
|
avpace = datetime.timedelta(seconds=int(500./normv))
|
||||||
except:
|
except:
|
||||||
avpage = datetime.timedelta(seconds=130)
|
avpace = datetime.timedelta(seconds=130)
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'power': int(normp),
|
'power': int(normp),
|
||||||
'pace': avpace,
|
'pace': avpace,
|
||||||
'selector': normp,
|
'selector': 'power',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
powerorpace = 'power'
|
||||||
|
|
||||||
|
if normp == 0:
|
||||||
|
data['selector'] = 'pace'
|
||||||
|
powerorpace = 'pace'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
powerupdateform = PowerIntervalUpdateForm(initial=data)
|
powerupdateform = PowerIntervalUpdateForm(initial=data)
|
||||||
|
|
||||||
# We have submitted the mini language interpreter
|
# We have submitted the mini language interpreter
|
||||||
@@ -11568,6 +11569,22 @@ def workout_summary_edit_view(request,id,message="",successmessage=""
|
|||||||
|
|
||||||
detailform = IntervalUpdateForm(aantal=nrintervals,initial=initial)
|
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
|
# render page
|
||||||
|
|
||||||
return render(request, 'summary_edit.html',
|
return render(request, 'summary_edit.html',
|
||||||
|
|||||||
Reference in New Issue
Block a user