Merge branch 'release/v6.95'
This commit is contained in:
+25
-72
@@ -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,
|
||||
)
|
||||
@@ -1088,77 +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)
|
||||
try:
|
||||
row = parsers[fileformat](f2)
|
||||
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
|
||||
if (fileformat == 'speedcoach2'):
|
||||
row = SpeedCoach2Parser(f2)
|
||||
hasrecognized = True
|
||||
|
||||
oarlength, inboard = get_empower_rigging(f2)
|
||||
empowerfirmware = get_empower_firmware(f2)
|
||||
if empowerfirmware != '':
|
||||
@@ -1168,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()
|
||||
@@ -1317,7 +1271,6 @@ def new_workout_from_file(r, f2,
|
||||
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, '')
|
||||
|
||||
|
||||
@@ -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'
|
||||
@@ -2220,6 +2220,26 @@ def interactive_chart(id=0,promember=0):
|
||||
|
||||
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)
|
||||
|
||||
return [script,div]
|
||||
@@ -3398,7 +3418,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:
|
||||
|
||||
+12
-1
@@ -1641,11 +1641,22 @@ 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(
|
||||
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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -164,9 +164,11 @@
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="{{ savebutton }}" value="{{ intervalstring }}">
|
||||
<input type="hidden" name="nrintervals" value={{ nrintervals }}>
|
||||
{% localize off %}
|
||||
{% for key,value in formvalues.items %}
|
||||
<input type="hidden" name="{{ key }}" value="{{ value }}">
|
||||
{% endfor %}
|
||||
{% endlocalize %}
|
||||
{% for field in detailform %}
|
||||
{{ field.as_hidden }}
|
||||
{% endfor %}
|
||||
|
||||
+26
-9
@@ -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 = {}
|
||||
@@ -11305,14 +11298,22 @@ 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),
|
||||
'pace': avpace,
|
||||
'selector': normp,
|
||||
'selector': 'power',
|
||||
}
|
||||
|
||||
powerorpace = 'power'
|
||||
|
||||
if normp == 0:
|
||||
data['selector'] = 'pace'
|
||||
powerorpace = 'pace'
|
||||
|
||||
|
||||
|
||||
powerupdateform = PowerIntervalUpdateForm(initial=data)
|
||||
|
||||
# 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)
|
||||
|
||||
# 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',
|
||||
|
||||
Reference in New Issue
Block a user