Merge branch 'release/v12.94'
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -55,6 +55,7 @@ config.yaml
|
|||||||
|
|
||||||
# virtualenv
|
# virtualenv
|
||||||
/venv/
|
/venv/
|
||||||
|
/venv38/
|
||||||
/py27/
|
/py27/
|
||||||
/py2/
|
/py2/
|
||||||
/django2/
|
/django2/
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ jupyterlab-server==0.3.0
|
|||||||
keyring==18.0.0
|
keyring==18.0.0
|
||||||
kiwisolver==1.0.1
|
kiwisolver==1.0.1
|
||||||
kombu==4.5.0
|
kombu==4.5.0
|
||||||
llvmlite==0.30.0
|
llvmlite==0.33.0
|
||||||
lxml==4.3.2
|
lxml==4.3.2
|
||||||
Markdown==3.0.1
|
Markdown==3.0.1
|
||||||
MarkupSafe==1.1.1
|
MarkupSafe==1.1.1
|
||||||
@@ -126,7 +126,7 @@ nose==1.3.7
|
|||||||
nose-parameterized==0.6.0
|
nose-parameterized==0.6.0
|
||||||
notebook==5.7.6
|
notebook==5.7.6
|
||||||
numba==0.46.0
|
numba==0.46.0
|
||||||
numpy==1.18.3
|
numpy==1.18.5
|
||||||
oauth2==1.9.0.post1
|
oauth2==1.9.0.post1
|
||||||
oauthlib==3.0.1
|
oauthlib==3.0.1
|
||||||
openapi-codec==1.3.2
|
openapi-codec==1.3.2
|
||||||
@@ -148,7 +148,7 @@ protobuf==3.11.1
|
|||||||
psycopg2==2.8.1
|
psycopg2==2.8.1
|
||||||
ptyprocess==0.6.0
|
ptyprocess==0.6.0
|
||||||
py==1.8.0
|
py==1.8.0
|
||||||
pyarrow==0.15.0
|
pyarrow==0.17.1
|
||||||
pycairo==1.19.0
|
pycairo==1.19.0
|
||||||
pycparser==2.19
|
pycparser==2.19
|
||||||
Pygments==2.3.1
|
Pygments==2.3.1
|
||||||
|
|||||||
@@ -5481,8 +5481,11 @@ def interactive_multiple_compare_chart(ids,xparam,yparam,plottype='line',
|
|||||||
else:
|
else:
|
||||||
windowsize = 1
|
windowsize = 1
|
||||||
|
|
||||||
if windowsize >= 3 and windowsize < len(group['y']):
|
if windowsize > 3 and windowsize < len(group['y']):
|
||||||
group['y'] = savgol_filter(group['y'],windowsize,3)
|
try:
|
||||||
|
group['y'] = savgol_filter(group['y'],windowsize,3)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
ylabel = Label(x=100,y=60+nrworkouts*20-20*cntr,
|
ylabel = Label(x=100,y=60+nrworkouts*20-20*cntr,
|
||||||
x_units='screen',y_units='screen',
|
x_units='screen',y_units='screen',
|
||||||
|
|||||||
@@ -41,6 +41,54 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
<li class="grid_4">
|
||||||
|
<h2>How-to</h2>
|
||||||
|
<p>
|
||||||
|
Courses allow you to mark the start & finish lines of your
|
||||||
|
test pieces and measure the time spent on the course (as opposed
|
||||||
|
to the total duration of a workout). This allows you to row and rank
|
||||||
|
marked courses.
|
||||||
|
|
||||||
|
To create a course, you use <a href="https://www.google.com/earth/">Google Earth</a>
|
||||||
|
to mark the start and finish lines using polygons. The process is identical
|
||||||
|
to creating custom courses for the
|
||||||
|
<a href="http://performancephones.com/crewnerd/">CrewNerd</a>
|
||||||
|
app.
|
||||||
|
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>CrewNerd has published a nice video tutorial of the process.
|
||||||
|
<a href="https://youtu.be/whhWFmMJbhM">Click here</a> to see the video. The part
|
||||||
|
we're interested in starts at 2:05.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
In addition to start and finish areas, on rowsandall.com you can add additional
|
||||||
|
polygons to mark areas that you must pass (in that order). This allows for
|
||||||
|
courses with turns around buoys, respecting buoy lines, or respecting traffic
|
||||||
|
patterns on rivers and lakes.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
<li>Open Google Earth</li>
|
||||||
|
<li>Create a folder "Courses" under "Temporary Places" or under "My Places"</li>
|
||||||
|
<li>Create a folder for each Course under "Courses", and for each course:</li>
|
||||||
|
<li>Create Start polygon</li>
|
||||||
|
<li>Optional: Create First "must row through" polygon</li>
|
||||||
|
<li>Optional: Create subsequent "must row through" polygons</li>
|
||||||
|
<li>Create Finish polygon</li>
|
||||||
|
<li>Save "Courses" as KML file</li>
|
||||||
|
<li>Upload the file to rowsandall.com using the "Add Courses" button</li>
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>You are allowed to have multiple courses in one KML file.
|
||||||
|
Your CrewNerd "courses.kml" file works out of the box</p>
|
||||||
|
|
||||||
|
<p>The site doesn't test for duplicate courses.</p>
|
||||||
|
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -112,11 +112,11 @@
|
|||||||
<i class="fas fa-map fa-fw"></i> Map View
|
<i class="fas fa-map fa-fw"></i> Map View
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% if course.manager == rower %}
|
|
||||||
<li id="course-emailkml">
|
<li id="course-emailkml">
|
||||||
<a href="/rowers/courses/{{ course.id }}/downloadkml/">
|
<a href="/rowers/courses/{{ course.id }}/downloadkml/">
|
||||||
<i class="fas fa-globe-americas fa-fw"></i> Download as KML</a>
|
<i class="fas fa-globe-americas fa-fw"></i> Download as KML</a>
|
||||||
</li>
|
</li>
|
||||||
|
{% if course.manager == rower %}
|
||||||
<li id="course-editview">
|
<li id="course-editview">
|
||||||
<a href="/rowers/courses/{{ course.id }}/edit/">
|
<a href="/rowers/courses/{{ course.id }}/edit/">
|
||||||
<i class="fas fa-pencil-alt fa-fw"></i> Edit</a>
|
<i class="fas fa-pencil-alt fa-fw"></i> Edit</a>
|
||||||
|
|||||||
@@ -81,7 +81,10 @@ def plannedsession_comment_view(request,id=0,userid=0):
|
|||||||
rowers = {r.user for r in ps.rower.all()}
|
rowers = {r.user for r in ps.rower.all()}
|
||||||
commenters = set(list(commenters)+list(rowers))
|
commenters = set(list(commenters)+list(rowers))
|
||||||
for u in commenters:
|
for u in commenters:
|
||||||
a_messages.info(u,message)
|
try:
|
||||||
|
a_messages.info(u,message)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
if u != request.user and u != r.user:
|
if u != request.user and u != r.user:
|
||||||
ocr = Rower.objects.get(user=u)
|
ocr = Rower.objects.get(user=u)
|
||||||
res = myqueue(queuelow,
|
res = myqueue(queuelow,
|
||||||
|
|||||||
@@ -1209,7 +1209,10 @@ def virtualevent_view(request,id=0):
|
|||||||
|
|
||||||
orderby = request.GET.get('order_by')
|
orderby = request.GET.get('order_by')
|
||||||
if orderby is not None:
|
if orderby is not None:
|
||||||
results = results.order_by(orderby)
|
try:
|
||||||
|
results = results.order_by(orderby)
|
||||||
|
except AttributeError:
|
||||||
|
pass
|
||||||
|
|
||||||
racelogos = race.logos.all()
|
racelogos = race.logos.all()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user