Private
Public Access
1
0

Merge tag 'paceline' into develop

1.0.4
This commit is contained in:
sanderroosendaal
2016-10-31 21:19:02 +01:00
3 changed files with 66 additions and 33 deletions

View File

@@ -96,7 +96,7 @@ def nicepaceformat(values):
return out return out
def get_datetimes(seconds,tzinfo=0): def get_datetimes(seconds,tzinfo=0,datevalues=0):
out = [] out = []
for second in seconds: for second in seconds:
if (second<=0) or (second>1e9): if (second<=0) or (second>1e9):
@@ -122,6 +122,10 @@ def get_datetimes(seconds,tzinfo=0):
seconds=sec,microseconds=microsecond) seconds=sec,microseconds=microsecond)
if datevalues==1:
t = datetime.datetime(2016,5,1)+dt
dt = t
out.append(dt) out.append(dt)
@@ -246,7 +250,8 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
velo = thedistances/thesecs velo = thedistances/thesecs
p = 500./velo p = 500./velo
p2 = get_datetimes(p) p2 = get_datetimes(p,datevalues=1)
p2a = get_datetimes(p)
source = ColumnDataSource( source = ColumnDataSource(
data = dict( data = dict(
@@ -255,7 +260,7 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
spm = 0*theavpower, spm = 0*theavpower,
tim = niceformat(get_datetimes(thesecs,tzinfo=1)), tim = niceformat(get_datetimes(thesecs,tzinfo=1)),
power = theavpower, power = theavpower,
pace = nicepaceformat(p2), pace = nicepaceformat(p2a),
) )
) )
@@ -273,7 +278,8 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
fitvelo = 500./fitp fitvelo = 500./fitp
fitpower = 2.8*(fitvelo**3) fitpower = 2.8*(fitvelo**3)
fitt = 10**fitx/fitvelo fitt = 10**fitx/fitvelo
fitp2 = get_datetimes(fitp) fitp2 = get_datetimes(fitp,datevalues=1)
fitp2a = get_datetimes(fitp,datevalues=0)
sourcepaul = ColumnDataSource( sourcepaul = ColumnDataSource(
@@ -283,7 +289,7 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
power = fitpower, power = fitpower,
spm = 0*fitpower, spm = 0*fitpower,
tim = niceformat(get_datetimes(fitt,tzinfo=1)), tim = niceformat(get_datetimes(fitt,tzinfo=1)),
pace = nicepaceformat(fitp2), pace = nicepaceformat(fitp2a),
) )
) )
@@ -333,7 +339,8 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
fitvelo = (fitpower/2.8)**(1./3.) fitvelo = (fitpower/2.8)**(1./3.)
fitdist = fitt*fitvelo fitdist = fitt*fitvelo
fitp = 500./fitvelo fitp = 500./fitvelo
fitp2 = get_datetimes(fitp) fitp2 = get_datetimes(fitp,datevalues=1)
fitp2a = get_datetimes(fitp,datevalues=0)
sourcecomplex = ColumnDataSource( sourcecomplex = ColumnDataSource(
data = dict( data = dict(
@@ -342,7 +349,7 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
tim = niceformat(get_datetimes(fitt,tzinfo=1)), tim = niceformat(get_datetimes(fitt,tzinfo=1)),
spm = 0*fitpower, spm = 0*fitpower,
power = fitpower, power = fitpower,
pace = nicepaceformat(fitp2), pace = nicepaceformat(fitp2a),
) )
) )
@@ -371,7 +378,8 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
p = 500./velo p = 500./velo
p2 = get_datetimes(p) p2 = get_datetimes(p,datevalues=1)
p2a = get_datetimes(p,datevalues=0)
source2 = ColumnDataSource( source2 = ColumnDataSource(
data = dict( data = dict(
@@ -379,7 +387,7 @@ def interactive_cpchart(thedistances,thesecs,theavpower,
power = cpdata['CP'], power = cpdata['CP'],
tim = niceformat(get_datetimes(cpdata['Delta'],tzinfo=1)), tim = niceformat(get_datetimes(cpdata['Delta'],tzinfo=1)),
dist = cpdata['Distance'], dist = cpdata['Distance'],
pace = nicepaceformat(p2), pace = nicepaceformat(p2a),
) )
) )
@@ -643,7 +651,8 @@ def interactive_chart(id=0,promember=0):
# p[p>3000] = 3000. # p[p>3000] = 3000.
p2 = get_datetimes(p) p2 = get_datetimes(p,datevalues=1)
p2a = get_datetimes(p,datevalues=0)
source = ColumnDataSource( source = ColumnDataSource(
data = dict( data = dict(
@@ -651,7 +660,7 @@ def interactive_chart(id=0,promember=0):
y=hr, y=hr,
y2=p2, y2=p2,
tf = niceformat(t2), tf = niceformat(t2),
pace = nicepaceformat(p2), pace = nicepaceformat(p2a),
heartrate = hr, heartrate = hr,
spm=spm, spm=spm,
spmc=np.rint(10*spm)/10., spmc=np.rint(10*spm)/10.,
@@ -873,7 +882,7 @@ def interactive_cum_flex_chart(theworkouts,promember=0,
if yparam1 == 'pace': if yparam1 == 'pace':
y_axis_type = 'datetime' y_axis_type = 'datetime'
y1 = get_datetimes(y1) y1 = get_datetimes(y1,datevalues=1)
ymax = datetime.datetime(2016,5,1,0,1,30) ymax = datetime.datetime(2016,5,1,0,1,30)
ymin = datetime.datetime(2016,5,1,0,2,30) ymin = datetime.datetime(2016,5,1,0,2,30)
@@ -1302,7 +1311,7 @@ def interactive_flex_chart(id=0,promember=0,
if yparam1 == 'pace': if yparam1 == 'pace':
y_axis_type = 'datetime' y_axis_type = 'datetime'
y1 = get_datetimes(y1) y1 = get_datetimes(y1,datevalues=1)
ymax = datetime.datetime(2016,5,1,0,1,30) ymax = datetime.datetime(2016,5,1,0,1,30)
ymin = datetime.datetime(2016,5,1,0,2,30) ymin = datetime.datetime(2016,5,1,0,2,30)
@@ -1483,7 +1492,7 @@ def interactive_flex_chart2(id=0,promember=0,
yaxminima = { yaxminima = {
'hr':100, 'hr':100,
'spm':15, 'spm':15,
'pace': datetime.datetime(2016,5,1,0,3,30), 'pace': datetime.timedelta(minutes=1,seconds=40),
'power': 0, 'power': 0,
'averageforce': 0, 'averageforce': 0,
'peakforce': 0, 'peakforce': 0,
@@ -1495,7 +1504,7 @@ def interactive_flex_chart2(id=0,promember=0,
yaxmaxima = { yaxmaxima = {
'hr':200, 'hr':200,
'spm':45, 'spm':45,
'pace':datetime.datetime(2016,5,1,0,1,30), 'pace':datetime.timedelta(minutes=3,seconds=30),
'power': 600, 'power': 600,
'averageforce':200, 'averageforce':200,
'peakforce':400, 'peakforce':400,
@@ -1612,7 +1621,7 @@ def interactive_flex_chart2(id=0,promember=0,
if yparam1 == 'pace': if yparam1 == 'pace':
y_axis_type = 'datetime' y_axis_type = 'datetime'
y1 = get_datetimes(y1) y1 = get_datetimes(y1,datevalues=1)
ymax = datetime.datetime(2016,5,1,0,1,30) ymax = datetime.datetime(2016,5,1,0,1,30)
ymin = datetime.datetime(2016,5,1,0,2,30) ymin = datetime.datetime(2016,5,1,0,2,30)
@@ -1720,8 +1729,9 @@ def interactive_flex_chart2(id=0,promember=0,
yrange1 = Range1d(start=yaxminima[yparam1],end=yaxmaxima[yparam1]) if (yparam1 != 'pace'):
plot.y_range = yrange1 yrange1 = Range1d(start=yaxminima[yparam1],end=yaxmaxima[yparam1])
plot.y_range = yrange1
if (xparam != 'time') and (xparam != 'distance'): if (xparam != 'time') and (xparam != 'distance'):
xrange1 = Range1d(start=yaxminima[xparam],end=yaxmaxima[xparam]) xrange1 = Range1d(start=yaxminima[xparam],end=yaxmaxima[xparam])
@@ -1747,7 +1757,7 @@ def interactive_flex_chart2(id=0,promember=0,
minutes = ["%M"] minutes = ["%M"]
) )
if yparam2 != 'None': if yparam2 != 'None' and yparam2 != 'pace':
yrange2 = Range1d(start=yaxminima[yparam2],end=yaxmaxima[yparam2]) yrange2 = Range1d(start=yaxminima[yparam2],end=yaxmaxima[yparam2])
plot.extra_y_ranges = {"yax2": yrange2} plot.extra_y_ranges = {"yax2": yrange2}
@@ -1965,7 +1975,8 @@ def interactive_bar_chart(id=0,promember=0):
TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair' TOOLS = 'pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
t2 = get_datetimes(t,tzinfo=1) t2 = get_datetimes(t,tzinfo=1)
p2 = get_datetimes(p) p2 = get_datetimes(p,datevalues=1)
p2a = get_datetimes(p,datevalues=0)
source = ColumnDataSource( source = ColumnDataSource(
data = dict( data = dict(
@@ -1981,7 +1992,7 @@ def interactive_bar_chart(id=0,promember=0):
hr_bottom = 0.0*hr, hr_bottom = 0.0*hr,
y2=p2, y2=p2,
tf = niceformat(t2), tf = niceformat(t2),
pace = nicepaceformat(p2), pace = nicepaceformat(p2a),
heartrate = hr, heartrate = hr,
spmc=np.rint(10*spm)/10., spmc=np.rint(10*spm)/10.,
spm=spm, spm=spm,
@@ -2173,8 +2184,8 @@ def interactive_comparison_chart(id1=0,id2=0,xparam='distance',yparam='spm',
if yparam == 'pace': if yparam == 'pace':
y_axis_type = 'datetime' y_axis_type = 'datetime'
y1 = get_datetimes(y1) y1 = get_datetimes(y1,datevalues=1)
y2 = get_datetimes(y2) y2 = get_datetimes(y2,datevalues=1)
ymax = datetime.datetime(2016,5,1,0,1,30) ymax = datetime.datetime(2016,5,1,0,1,30)
ymin = datetime.datetime(2016,5,1,0,2,30) ymin = datetime.datetime(2016,5,1,0,2,30)
@@ -2363,9 +2374,12 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0):
rowdata.df[' DriveLength (meters)'] = drivelength rowdata.df[' DriveLength (meters)'] = drivelength
t2 = get_datetimes(t,tzinfo=1) t2 = get_datetimes(t,tzinfo=1)
p2 = get_datetimes(p) p2 = get_datetimes(p,datevalues=1)
nowindp2 = get_datetimes(nowindpace) p2a = get_datetimes(p,datevalues=0)
ergpace2 = get_datetimes(ergpace) nowindp2 = get_datetimes(nowindpace,datevalues=1)
nowindp2a = get_datetimes(nowindpace,datevalues=0)
ergpace2 = get_datetimes(ergpace,datevalues=1)
ergpace2a = get_datetimes(ergpace,datevalues=0)
# 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):
@@ -2380,9 +2394,9 @@ def interactive_otw_advanced_pace_chart(id=0,promember=0):
nowindp2 = nowindp2, nowindp2 = nowindp2,
ergpace2 = ergpace2, ergpace2 = ergpace2,
tf = niceformat(t2), tf = niceformat(t2),
pace = nicepaceformat(p2), pace = nicepaceformat(p2a),
ergpace = nicepaceformat(ergpace2), ergpace = nicepaceformat(ergpace2a),
nowindpace = nicepaceformat(nowindp2), nowindpace = nicepaceformat(nowindp2a),
heartrate = hr, heartrate = hr,
spm=spm, spm=spm,
spmc=np.rint(10*spm)/10., spmc=np.rint(10*spm)/10.,

View File

@@ -164,13 +164,13 @@
<td> {{ value }} m </td> <td> {{ value }} m </td>
{% endif %} {% endif %}
{% if key == "pace" %} {% if key == "pace" %}
<td> {{ value |durationprint:"%M:%S.%f" }} </td> <td> {{ value |paceprint }} </td>
{% endif %} {% endif %}
{% if key == "power" %} {% if key == "power" %}
<td> {{ value }} W </td> <td> {{ value }} W </td>
{% endif %} {% endif %}
{% if key == "duration" %} {% if key == "duration" %}
<td> {{ value |durationprint:"%H:%M:%S.%f" }} </td> <td> {{ value |paceprint }} </td>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</tr> </tr>
@@ -203,13 +203,13 @@
<td> {{ value }} m </td> <td> {{ value }} m </td>
{% endif %} {% endif %}
{% if key == "pace" %} {% if key == "pace" %}
<td> {{ value |durationprint:"%M:%S.%f" }} </td> <td> {{ value |paceprint }} </td>
{% endif %} {% endif %}
{% if key == "power" %} {% if key == "power" %}
<td> {{ value }} W </td> <td> {{ value }} W </td>
{% endif %} {% endif %}
{% if key == "duration" %} {% if key == "duration" %}
<td> {{ value |durationprint:"%H:%M:%S.%f" }} </td> <td> {{ value |paceprint }} </td>
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</tr> </tr>

View File

@@ -3,6 +3,17 @@ from time import strftime
register = template.Library() register = template.Library()
def strfdelta(tdelta):
minutes,seconds = divmod(tdelta.seconds,60)
tenths = int(tdelta.microseconds/1e5)
res = "{minutes:0>2}:{seconds:0>2}.{tenths:0>1}".format(
minutes=minutes,
seconds=seconds,
tenths=tenths,
)
return res
@register.filter @register.filter
def durationprint(d,dstring): def durationprint(d,dstring):
if (d == None): if (d == None):
@@ -10,6 +21,14 @@ def durationprint(d,dstring):
else: else:
return d.strftime(dstring)[:-5] return d.strftime(dstring)[:-5]
@register.filter
def paceprint(d):
if (d == None):
return d
else:
return strfdelta(d)
@register.filter @register.filter
def lookup(dict, key): def lookup(dict, key):
s = dict.get(key) s = dict.get(key)