Private
Public Access
1
0

Merge branch 'release/v18.6.19'

This commit is contained in:
Sander Roosendaal
2022-09-15 21:55:25 +02:00
9 changed files with 94 additions and 19 deletions
+16 -2
View File
@@ -100,8 +100,22 @@ def alert_get_stats(alert, nperiod=0): # pragma: no cover
boattype=alert.boattype)
ids = [w.id for w in workouts]
df = getsmallrowdata_db(columns, ids=ids, doclean=True,
workstrokesonly=workstrokesonly)
try:
df = getsmallrowdata_db(columns, ids=ids, doclean=True,
workstrokesonly=workstrokesonly)
except:
return {
'workouts': workouts.count(),
'startdate': startdate,
'enddate': enddate,
'nr_strokes': 0,
'nr_strokes_qualifying': 0,
'percentage': 0,
'nperiod': nperiod,
'median': 0,
'median_q': 0,
'standard_dev': 0,
}
if df.empty:
return {
+5 -2
View File
@@ -1246,8 +1246,11 @@ def getsmallrowdata_db(columns, ids=[], doclean=True, workstrokesonly=True, comp
if rowdata and len(rowdata.df):
_ = dataprep(rowdata.df, id=id,
bands=True, otwpower=True, barchart=True)
df = pd.read_parquet(f, columns=columns)
data.append(df)
try:
df = pd.read_parquet(f, columns=columns)
data.append(df)
except (OSError, ArrowInvalid, IndexError):
pass
try:
df = pd.concat(data, axis=0)
+16
View File
@@ -365,6 +365,9 @@ def interactive_boxchart(datadf, fieldname, extratitle='',
plot.y_range = yrange1
plot.sizing_mode = 'stretch_both'
if extratitle:
plot.title.text = extratitle
plot.xaxis.axis_label = 'Date'
plot.yaxis.axis_label = axlabels[fieldname]
@@ -1970,6 +1973,7 @@ def performance_chart(user, startdate=None, enddate=None, kfitness=42, kfatigue=
def interactive_histoall(theworkouts, histoparam, includereststrokes,
spmmin=0, spmmax=55,
extratitle='',
workmin=0, workmax=1500):
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,hover,crosshair'
@@ -2013,6 +2017,10 @@ def interactive_histoall(theworkouts, histoparam, includereststrokes,
toolbar_location="above"
)
if extratitle:
plot.title.text = extratitle
# add watermark
watermarkurl = "/static/img/logo7.png"
watermarkrange = Range1d(start=0, end=1)
@@ -4470,6 +4478,9 @@ def interactive_multiflex(datadf, xparam, yparam, groupby, extratitle='',
gr=groupname,
)
if extratitle is not None:
title = title+' '+extratitle
if xparam == 'cumdist': # pragma: no cover
res = make_cumvalues(datadf[xparam])
datadf[xparam] = res[0]
@@ -4659,6 +4670,7 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
yparam1='power',
yparam2='spm',
workstrokesonly=False,
extratitle='',
trendline=False):
# datadf = dataprep.smalldataprep(theworkouts,xparam,yparam1,yparam2)
@@ -4789,6 +4801,10 @@ def interactive_cum_flex_chart2(theworkouts, promember=0,
plot.extra_x_ranges = {"watermark": watermarkrange}
plot.sizing_mode = 'stretch_both'
if extratitle:
plot.title.text = extratitle
plot.image_url([watermarkurl], watermarkx, watermarky,
watermarkw, watermarkh,
global_alpha=watermarkalpha,
+3 -7
View File
@@ -1,6 +1,6 @@
{% if stats %}
<h2>Statistics</h2>
<h2>Statistics {{ extratitle }}</h2>
<table width="100%" class="listtable">
<thead>
<tr>
@@ -28,7 +28,7 @@
</tr>
{% endfor %}
</tbody>
</table>
</table>
{% endif %}
@@ -67,10 +67,6 @@
</tr>
{% endfor %}
</tbody>
</table>
</table>
{% endif %}
+1 -1
View File
@@ -528,7 +528,7 @@
<script>
$(function($) {
console.log('loading script');
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/analysisdata/', function(json) {
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/analysisdata/user/{{ rower.user.id }}', function(json) {
var counter=0;
var script = json.script;
var div = json.div;
+13
View File
@@ -69,6 +69,15 @@ class ChallengesTest(TestCase):
gdproptindate=timezone.now(),
rowerplan='basic')
self.u3 = UserFactory()
self.follower = Rower.objects.create(user=self.u3,
birthdate=datetime.datetime.now()-datetime.timedelta(days=28*365),
gdproptin=True,surveydone=True,
gdproptindate=timezone.now(),
rowerplan='basic')
self.c = Client()
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
self.factory = RequestFactory()
@@ -160,6 +169,10 @@ class ChallengesTest(TestCase):
)
self.SpeedOrder.save()
flw = VirtualRaceFollower.objects.create(race=self.SpeedOrder,
user=self.u3,
emailaddress='bla@bla.com')
self.result = VirtualRaceResult(
userid = self.u2.id,
username = self.u2.username,
+2
View File
@@ -419,6 +419,8 @@ urlpatterns = [
re_path(r'^ote-bests2/user/(?P<userid>\d+)/$',
views.rankings_view2, name='rankings_view2'),
re_path(r'^ote-bests2/$', views.rankings_view2, name='rankings_view2'),
re_path(r'^analysisdata/user/(?P<userid>\d+)/$', views.analysis_view_data,
name='analysis_view_data'),
re_path(r'^analysisdata/$', views.analysis_view_data,
name='analysis_view_data'),
re_path(r'^graph/(?P<id>\d+)/$',
+28
View File
@@ -459,6 +459,7 @@ def trendflexdata(workouts, options, userid=0):
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script, div = interactive_multiflex(df, xparam, yparam,
groupby,
extratitle=extratitle,
@@ -484,10 +485,19 @@ def flexalldata(workouts, options):
workstrokesonly = not includereststrokes
userid = options['userid']
if userid == 0: # pragma: no cover
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
res = interactive_cum_flex_chart2(workouts, xparam=xparam,
yparam1=yparam1,
yparam2=yparam2,
promember=promember,
extratitle=extratitle,
workstrokesonly=workstrokesonly,
trendline=trendline,
)
@@ -507,9 +517,18 @@ def histodata(workouts, options):
spmmax = options['spmmax']
workmin = options['workmin']
workmax = options['workmax']
userid = options['userid']
if userid == 0: # pragma: no cover
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
script, div = interactive_histoall(workouts, plotfield, includereststrokes,
spmmin=spmmin, spmmax=spmmax,
extratitle=extratitle,
workmin=workmin, workmax=workmax)
scripta = script.split('\n')[2:-1]
@@ -675,6 +694,14 @@ def statsdata(workouts, options):
includereststrokes = options['includereststrokes']
ids = options['ids']
userid = options['userid']
if userid == 0: # pragma: no cover
extratitle = ''
else:
u = User.objects.get(id=userid)
extratitle = ' '+u.first_name+' '+u.last_name
workstrokesonly = not includereststrokes
ids = [w.id for w in workouts]
@@ -728,6 +755,7 @@ def statsdata(workouts, options):
context = {
'stats': stats,
'cordict': cordict,
'extratitle': extratitle,
}
htmly = env.get_template('statsdiv.html')
+10 -7
View File
@@ -1873,6 +1873,8 @@ def virtualevent_addboat_view(request, id=0):
otherrecords = resultobj.objects.filter(
race=race).exclude(userid=r.id)
registereduserids = [otherrecord.userid for otherrecord in otherrecords]
for otherrecord in otherrecords:
try:
otheruser = Rower.objects.get(id=otherrecord.userid)
@@ -1892,19 +1894,20 @@ def virtualevent_addboat_view(request, id=0):
followers = VirtualRaceFollower.objects.filter(race=race)
for follower in followers: # pragma: no cover
for follower in followers:
othername = ''
if follower.user:
othername = follower.user.first_name+' '+follower.user.last_name
registeredname = r.user.first_name+' '+r.user.last_name
email = follower.emailaddress
_ = myqueue(
queue,
handle_sendemail_raceregistration,
email, othername,
registeredname, race.name, race.id,
)
if follower.user.id not in registereduserids:
_ = myqueue(
queue,
handle_sendemail_raceregistration,
email, othername,
registeredname, race.name, race.id,
)
url = reverse('virtualevent_view',
kwargs={