Merge branch 'develop' into feature/opaqueid
This commit is contained in:
@@ -746,7 +746,8 @@ class PlanSelectForm(forms.Form):
|
||||
self.fields['plan'].empty_label = None
|
||||
if paymentprocessor:
|
||||
self.fields['plan'].queryset = PaidPlan.objects.filter(
|
||||
paymentprocessor=paymentprocessor
|
||||
paymentprocessor=paymentprocessor,
|
||||
active=True
|
||||
).exclude(
|
||||
shortname="basic"
|
||||
).order_by(
|
||||
@@ -758,7 +759,8 @@ class PlanSelectForm(forms.Form):
|
||||
except AttributeError:
|
||||
amount = 0
|
||||
self.fields['plan'].queryset = PaidPlan.objects.filter(
|
||||
paymentprocessor=rower.paymentprocessor
|
||||
paymentprocessor=rower.paymentprocessor,
|
||||
active=True
|
||||
).exclude(
|
||||
price__lte=amount
|
||||
).order_by(
|
||||
|
||||
@@ -673,6 +673,9 @@ def fitnessmetric_chart(fitnessmetrics,user,workoutmode='rower'):
|
||||
dates = [m.date for m in fitnessmetrics]
|
||||
mode = [m.workoutmode for m in fitnessmetrics]
|
||||
|
||||
if len(power4min) == 0:
|
||||
return ['','']
|
||||
|
||||
df = pd.DataFrame(
|
||||
{'power4min':power4min,
|
||||
'power2k':power2k,
|
||||
@@ -808,7 +811,6 @@ def interactive_histoall(theworkouts):
|
||||
|
||||
rowdata = dataprep.getsmallrowdata_db(['power'],ids=ids,doclean=True)
|
||||
|
||||
|
||||
rowdata.dropna(axis=0,how='any',inplace=True)
|
||||
|
||||
if rowdata.empty:
|
||||
@@ -1271,45 +1273,6 @@ def leaflet_chart2(lat,lon,name=""):
|
||||
|
||||
return script,div
|
||||
|
||||
def googlemap_chart(lat,lon,name=""):
|
||||
if lat.empty or lon.empty:
|
||||
return [0,"invalid coordinate data"]
|
||||
# plot tools
|
||||
TOOLS = 'save,pan,box_zoom,wheel_zoom,reset,tap,resize'
|
||||
|
||||
map_options = GMapOptions(lat = lat.mean(),lng=lon.mean(),
|
||||
map_type="roadmap",zoom=13)
|
||||
|
||||
plot = GMapPlot(
|
||||
x_range=DataRange1d(), y_range=DataRange1d(),
|
||||
map_options=map_options,
|
||||
api_key = "AIzaSyAgu1w9QSthaGPMLp8y9JedPoMc9sfEgJ8",
|
||||
plot_width=400,plot_height=400,
|
||||
toolbar_sticky=False,
|
||||
|
||||
)
|
||||
|
||||
|
||||
source = ColumnDataSource(
|
||||
data = dict(
|
||||
lat=lat,
|
||||
lon=lon,
|
||||
)
|
||||
)
|
||||
|
||||
circle = Circle(x="lon",y="lat",size=5,fill_color="blue",
|
||||
fill_alpha=0.2,line_color=None)
|
||||
plot.add_glyph(source,circle)
|
||||
plot.add_tools(PanTool(), WheelZoomTool(),
|
||||
SaveTool(), ResizeTool(), ResetTool(),
|
||||
TapTool(),CrosshairTool(),
|
||||
)
|
||||
plot.title.text = name
|
||||
plot.title.text_font="1.0em"
|
||||
script, div = components(plot)
|
||||
|
||||
return [script,div]
|
||||
|
||||
def interactive_agegroupcpchart(age,normalized=False):
|
||||
durations = [1,4,30,60]
|
||||
distances = [100,500,1000,2000,5000,6000,10000,21097,42195]
|
||||
|
||||
@@ -568,6 +568,8 @@ class PaidPlan(models.Model):
|
||||
choices=paymenttypes,
|
||||
)
|
||||
|
||||
active = models.BooleanField(default=True)
|
||||
|
||||
clubsize = models.IntegerField(default=0)
|
||||
|
||||
def __unicode__(self):
|
||||
|
||||
@@ -10,27 +10,30 @@ def planstopaypal():
|
||||
plan.external_id = None
|
||||
plan.save()
|
||||
|
||||
def initiaterowerplans():
|
||||
rowers = Rower.objects.filter(paymenttype = 'recurring',paidplan = None)
|
||||
for r in rowers:
|
||||
r.paymentprocessor = 'paypal'
|
||||
r.save()
|
||||
#def initiaterowerplans():
|
||||
# rowers = Rower.objects.filter(paymenttype = 'recurring',paidplan = None)
|
||||
# for r in rowers:
|
||||
# r.paymentprocessor = 'paypal'
|
||||
# r.save()
|
||||
|
||||
def setrowerplans():
|
||||
rowers = Rower.objects.all()
|
||||
#def setrowerplans():
|
||||
# rowers = Rower.objects.all()
|
||||
|
||||
for r in rowers:
|
||||
paidplans = PaidPlan.objects.filter(
|
||||
shortname = r.rowerplan,
|
||||
paymenttype = r.paymenttype,
|
||||
clubsize = r.clubsize,
|
||||
paymentprocessor=r.paymentprocessor)
|
||||
# for r in rowers:
|
||||
# paidplans = PaidPlan.objects.filter(
|
||||
# shortname = r.rowerplan,
|
||||
# paymenttype = r.paymenttype,
|
||||
# clubsize = r.clubsize,
|
||||
# paymentprocessor=r.paymentprocessor)
|
||||
|
||||
if paidplans:
|
||||
r.paidplan = paidplans[0]
|
||||
r.save()
|
||||
else:
|
||||
print 'Could not set plan for ',r
|
||||
# if paidplans:
|
||||
# r.paidplan = paidplans[0]
|
||||
# r.save()
|
||||
# else:
|
||||
# try:
|
||||
# print 'Could not set plan for ',r.user.username
|
||||
# except:
|
||||
# pass
|
||||
|
||||
def is_existing_customer(rower):
|
||||
if rower.country is not None and rower.customer_id is not None and rower.country != '':
|
||||
|
||||
@@ -93,7 +93,7 @@ and inspired by the RowPro Dan Burpee spreadsheet
|
||||
|
||||
<p>We offer three plans. Click on the name of the plan to find out more:
|
||||
<ul>
|
||||
<li><a href="/rowers/promembership">Pro Membership</a>,
|
||||
<li><a href="/rowers/paidplans">Pro Membership</a>,
|
||||
offering additional rowing metrics and analysis
|
||||
tools for individual rowers.</li>
|
||||
<li><a href="/rowers/planmembership">Self-Coach Membership</a>,
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<h1>{{ workout.name }} - Advanced</h1>
|
||||
{% if user.rower.rowerplan == 'basic' %}
|
||||
<p>Functionality marked with an asterisk (*) is limited to the paid plans. See
|
||||
<a href="/rowers/promembership">the page about Pro membership</a>
|
||||
<a href="/rowers/paidplans">the page about Pro membership</a>
|
||||
for more information and to sign up for Pro Membership</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -62,7 +62,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership/">Compare Workouts*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans/">Compare Workouts*</a>
|
||||
{% endif %}
|
||||
<p>
|
||||
Compare this workout to other workouts. Plot HR, SPM, or pace vs time or distance for the two workouts.
|
||||
@@ -82,7 +82,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Edit Intervals*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Edit Intervals*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<span class="tooltiptext">Enter or change the interval and summary data for your workout</span>
|
||||
@@ -98,7 +98,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/adddistanceplot2">Dist Metrics Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Dist Metrics Plot*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Dist Metrics Plot*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -110,7 +110,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addtimeplot2">Time Metrics Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Time Metrics Plot*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Time Metrics Plot*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -122,7 +122,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/histo">Power Histogram</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Power Histogram*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Power Histogram*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -136,7 +136,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workouts-join-select">Glue</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Glue*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Glue*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -149,7 +149,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id }}/">Sensor Fusion</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Sensor Fusion*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Sensor Fusion*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -161,7 +161,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/split">Split Workout</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Split Workout*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Split Workout*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
<h1>{{ workout.name }} - Advanced OTW</h1>
|
||||
{% if user.rower.rowerplan == 'basic' %}
|
||||
<p>Functionality marked with an asterisk (*) is limited to the paid plans. See
|
||||
<a href="/rowers/promembership">the page about Pro membership</a>
|
||||
<a href="/rowers/paidplans">the page about Pro membership</a>
|
||||
for more information and to sign up for Pro Membership</a></p>
|
||||
{% endif %}
|
||||
<div class="grid_2 alpha">
|
||||
@@ -60,7 +60,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/compare/{{ workout.id }}">Compare Workouts</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Compare Workouts*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Compare Workouts*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -82,7 +82,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/editintervals">Edit Intervals</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Edit Intervals*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Edit Intervals*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<span class="tooltiptext">Enter or change the interval and summary data for your workout</span>
|
||||
@@ -99,7 +99,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/crewnerdsummary">CrewNerd Summary</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">CrewNerd Summary*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">CrewNerd Summary*</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
@@ -113,7 +113,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/forcecurve">Stroke Profile (Empower)</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Stroke Profile (Empower)*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Stroke Profile (Empower)*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<span class="tooltiptext">Analyze your stroke force profile (need Empower Oarlock data)</span> <p>
|
||||
@@ -126,7 +126,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/addotwpowerplot">OTW Power Plot</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">OTW Power Plot*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">OTW Power Plot*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<span class="tooltiptext">Note: You must run the OTW calculations under Geeky Stuff first. Otherwise the plot will be empty</span>
|
||||
@@ -146,7 +146,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/geeky">Geeky Stuff</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Geeky Stuff*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Geeky Stuff*</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
@@ -161,7 +161,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/smoothenpace">Smooth out Pace Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Smooth out Pace Data*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Smooth out Pace Data*</a>
|
||||
{% endif %}
|
||||
|
||||
</p>
|
||||
@@ -178,7 +178,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small"href="/rowers/workout/{{ workout.id }}/undosmoothenpace">Raw Data</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Reset Smoothing*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Reset Smoothing*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -193,7 +193,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workouts-join-select">Glue</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Glue*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Glue*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -205,7 +205,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/fusion/{{ workout.id }}/">Sensor Fusion</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Sensor Fusion*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Sensor Fusion*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
@@ -217,7 +217,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/split">Split Workout</a>
|
||||
{% else %}
|
||||
<a class="button blue small" href="/rowers/promembership">Split Workout*</a>
|
||||
<a class="button blue small" href="/rowers/paidplans">Split Workout*</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p>
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
{% if user.rower.rowerplan == 'pro' or user.rower.rowerplan == 'coach' %}
|
||||
<h6 class="graytext">Pro Member</h6>
|
||||
{% else %}
|
||||
<div class="grid_1"><a class="button green small" href="/rowers/promembership">Upgrade to Pro</a></div>
|
||||
<div class="grid_1"><a class="button green small" href="/rowers/paidplans">Upgrade to Pro</a></div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -19,7 +19,8 @@
|
||||
|
||||
<p>Unless specified otherwise, the payments on the
|
||||
recurring payment plans are annual. The prices are specified
|
||||
as a price per year.
|
||||
as a price per year. You can downgrade or cancel your
|
||||
plan at any time in your <a href="/rowers/me/edit/">settings</a>.
|
||||
</p>
|
||||
|
||||
<table width="100%">
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
<script>
|
||||
$(function($) {
|
||||
console.log('loading script');
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/user-boxplot-data', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/user-boxplot-data/', function(json) {
|
||||
var counter=0;
|
||||
var script = json.script;
|
||||
var div = json.div;
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for key, value in axchoicespro.items %}
|
||||
<a class="button rosy small" href="/rowers/promembership">{{ value }}</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">{{ value }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -98,7 +98,7 @@
|
||||
{% else %}
|
||||
{% for key, value in axchoicespro.items %}
|
||||
{% if key not in noylist %}
|
||||
<a class="button rosy small" href="/rowers/promembership">{{ value }} (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">{{ value }} (Pro)</a>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
$.ajax({
|
||||
data: data,
|
||||
type: $(this).attr('method'),
|
||||
url: '/rowers/courses/upload',
|
||||
url: '/rowers/courses/upload/',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
error: function(result) {
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
<script>
|
||||
$(function($) {
|
||||
console.log('loading script');
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/flexalldata', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/flexalldata/', function(json) {
|
||||
console.log('got script');
|
||||
var counter=0;
|
||||
var script = json.script;
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
{% extends "newbase.html" %}
|
||||
{% block title %}Rowsandall Paid Membership{% endblock title %}
|
||||
{% load rowerfilters %}
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
<a href="/rowers/downgrade">Change Downgrade</a>
|
||||
</li>
|
||||
<li class="grid_4">
|
||||
<form id="payment-form" method="post" action="/rowers/downgradecheckouts"
|
||||
<form id="payment-form" method="post" action="/rowers/downgradecheckouts/"
|
||||
autocomplete="off">
|
||||
<section>
|
||||
<label for="amount">
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
{{ the_div|safe }}
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<form enctype="multipart/form-data" action="/rowers/fitness-progress/user/{{ rower.user.id }}" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/fitness-progress/user/{{ rower.user.id }}/" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
|
||||
@@ -76,14 +76,14 @@
|
||||
<a class="button blue small alpha" href="/rowers/workout/{{ id }}/flexchart/driveenergy/{{ yparam1 }}/{{ yparam2 }}/scatter">Work per Stroke</a>
|
||||
<a class="button blue small alpha" href="/rowers/workout/{{ id }}/flexchart/drivespeed/{{ yparam1 }}/{{ yparam2 }}/scatter">Drive Speed</a>
|
||||
{% else %}
|
||||
<a class="button rosy small" href="/rowers/promembership">Power (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">HR (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">SPM (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Power (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">HR (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">SPM (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Speed (Pro)</a>
|
||||
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -103,11 +103,11 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/driveenergy/{{ yparam2 }}/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/drivespeed/{{ yparam2 }}/{{ plottype }}">Drive Speed</a>
|
||||
{% else %}
|
||||
<a class="button rosy small" href="/rowers/promembership">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Speed (Pro)</a>
|
||||
{% endif %}
|
||||
|
||||
</div>
|
||||
@@ -126,11 +126,11 @@
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/driveenergy/{{ plottype }}">Work per Stroke</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/drivespeed/{{ plottype }}">Drive Speed</a>
|
||||
{% else %}
|
||||
<a class="button rosy small" href="/rowers/promembership">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/promembership">Drive Speed (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Peak Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Average Force (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Length (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Work per Stroke (Pro)</a>
|
||||
<a class="button rosy small" href="/rowers/paidplans">Drive Speed (Pro)</a>
|
||||
{% endif %}
|
||||
|
||||
<a class="button blue small" href="/rowers/workout/{{ id }}/flexchart/{{ xparam }}/{{ yparam1 }}/None/{{ plottype }}">None</a>
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
<script>
|
||||
$( document ).ready(function() {
|
||||
console.log('loading script');
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/getblogs', function(data) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/getblogs/', function(data) {
|
||||
var html = '';
|
||||
if (data.length != 0) {
|
||||
html += '<li class="grid_5"><div class="midden"><img src="/static/img/horizontal_line.png" alt="horizontal line"></div></li> '
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<form method="POST" action="/rowers/me/delete" class="padding">
|
||||
<form method="POST" action="/rowers/me/delete/" class="padding">
|
||||
{% csrf_token %}
|
||||
<input id="id_delete_user" type="hidden" name="delete_user" value="True">
|
||||
<input class="button red small" type="submit" name="action" value="DELETE ACCOUNT">
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
<script>
|
||||
$(function($) {
|
||||
console.log('loading script');
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/histodata', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/histodata/', function(json) {
|
||||
console.log('got script');
|
||||
var counter=0;
|
||||
var script = json.script;
|
||||
|
||||
@@ -171,7 +171,7 @@
|
||||
$.ajax({
|
||||
data: data,
|
||||
type: $(this).attr('method'),
|
||||
url: '/rowers/workout/{{ workout.id|encode }}/image',
|
||||
url: '/rowers/workout/{{ workout.id|encode }}/image/',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
error: function(result) {
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
to the partner site</p>
|
||||
|
||||
<p>These settings only have effect if you are a user on one
|
||||
of the <a href="/rowers/promembership">paid plans</a></p>
|
||||
of the <a href="/rowers/paidplans">paid plans</a></p>
|
||||
|
||||
<div class="grid_6 alpha">
|
||||
<form id="importexportform" method="post">
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
$("td.rankingtoggle").click( function() {
|
||||
var workout_id = $(this).attr('workoutid');
|
||||
console.log(workout_id);
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/'+workout_id+'/toggle-ranking', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/'+workout_id+'/toggle-ranking/', function(json) {
|
||||
console.log(JSON.stringify(json));
|
||||
rankingpiece = json.result;
|
||||
tdid = "#star"+workout_id;
|
||||
@@ -80,10 +80,10 @@
|
||||
</p>
|
||||
{% if team %}
|
||||
<p>
|
||||
<form id="searchform" action="/rowers/list-workouts/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
<form id="searchform" action="/rowers/list-workouts/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/"
|
||||
method="get" accept-charset="utf-8">
|
||||
{% else %}
|
||||
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
<form id="searchform" action="/rowers/list-workouts/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/"
|
||||
method="get" accept-charset="utf-8">
|
||||
{% endif %}
|
||||
{{ searchform }}
|
||||
|
||||
@@ -198,7 +198,7 @@
|
||||
$.ajax({
|
||||
data: data,
|
||||
type: $(this).attr('method'),
|
||||
url: '/rowers/virtualevent/{{ race.id }}/image',
|
||||
url: '/rowers/virtualevent/{{ race.id }}/image/',
|
||||
contentType: false,
|
||||
processData: false,
|
||||
error: function(result) {
|
||||
|
||||
@@ -110,8 +110,8 @@
|
||||
</li>
|
||||
{% if course.manager == rower %}
|
||||
<li id="course-emailkml">
|
||||
<a href="/rowers/courses/{{ course.id }}/emailkml">
|
||||
<i class="fas fa-envelope fa-fw"></i> Export as KML</a>
|
||||
<a href="/rowers/courses/{{ course.id }}/downloadkml">
|
||||
<i class="fas fa-globe-americas fa-fw"></i> Download as KML</a>
|
||||
</li>
|
||||
<li id="course-editview">
|
||||
<a href="/rowers/courses/{{ course.id }}/edit">
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
{% if user|is_promember %}
|
||||
<a href="/rowers/workouts-join-select">
|
||||
{% else %}
|
||||
<a href="/rowers/promembership">
|
||||
<a href="/rowers/paidplans">
|
||||
{% endif %}
|
||||
<i class="fas fa-layer-plus fa-fw"></i> Glue Workouts
|
||||
</a>
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</div>
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-multiflex/user/{{ userid }}" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-multiflex/user/{{ userid }}/" method="post">
|
||||
{% csrf_token %}
|
||||
<table>
|
||||
{{ chartform.as_table }}
|
||||
|
||||
@@ -12,6 +12,11 @@
|
||||
hosting costs, we have created paid plans offering extended
|
||||
functionality.
|
||||
</p>
|
||||
<p>
|
||||
All plans are valid for a year. Recurring payment plans will automatically
|
||||
bill you at the start of a new 12 month period. You can stop your plan
|
||||
at any time in your <a href="/rowers/me/edit/">settings</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<table class="plantable shortpadded" width="80%">
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<a href="/rowers/billing">Change Order</a>
|
||||
</li>
|
||||
<li class="grid_4">
|
||||
<form id="payment-form" method="post" action="/rowers/checkouts"
|
||||
<form id="payment-form" method="post" action="/rowers/checkouts/"
|
||||
autocomplete="off">
|
||||
<section>
|
||||
<label for="amount">
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
|
||||
<h2>BrainTree Experimental Corner</h2>
|
||||
|
||||
<form id="payment-form" method="post" action="/rowers/checkouts"
|
||||
<form id="payment-form" method="post" action="/rowers/checkouts/"
|
||||
autocomplete="off">
|
||||
<section>
|
||||
<label for="amount">
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
<a href="/rowers/sessions/{{ thesession.id }}/clone/?when={{ timeperiod }}">Clone</a>
|
||||
</p>
|
||||
<input class="button green"
|
||||
action="/rowers/sessions/{{ thesession.id }}/edit/user/{{ rower.user.id }}" type="submit" value="Save">
|
||||
action="/rowers/sessions/{{ thesession.id }}/edit/user/{{ rower.user.id }}/" type="submit" value="Save">
|
||||
</form>
|
||||
|
||||
</li>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
<p>Missing your best pieces? Upload stroke data of any Concept2
|
||||
ranking piece and they will be automatically added to this page.</p>
|
||||
<p> Don't have stroke data for official Concept2 ranking pieces?
|
||||
The <a href="/rowers/promembership">PRO membership</a> ranking piece functionality
|
||||
The <a href="/rowers/paidplans">PRO membership</a> ranking piece functionality
|
||||
allows you to include your best non ranking pieces and even use
|
||||
parts of workouts for improved calculation accuracy.
|
||||
</p>
|
||||
@@ -114,7 +114,7 @@
|
||||
{% csrf_token %}
|
||||
|
||||
<input name="piece" class="button green"
|
||||
formaction="/rowers/ote-bests/user/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
formaction="/rowers/ote-bests/user/{{ id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/"
|
||||
type="submit" value="Add">
|
||||
</form>
|
||||
</li>/
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
If you find it to be useful, please help us cover
|
||||
our hosting costs and gain access to additional functionality
|
||||
by signing on as a Pro member:
|
||||
<a href="https://rowsandall.com/rowers/promembership">https://rowsandall.com/rowers/promembership</a>
|
||||
<a href="https://rowsandall.com/rowers/paidplans">https://rowsandall.com/rowers/paidplans</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<ul class="main-content">
|
||||
<li class="grid_2">
|
||||
<p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/split" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/split/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
{% endif %}
|
||||
<h1>Stroke Data for workout</h1>
|
||||
|
||||
<form enctype="application/json" action="/rowers/api/workouts/{{ id }}/strokedata" method="post">
|
||||
<form enctype="application/json" action="/rowers/api/workouts/{{ id }}/strokedata/" method="post">
|
||||
<table>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
<p>
|
||||
See the how-to <a href="#howto">at the bottom of this page</a> for details on how to use this form.
|
||||
</p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
@@ -73,7 +73,7 @@
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
<h1>Updated Summary</h1>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
{% csrf_token %}
|
||||
<input type="hidden" name="{{ savebutton }}" value="{{ intervalstring }}">
|
||||
<input type="hidden" name="nrintervals" value={{ nrintervals }}>
|
||||
@@ -101,7 +101,7 @@
|
||||
<li class="grid_2">
|
||||
<h1>Detailed Summary Edit</h1>
|
||||
<p>This is still experimental and there are known bugs. Use at your own risk. Nothing is stored permanently until you hit Save in the Updated Summary section. You can use the restore original button to restore the original values.</p>
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/editintervals/" method="post">
|
||||
<table width=100%>
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
|
||||
<p>Unless specified otherwise, the payments on the
|
||||
recurring payment plans are annual. The prices are specified
|
||||
as a price per year.
|
||||
as a price per year. You can downgrade or cancel your
|
||||
plan at any time in your <a href="/rowers/me/edit/">settings</a>.
|
||||
</p>
|
||||
|
||||
<table width="100%">
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<a href="/rowers/upgrade">Change Upgrade</a>
|
||||
</li>
|
||||
<li class="grid_4">
|
||||
<form id="payment-form" method="post" action="/rowers/upgradecheckouts"
|
||||
<form id="payment-form" method="post" action="/rowers/upgradecheckouts/"
|
||||
autocomplete="off">
|
||||
<section>
|
||||
<label for="amount">
|
||||
|
||||
@@ -80,7 +80,7 @@
|
||||
</li>
|
||||
|
||||
<li class="grid_2 maxheight">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-boxplot/user/{{ theuser.id }}" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-boxplot/user/{{ theuser.id }}/" method="post">
|
||||
|
||||
{% if workouts %}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
</form>
|
||||
</li>
|
||||
<li class="grid_2 maxheight">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-multiflex/user/{{ theuser.id }}" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/user-multiflex/user/{{ theuser.id }}/" method="post">
|
||||
{% if workouts %}
|
||||
|
||||
<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
var data = new FormData(frm[0]);
|
||||
|
||||
$.ajax({
|
||||
url: "/rowers/virtualevents",
|
||||
url: "/rowers/virtualevents/",
|
||||
type: "POST",
|
||||
contentType: false,
|
||||
processData: false,
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
if("{{ rower.showfavoritechartnotes }}" == "False") {
|
||||
shownotes = false;
|
||||
}
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/{{ workout.id|encode }}/get-thumbnails', function(json) {
|
||||
$.getJSON(window.location.protocol + '//'+window.location.host + '/rowers/workout/{{ workout.id|encode }}/get-thumbnails/', function(json) {
|
||||
var counter=0;
|
||||
$("#id_sitready").remove();
|
||||
$("#id_thumbs").append(
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
{% for c in comments %}
|
||||
<p>
|
||||
{{ c.created }}
|
||||
<b>{{ c.user.first_name }} {{ c.user.last_name }}</b>
|
||||
<div class="talk-bubble tri-right left-top">
|
||||
@@ -53,8 +54,9 @@
|
||||
{{ c.comment }}
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
{% endfor %}
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/comment" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workout/{{ workout.id }}/comment/" method="post">
|
||||
<table width=100%>
|
||||
{{ form.as_table }}
|
||||
</table>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
|
||||
<ul class="main-content">
|
||||
<li class="grid_2 maxheight">
|
||||
<form enctype="multipart/form-data" action="/rowers/workouts-join" method="post">
|
||||
<form enctype="multipart/form-data" action="/rowers/workouts-join/" method="post">
|
||||
{% if workouts %}
|
||||
|
||||
<input type="checkbox" onClick="toggle(this)" /> Toggle All<br/>
|
||||
@@ -127,10 +127,10 @@
|
||||
</li>
|
||||
<li class="grid_2">
|
||||
{% if team %}
|
||||
<form id="searchform" action="/rowers/workouts-join-select/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
<form id="searchform" action="/rowers/workouts-join-select/team/{{ team.id }}/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/"
|
||||
method="get" accept-charset="utf-8">
|
||||
{% else %}
|
||||
<form id="searchform" action="/rowers/workouts-join-select/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}"
|
||||
<form id="searchform" action="/rowers/workouts-join-select/{{ startdate|date:"Y-m-d" }}/{{ enddate|date:"Y-m-d" }}/"
|
||||
method="get" accept-charset="utf-8">
|
||||
{% endif %}
|
||||
{{ searchform }}
|
||||
|
||||
@@ -499,20 +499,25 @@ def micromacroid(id):
|
||||
@register.filter
|
||||
def nextworkout(workout,user):
|
||||
if user.rower == workout.user:
|
||||
try:
|
||||
ws = Workout.objects.filter(
|
||||
startdatetime__gte=workout.startdatetime,
|
||||
user=workout.user
|
||||
).order_by(
|
||||
"startdatetime"
|
||||
).exclude(id=workout.id)
|
||||
except ValueError:
|
||||
return 0
|
||||
else:
|
||||
try:
|
||||
ws = Workout.objects.filter(
|
||||
startdatetime__gte=workout.startdatetime,
|
||||
user=workout.user,privacy='visible'
|
||||
).order_by(
|
||||
"startdatetime"
|
||||
).exclude(id=workout.id)
|
||||
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
if ws:
|
||||
return encoder.encode_hex(ws[0].id)
|
||||
@@ -524,19 +529,25 @@ def nextworkout(workout,user):
|
||||
@register.filter
|
||||
def previousworkout(workout,user):
|
||||
if user.rower == workout.user:
|
||||
try:
|
||||
ws = Workout.objects.filter(
|
||||
startdatetime__lte=workout.startdatetime,
|
||||
user=workout.user
|
||||
).order_by(
|
||||
"-startdatetime"
|
||||
).exclude(id=workout.id)
|
||||
except ValueError:
|
||||
return 0
|
||||
else:
|
||||
try:
|
||||
ws = Workout.objects.filter(
|
||||
startdatetime__lte=workout.startdatetime,
|
||||
user=workout.user,privacy='visible'
|
||||
).order_by(
|
||||
"-startdatetime"
|
||||
).exclude(id=workout.id)
|
||||
except ValueError:
|
||||
return 0
|
||||
|
||||
|
||||
if ws:
|
||||
|
||||
135
rowers/test_courses.py
Normal file
135
rowers/test_courses.py
Normal file
@@ -0,0 +1,135 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open, multi_compare_view
|
||||
|
||||
from rowers.forms import (
|
||||
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
|
||||
ChartParamChoiceForm,WorkoutMultipleCompareForm,
|
||||
BoxPlotChoiceForm, CourseForm)
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from rowers.plannedsessions import get_dates_timeperiod
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import (
|
||||
error500_view,error404_view,error400_view,error403_view
|
||||
)
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
|
||||
from django.conf import settings
|
||||
from importlib import import_module
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from rowers.models import *
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
class CoursesTest(TestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
|
||||
def test_courses(self):
|
||||
login = self.c.login(username='john',password='koeinsloot')
|
||||
self.assertTrue(login)
|
||||
|
||||
filename = 'rowers/tests/testdata/Courses.kml'
|
||||
f = open(filename,'rb')
|
||||
file_data = {'file': f}
|
||||
form_data = {
|
||||
'name': 'test courses',
|
||||
'notes': 'aap nn',
|
||||
'file':f,
|
||||
}
|
||||
|
||||
courseform = CourseForm(form_data,file_data)
|
||||
self.assertTrue(courseform.is_valid)
|
||||
|
||||
response = self.c.get('/rowers/courses/upload/')
|
||||
self.assertTrue(response.status_code,200)
|
||||
|
||||
response = self.c.post('/rowers/courses/upload/', form_data, follow=True)
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/list-courses/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
response = self.c.get('/rowers/list-courses/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/courses/1/edit/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/courses/1/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
form_data = {
|
||||
'name':'apekoers',
|
||||
'country':'United States of Atlantis',
|
||||
'notes':'nota bene'
|
||||
}
|
||||
|
||||
form = GeoCourseEditForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
|
||||
response = self.c.post('/rowers/courses/1/edit/',form_data)
|
||||
self.assertTrue(response.status_code,200)
|
||||
|
||||
response = self.c.get('/rowers/courses/1/downloadkml/')
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertEquals(
|
||||
response.get('Content-Disposition'),
|
||||
'attachment; filename="course_1.kml"'
|
||||
)
|
||||
|
||||
@@ -18,4 +18,4 @@ pkg_mox = None
|
||||
# pkg_mox.VerifyAll()
|
||||
# pkg_mox.UnsetStubs()
|
||||
|
||||
from tests import *
|
||||
#from tests import *
|
||||
|
||||
@@ -114,6 +114,49 @@ def mocked_read_df_sql(id):
|
||||
return df
|
||||
|
||||
|
||||
def mocked_getsmallrowdata_db(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/colsfromdb.csv')
|
||||
|
||||
return df
|
||||
|
||||
def mocked_getpowerdata_db(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_powerdata.csv')
|
||||
|
||||
return df
|
||||
|
||||
def mocked_getempowerdata_db(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_empowerdata.csv')
|
||||
|
||||
return df
|
||||
|
||||
def mocked_read_df_cols_sql(ids, columns, convertnewtons=True):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_strokedata.csv')
|
||||
extracols = []
|
||||
|
||||
return df, extracols
|
||||
|
||||
def mocked_read_df_cols_sql_multi(ids, columns, convertnewtons=True):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_strokedata2.csv')
|
||||
extracols = []
|
||||
|
||||
return df, extracols
|
||||
|
||||
def mocked_stravaexport(f2,workoutname,stravatoken,description='',
|
||||
activity_type='Rowing'):
|
||||
print "this is mocked strava export"
|
||||
return 1,'success'
|
||||
|
||||
def StravaActivity():
|
||||
def wait(*args, **kwargs):
|
||||
return 1
|
||||
|
||||
class MockStravalibClient():
|
||||
def upload_activity(*args, **kwargs):
|
||||
return StravaActivity()
|
||||
|
||||
def update_activity(*args, **kwargs):
|
||||
return StravaActivity()
|
||||
|
||||
|
||||
class mocked_rowingdata(rowingdata):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -261,6 +304,7 @@ def mocked_requests(*args, **kwargs):
|
||||
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
if not args:
|
||||
return MockSession()
|
||||
|
||||
|
||||
122
rowers/tests/test_empower.py
Normal file
122
rowers/tests/test_empower.py
Normal file
@@ -0,0 +1,122 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open, multi_compare_view
|
||||
|
||||
from rowers.forms import (
|
||||
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
|
||||
ChartParamChoiceForm,WorkoutMultipleCompareForm,
|
||||
BoxPlotChoiceForm)
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from rowers.plannedsessions import get_dates_timeperiod
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import (
|
||||
error500_view,error404_view,error400_view,error403_view
|
||||
)
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
|
||||
from django.conf import settings
|
||||
from importlib import import_module
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from rowers.models import *
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
class EmpowerTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot',
|
||||
)
|
||||
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
||||
gdproptindate=timezone.now())
|
||||
self.c = Client()
|
||||
|
||||
self.nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
otwfilename = 'rowers/tests/testdata/empower.csv'
|
||||
self.wotw = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
self.wote = Workout.objects.create(name='testworkout',
|
||||
workouttype='Indoor Rower',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=otwfilename)
|
||||
|
||||
powerperc = 100*np.array([r.pw_ut2,
|
||||
r.pw_ut1,
|
||||
r.pw_at,
|
||||
r.pw_tr,r.pw_an])/r.ftp
|
||||
|
||||
|
||||
self.hrdata = {
|
||||
'hrmax':r.max,
|
||||
'hrut2':r.ut2,
|
||||
'hrut1':r.ut1,
|
||||
'hrat':r.at,
|
||||
'hrtr':r.tr,
|
||||
'hran':r.an,
|
||||
'ftp':r.ftp,
|
||||
'powerperc':serialize_list(powerperc),
|
||||
'powerzones':serialize_list(r.powerzones),
|
||||
}
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_workflow_map_view(self, mocked_sqlalchemy):
|
||||
login = self.c.login(username='john',password='koeinsloot')
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/workout/{id}/workflow/'.format(
|
||||
id = self.wote.id
|
||||
)
|
||||
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
63
rowers/tests/test_errorpages.py
Normal file
63
rowers/tests/test_errorpages.py
Normal file
@@ -0,0 +1,63 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class TestErrorPages(TestCase):
|
||||
def test_error_handlers(self):
|
||||
|
||||
self.assertTrue(urls.handler404.endswith('.error404_view'))
|
||||
self.assertTrue(urls.handler500.endswith('.error500_view'))
|
||||
factory = RequestFactory()
|
||||
request = factory.get('/')
|
||||
response = error404_view(request)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertIn('404 Page not found', unicode(response))
|
||||
response = error500_view(request)
|
||||
self.assertEqual(response.status_code, 500)
|
||||
self.assertIn('500 Internal Server Error', unicode(response))
|
||||
|
||||
@@ -6,7 +6,7 @@ pytestmark = pytest.mark.django_db
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.test import TestCase, Client,override_settings, modify_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
@@ -39,6 +39,8 @@ encoded2 = str(encoder.encode_hex(2))
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
import rowers
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import (
|
||||
error500_view,error404_view,error400_view,error403_view
|
||||
@@ -129,10 +131,10 @@ class C2Objects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/c2uploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@@ -149,7 +151,7 @@ class C2Objects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/c2import/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -281,9 +283,58 @@ class StravaObjects(DjangoTestCase):
|
||||
)
|
||||
|
||||
self.r.stravatoken = '12'
|
||||
self.r.stravarefreshtoken = '123'
|
||||
|
||||
self.r.save()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
|
||||
rr = rrower(hrmax=self.r.max,hrut2=self.r.ut2,
|
||||
hrut1=self.r.ut1,hrat=self.r.at,
|
||||
hrtr=self.r.tr,hran=self.r.an,ftp=self.r.ftp)
|
||||
row = rdata(filename,rower=rr)
|
||||
totaldist = row.df['cum_dist'].max()
|
||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||
totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)']
|
||||
|
||||
|
||||
hours = int(totaltime/3600.)
|
||||
minutes = int((totaltime - 3600.*hours)/60.)
|
||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||
|
||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||
|
||||
|
||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||
|
||||
self.w = Workout.objects.create(
|
||||
name='testworkout',workouttype='water',
|
||||
user=self.r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=workoutstarttime,
|
||||
startdatetime=row.rowdatetime,
|
||||
duration=duration,distance=totaldist,
|
||||
csvfilename=filename
|
||||
)
|
||||
|
||||
|
||||
# @patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
# @patch('rowers.views.stravastuff.handle_stravaexport')
|
||||
#@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
#def test_strava_upload(self, mock_post,MockStravalibClient,
|
||||
# mocked_getsmallrowdata_db):
|
||||
# def test_strava_upload(self,mock_post, mocked_stravaexport):
|
||||
# response = self.c.get('/rowers/workout/1/stravauploadw/')
|
||||
|
||||
# self.assertRedirects(response,
|
||||
# expected_url = '/rowers/workout/1/edit/',
|
||||
# status_code=302,target_status_code=200)
|
||||
|
||||
# self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
# self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
def test_strava_list(self, mock_get):
|
||||
@@ -292,16 +343,28 @@ class StravaObjects(DjangoTestCase):
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.utils.requests.get', side_effect=mocked_requests)
|
||||
def test_strava_import(self, mock_get):
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_strava_import(self, mock_get,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
response = self.c.get('/rowers/workout/stravaimport/12',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=301,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
def test_strava_callback(self, mock_post):
|
||||
response = self.c.get('/stravacall_back?code=absdef23',follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
def test_strava_token_refresh(self, mock_post):
|
||||
result = rowers.stravastuff.rower_strava_token_refresh(self.u)
|
||||
self.assertEqual(result,"987654321234567898765432123456789")
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
@@ -381,10 +444,10 @@ class STObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/sporttracksuploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -399,7 +462,7 @@ class STObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/sporttracksimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -491,10 +554,10 @@ class RunKeeperObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/runkeeperuploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -509,7 +572,7 @@ class RunKeeperObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/runkeeperimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -593,10 +656,10 @@ class UAObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/underarmouruploadw/')
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests)
|
||||
@@ -612,7 +675,7 @@ class UAObjects(DjangoTestCase):
|
||||
response = self.c.get('/rowers/workout/underarmourimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit',
|
||||
expected_url='/rowers/workout/'+encoded2+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -697,10 +760,10 @@ class TPObjects(DjangoTestCase):
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit',
|
||||
expected_url = '/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit')
|
||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||
self.assertEqual(response.status_code, 302)
|
||||
|
||||
|
||||
|
||||
163
rowers/tests/test_interactivecharts.py
Normal file
163
rowers/tests/test_interactivecharts.py
Normal file
@@ -0,0 +1,163 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
class InteractiveChartTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
self.filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.wotw = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=self.filename)
|
||||
|
||||
self.wote = Workout.objects.create(name='testworkout',
|
||||
workouttype='Indoor Rower',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=self.filename)
|
||||
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_painsled(self, mocked_sqlalchemy, mocked_read_df_sql):
|
||||
u = User.objects.get(username='john')
|
||||
r = Rower.objects.get(user=u)
|
||||
|
||||
rr = rrower(hrmax=r.max,hrut2=r.ut2,
|
||||
hrut1=r.ut1,hrat=r.at,
|
||||
hrtr=r.tr,hran=r.an,ftp=r.ftp)
|
||||
row = rdata(self.filename,rower=rr)
|
||||
|
||||
fig1 = plots.mkplot(row,'test')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart1(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_chart(self.wote.id)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart2(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_chart(self.wote.id,promember=1)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart3(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_bar_chart(self.wote.id)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart4(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_bar_chart(self.wote.id,promember=1)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart5(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||
xparam='time',
|
||||
yparam1='pace',yparam2='hr')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart6(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=0,xparam='distance',
|
||||
yparam1='pace',yparam2='hr')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart7(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||
xparam='time',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart8(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=0,xparam='distance',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart9(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='time',
|
||||
yparam1='pace',yparam2='hr')
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart10(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='distance',
|
||||
yparam1='pace',yparam2='hr')
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart11(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='time',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart12(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=1,
|
||||
xparam='distance',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
|
||||
119
rowers/tests/test_misc.py
Normal file
119
rowers/tests/test_misc.py
Normal file
@@ -0,0 +1,119 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class WorkoutTests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
nu = datetime.datetime.now()
|
||||
self.w = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=self.r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000)
|
||||
|
||||
def test_checkworkoutuser(self):
|
||||
self.assertEqual(checkworkoutuser(self.u,self.w),True)
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class C2Tests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
self.w = Workout.objects.create(name='testworkout',workouttype='water',
|
||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000)
|
||||
|
||||
def c2_notokentest(self):
|
||||
thetoken = c2_open(self.u)
|
||||
# should raise NoTokenError
|
||||
self.assertRaises(NoTokenError)
|
||||
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class subroutinetests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u)
|
||||
nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.w = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
|
||||
def c2stuff(self):
|
||||
data = c2stuff.createc2workoutdata(self.w)
|
||||
jsond = json.dumps(data)
|
||||
data = c2stuff.createc2workoutdata_as_splits(w)
|
||||
jsond = json.dumps(data)
|
||||
|
||||
|
||||
|
||||
@@ -1,48 +1,456 @@
|
||||
from django.test import TestCase
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open, multi_compare_view
|
||||
|
||||
from rowers.forms import (
|
||||
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
|
||||
ChartParamChoiceForm,WorkoutMultipleCompareForm,
|
||||
BoxPlotChoiceForm)
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from rowers.plannedsessions import get_dates_timeperiod
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import (
|
||||
error500_view,error404_view,error400_view,error403_view
|
||||
)
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
|
||||
from django.conf import settings
|
||||
from importlib import import_module
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from rowers.models import *
|
||||
from rowers.tests.mocks import *
|
||||
import factory
|
||||
from faker import Factory
|
||||
|
||||
class FormTests(TestCase):
|
||||
faker = Factory.create()
|
||||
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
|
||||
row = rdata(filename)
|
||||
totaldist = row.df['cum_dist'].max()
|
||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||
totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)']
|
||||
|
||||
|
||||
hours = int(totaltime/3600.)
|
||||
minutes = int((totaltime - 3600.*hours)/60.)
|
||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||
|
||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||
duration = datetime.time(hour=hours,minute=minutes,second=seconds)
|
||||
|
||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
class UserFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
email = faker.email()
|
||||
username = faker.profile()['username']
|
||||
|
||||
first_name = faker.name().split(' ')[0]
|
||||
last_name = faker.name().split(' ')[0]
|
||||
|
||||
class WorkoutFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Workout
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
notes = faker.text()
|
||||
startdatetime = row.rowdatetime
|
||||
starttime = workoutstarttime
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=duration
|
||||
distance=totaldist
|
||||
csvfilename=filename
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
|
||||
|
||||
class WorkoutCompareTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.u = UserFactory()
|
||||
|
||||
r = Rower.objects.create(user=self.u)
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
|
||||
def test_form(self):
|
||||
form = TeamInviteForm()
|
||||
|
||||
|
||||
class ModelTests(TestCase):
|
||||
def setUp(self):
|
||||
self.u = User.objects.create_user('john',
|
||||
'Sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'Sander'
|
||||
self.u.last_name = 'Roosendaal'
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_workouts_compare(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
def create_team(self):
|
||||
return Team.objects.create(
|
||||
name = 'test team',
|
||||
manager = self.u,
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/team-compare-select/workout/1/team/0/user/1/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_workouts_compare_submit(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
form_data = {
|
||||
'chartform':'Compare',
|
||||
'plottype':'scatter',
|
||||
'teamid':0,
|
||||
'workouts':['1','2','3'],
|
||||
'xparam':'distance',
|
||||
'yparam':'hr',
|
||||
}
|
||||
|
||||
form = WorkoutMultipleCompareForm(form_data)
|
||||
chartform = ChartParamChoiceForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(chartform.is_valid)
|
||||
|
||||
response = self.c.post('/rowers/multi-compare/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
class BoxPlotTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_workouts_boxplot(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/user-boxplot-select/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multi)
|
||||
def test_workouts_boxplot_submit(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db,
|
||||
mocked_df):
|
||||
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
form_data = {
|
||||
'workouts':['1','2','3'],
|
||||
'includereststrokes':False,
|
||||
'spmmax':55.0,
|
||||
'spmmin':15.0,
|
||||
'workmax':1500.0,
|
||||
'workmin':0.0,
|
||||
'yparam':'spm',
|
||||
}
|
||||
|
||||
form = WorkoutMultipleCompareForm(form_data)
|
||||
chartform = BoxPlotChoiceForm(form_data)
|
||||
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(chartform.is_valid)
|
||||
|
||||
response = self.c.get('/rowers/user-boxplot/',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/user-boxplot-select/user/1/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
response = self.c.post('/rowers/user-boxplot/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
options = {}
|
||||
options['spmmin'] = 15
|
||||
options['spmmax'] = 55
|
||||
options['workmin'] = 0
|
||||
options['workmax'] = 5500
|
||||
options['ids'] = [1,2,3]
|
||||
options['userid'] = 1
|
||||
options['plotfield'] = 'spm'
|
||||
options['rankingonly'] = False
|
||||
|
||||
self.c.session['options'] = options
|
||||
self.c.session.save()
|
||||
|
||||
sessionoptions = self.c.session['options']
|
||||
self.assertEqual(sessionoptions['ids'],[1,2,3])
|
||||
|
||||
response = self.c.get('/rowers/user-boxplot-data/')
|
||||
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
class ListWorkoutTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_list_workouts(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
|
||||
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
|
||||
|
||||
form_data = {
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
}
|
||||
|
||||
workouts = Workout.objects.filter(startdatetime__gte=startdate,
|
||||
startdatetime__lte=enddate)
|
||||
|
||||
url = '/rowers/list-workouts/'
|
||||
|
||||
response = self.c.post(url, form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
class PlannedSessionTests(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
self.user_sessions = SessionFactory.create_batch(
|
||||
5,
|
||||
manager=self.u)
|
||||
|
||||
for session in self.user_sessions:
|
||||
session.rower.add(self.r)
|
||||
session.save()
|
||||
|
||||
def test_ics_download(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
response = self.c.get('/rowers/sessions/sendcalendar/')
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
startdate, enddate = get_dates_timeperiod(response.wsgi_request)
|
||||
|
||||
filename = 'training_plan_{u}_{d1}_{d2}.ics'.format(
|
||||
u = self.u.username,
|
||||
d1 = startdate.strftime("%Y%m%d"),
|
||||
d2 = enddate.strftime("%Y%m%d"),
|
||||
)
|
||||
self.assertEquals(
|
||||
response.get('Content-Disposition'),
|
||||
'attachment; filename="{name}"'.format(name=filename)
|
||||
)
|
||||
|
||||
def create_paidplan(self):
|
||||
return PaidPlan.objects.create(
|
||||
name = 'test plan',
|
||||
shortname = 'pro',
|
||||
price = 15.0,
|
||||
)
|
||||
|
||||
def test_models(self):
|
||||
pp = self.create_paidplan()
|
||||
team = self.create_team()
|
||||
self.assertEqual(u'%s' % pp,u'test plan - pro at 15.00 EURO (single payment)')
|
||||
self.assertEqual(u'%s' % self.r, u'Sander Roosendaal')
|
||||
self.assertEqual('%s' % self.r, 'Sander Roosendaal')
|
||||
self.assertEqual(self.r.clean_email(),'sander@ds.ds')
|
||||
class ForcecurveTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect = mocked_getempowerdata_db)
|
||||
def test_forcecurve_plot(self, mocked_getsmallrowdata_db):
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/workout/1/forcecurve/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class HistoTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach')
|
||||
|
||||
self.c = Client()
|
||||
self.user_workouts = WorkoutFactory.create_batch(5, user=self.r)
|
||||
self.factory = RequestFactory()
|
||||
self.password = faker.word()
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getpowerdata_db)
|
||||
def test_histo_workouts(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
|
||||
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
|
||||
|
||||
waterboattype = [u'1x',
|
||||
u'2x',
|
||||
u'2x+',
|
||||
u'2-',
|
||||
u'2+',
|
||||
u'3x+',
|
||||
u'3x-',
|
||||
u'4x',
|
||||
u'4x+',
|
||||
u'4-',
|
||||
u'4+',
|
||||
u'8+',
|
||||
u'8x+']
|
||||
|
||||
form_data = {
|
||||
'startdate':startdate,
|
||||
'enddate':enddate,
|
||||
'modality':u'all',
|
||||
'waterboattype': waterboattype
|
||||
}
|
||||
|
||||
url = '/rowers/histo/'
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
response = self.c.post(url, form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
options = {
|
||||
'includereststrokes':False,
|
||||
'rankingonly':False,
|
||||
'modality':'all',
|
||||
'waterboattype':waterboattype,
|
||||
'theuser':0,
|
||||
'enddatestring':enddate.strftime("%Y-%m-%d"),
|
||||
'startdatestring':startdate.strftime("%Y-%m-%d"),
|
||||
}
|
||||
|
||||
|
||||
self.c.session['options'] = options
|
||||
self.c.session.save()
|
||||
|
||||
sessionoptions = self.c.session['options']
|
||||
|
||||
response = self.c.get('/rowers/histodata/')
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
77
rowers/tests/test_newusers.py
Normal file
77
rowers/tests/test_newusers.py
Normal file
@@ -0,0 +1,77 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class NewUserRegistrationTest(TestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
redis_connection.publish('tasks','KILL')
|
||||
|
||||
def test_newuser(self):
|
||||
form_data = {
|
||||
'first_name':'Jan',
|
||||
'last_name':'Roeiert',
|
||||
'email':'jan@loop.nl',
|
||||
'username':'janderoeiert',
|
||||
'password1':'aapindewei2',
|
||||
'password2':'aapindewei2',
|
||||
'tos':True,
|
||||
'weightcategory':'hwt',
|
||||
'adaptiveclass': 'None',
|
||||
'sex':'male',
|
||||
'next':'/rowers/list-workouts',
|
||||
'birthdate':datetime.datetime(year=1970,month=4,day=2)
|
||||
}
|
||||
|
||||
form = RegistrationFormUniqueEmail(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/register/', form_data, follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
177
rowers/tests/test_settings.py
Normal file
177
rowers/tests/test_settings.py
Normal file
@@ -0,0 +1,177 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class DataTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
|
||||
def test_workoutform(self):
|
||||
form_data = {
|
||||
'name':'test',
|
||||
'date':'2016-05-01',
|
||||
'starttime':'07:53:00',
|
||||
'timezone':'UTC',
|
||||
'duration':'0:55:00.1',
|
||||
'distance':8000,
|
||||
'notes':'Aap noot \n mies',
|
||||
'weightcategory':'lwt',
|
||||
'adaptiveclass': 'PR1',
|
||||
'workouttype':'water',
|
||||
'boattype':'1x',
|
||||
'private':False,
|
||||
}
|
||||
form = WorkoutForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
def test_rower_form_withvalidnumbers(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'tr':167,
|
||||
'an':180,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
|
||||
def test_rower_form_twoequalvalues(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':105,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_abovemaxallowed(self):
|
||||
form_data = {
|
||||
'max':300,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_wrongorder(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':20,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_belowminalloed(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':2,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_wrongorder2(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':170,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_painsled_form(self):
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
f = open(filename,'rb')
|
||||
file_data = {'file': SimpleUploadedFile(f.name, f.read())}
|
||||
form_data = {
|
||||
'title':'test',
|
||||
'workouttype':'water',
|
||||
'boattype':'1x',
|
||||
'notes':'aap noot mies',
|
||||
}
|
||||
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
f.close()
|
||||
382
rowers/tests/test_staticcharts.py
Normal file
382
rowers/tests/test_staticcharts.py
Normal file
@@ -0,0 +1,382 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class PlotTests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u)
|
||||
self.nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.wotw = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
self.wote = Workout.objects.create(name='testworkout',
|
||||
workouttype='Indoor Rower',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
# timestr = strftime("%Y%m%d-%H%M%S")
|
||||
# imagename = f1+timestr+'.png'
|
||||
# fullpathimagename = 'static/plots/'+imagename
|
||||
powerperc = 100*np.array([r.pw_ut2,
|
||||
r.pw_ut1,
|
||||
r.pw_at,
|
||||
r.pw_tr,r.pw_an])/r.ftp
|
||||
|
||||
|
||||
self.hrdata = {
|
||||
'hrmax':r.max,
|
||||
'hrut2':r.ut2,
|
||||
'hrut1':r.ut1,
|
||||
'hrat':r.at,
|
||||
'hrtr':r.tr,
|
||||
'hran':r.an,
|
||||
'ftp':r.ftp,
|
||||
'powerperc':serialize_list(powerperc),
|
||||
'powerzones':serialize_list(r.powerzones),
|
||||
}
|
||||
|
||||
@patch('rowers.tasks.rdata')
|
||||
@patch('rowers.tasks.FigureCanvas')
|
||||
def test_ote_plots(self, mocked_rowingdata, mocked_canvas):
|
||||
w = self.wote
|
||||
f1 = 'testdata.csv'[:-4]
|
||||
timestr = strftime("%Y%m%d-%H%M%S")
|
||||
imagename = f1+timestr+'.png'
|
||||
fullpathimagename = 'static/plots/'+imagename
|
||||
# make plot - asynchronous task
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 2
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 3
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 4
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 5
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 6
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 7
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 8
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 13
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
@patch('rowers.tasks.rdata')
|
||||
@patch('rowers.tasks.FigureCanvas')
|
||||
def test_otw_plots(self, mocked_rowingdata, mocked_canvas):
|
||||
w = self.wotw
|
||||
f1 = 'testdata.csv'[:-4]
|
||||
timestr = strftime("%Y%m%d-%H%M%S")
|
||||
imagename = f1+timestr+'.png'
|
||||
fullpathimagename = 'static/plots/'+imagename
|
||||
# make plot - asynchronous task
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 2
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 3
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 4
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 5
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 6
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 7
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 8
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 9
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 13
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
@@ -48,343 +48,7 @@ encoded1 = str(encoder.encode_hex(1))
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class TestErrorPages(TestCase):
|
||||
def test_error_handlers(self):
|
||||
|
||||
self.assertTrue(urls.handler404.endswith('.error404_view'))
|
||||
self.assertTrue(urls.handler500.endswith('.error500_view'))
|
||||
factory = RequestFactory()
|
||||
request = factory.get('/')
|
||||
response = error404_view(request)
|
||||
self.assertEqual(response.status_code, 404)
|
||||
self.assertIn('404 Page not found', unicode(response))
|
||||
response = error500_view(request)
|
||||
self.assertEqual(response.status_code, 500)
|
||||
self.assertIn('500 Internal Server Error', unicode(response))
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class NewUserRegistrationTest(TestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
redis_connection.publish('tasks','KILL')
|
||||
|
||||
def test_newuser(self):
|
||||
form_data = {
|
||||
'first_name':'Jan',
|
||||
'last_name':'Roeiert',
|
||||
'email':'jan@loop.nl',
|
||||
'username':'janderoeiert',
|
||||
'password1':'aapindewei2',
|
||||
'password2':'aapindewei2',
|
||||
'tos':True,
|
||||
'weightcategory':'hwt',
|
||||
'adaptiveclass': 'None',
|
||||
'sex':'male',
|
||||
'next':'/rowers/list-workouts',
|
||||
'birthdate':datetime.datetime(year=1970,month=4,day=2)
|
||||
}
|
||||
|
||||
form = RegistrationFormUniqueEmail(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/register', form_data, follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class WorkoutTests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
nu = datetime.datetime.now()
|
||||
self.w = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=self.r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000)
|
||||
|
||||
def test_checkworkoutuser(self):
|
||||
self.assertEqual(checkworkoutuser(self.u,self.w),True)
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class C2Tests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
self.w = Workout.objects.create(name='testworkout',workouttype='water',
|
||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000)
|
||||
|
||||
def c2_notokentest(self):
|
||||
thetoken = c2_open(self.u)
|
||||
# should raise NoTokenError
|
||||
self.assertRaises(NoTokenError)
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class DataTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
|
||||
def test_workoutform(self):
|
||||
form_data = {
|
||||
'name':'test',
|
||||
'date':'2016-05-01',
|
||||
'starttime':'07:53:00',
|
||||
'timezone':'UTC',
|
||||
'duration':'0:55:00.1',
|
||||
'distance':8000,
|
||||
'notes':'Aap noot \n mies',
|
||||
'weightcategory':'lwt',
|
||||
'adaptiveclass': 'PR1',
|
||||
'workouttype':'water',
|
||||
'boattype':'1x',
|
||||
'private':False,
|
||||
}
|
||||
form = WorkoutForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
def test_rower_form_withvalidnumbers(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'tr':167,
|
||||
'an':180,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
|
||||
def test_rower_form_twoequalvalues(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':105,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_abovemaxallowed(self):
|
||||
form_data = {
|
||||
'max':300,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_wrongorder(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':20,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_belowminalloed(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':2,
|
||||
'ut2':105,
|
||||
'ut1':148,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_rower_form_wrongorder2(self):
|
||||
form_data = {
|
||||
'max':192,
|
||||
'rest':48,
|
||||
'ut2':105,
|
||||
'ut1':170,
|
||||
'at':160,
|
||||
'an':180,
|
||||
'tr':167,
|
||||
'weightcategory':'lwt',
|
||||
}
|
||||
form = RowerForm(data=form_data)
|
||||
self.assertFalse(form.is_valid())
|
||||
|
||||
def test_painsled_form(self):
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
f = open(filename,'rb')
|
||||
file_data = {'file': SimpleUploadedFile(f.name, f.read())}
|
||||
form_data = {
|
||||
'title':'test',
|
||||
'workouttype':'water',
|
||||
'boattype':'1x',
|
||||
'notes':'aap noot mies',
|
||||
}
|
||||
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
f.close()
|
||||
|
||||
class InteractiveChartTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
self.nu = datetime.datetime.now()
|
||||
|
||||
self.filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.wotw = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=self.filename)
|
||||
|
||||
self.wote = Workout.objects.create(name='testworkout',
|
||||
workouttype='Indoor Rower',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=self.filename)
|
||||
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_painsled(self, mocked_sqlalchemy, mocked_read_df_sql):
|
||||
u = User.objects.get(username='john')
|
||||
r = Rower.objects.get(user=u)
|
||||
|
||||
rr = rrower(hrmax=r.max,hrut2=r.ut2,
|
||||
hrut1=r.ut1,hrat=r.at,
|
||||
hrtr=r.tr,hran=r.an,ftp=r.ftp)
|
||||
row = rdata(self.filename,rower=rr)
|
||||
|
||||
fig1 = plots.mkplot(row,'test')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart1(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_chart(self.wote.id)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart2(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_chart(self.wote.id,promember=1)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart3(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_bar_chart(self.wote.id)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart4(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_bar_chart(self.wote.id,promember=1)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart5(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||
xparam='time',
|
||||
yparam1='pace',yparam2='hr')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart6(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=0,xparam='distance',
|
||||
yparam1='pace',yparam2='hr')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart7(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=0,
|
||||
xparam='time',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart8(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=0,xparam='distance',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart9(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='time',
|
||||
yparam1='pace',yparam2='hr')
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart10(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='distance',
|
||||
yparam1='pace',yparam2='hr')
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart11(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,
|
||||
promember=1,xparam='time',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
def test_interactive_chart12(self, mocked_sqlalchemy,mocked_read_df_sql):
|
||||
res = iplots.interactive_flex_chart2(self.wote.id,promember=1,
|
||||
xparam='distance',
|
||||
yparam1='pace',yparam2='spm')
|
||||
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
@@ -412,7 +76,8 @@ class ViewTest(TestCase):
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_upload_view_sled(self, mocked_sqlalchemy):
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
login = self.c.login(username='john',password='koeinsloot')
|
||||
self.assertTrue(login)
|
||||
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
f = open(filename,'rb')
|
||||
@@ -433,7 +98,7 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -441,14 +106,14 @@ class ViewTest(TestCase):
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/edit', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/edit/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/histo', form_data, follow=True)
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/histo/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/workflow',
|
||||
response = self.c.get('/rowers/workout/'+encoded1+'/workflow/',
|
||||
follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -469,7 +134,7 @@ class ViewTest(TestCase):
|
||||
}
|
||||
form = WorkoutForm(data=form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
response = self.c.post('/rowers/workout/'+encoded1+'/edit', form_data, follow=True)
|
||||
response = self.c.post('/rowers/workout/'+encoded1+'/edit/', form_data, follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@@ -522,7 +187,7 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -564,7 +229,7 @@ class ViewTest(TestCase):
|
||||
|
||||
f.close()
|
||||
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -633,7 +298,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -683,7 +348,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -720,7 +385,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -759,7 +424,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -795,7 +460,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -832,7 +497,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -871,7 +536,7 @@ class ViewTest(TestCase):
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
f.close()
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
@@ -907,7 +572,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -940,7 +605,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -973,7 +638,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1006,7 +671,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1040,7 +705,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1072,7 +737,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1104,7 +769,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1136,7 +801,7 @@ class ViewTest(TestCase):
|
||||
form = DocumentsForm(form_data,file_data)
|
||||
|
||||
response = self.c.post('/rowers/workout/upload/', form_data, follow=True)
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@@ -1147,400 +812,3 @@ class ViewTest(TestCase):
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
|
||||
# def test_upload_view_FIT_SpeedCoach2a(self):
|
||||
# self.c.login(username='john',password='koeinsloot')
|
||||
|
||||
# filename = 'rowers/tests/testdata/3x250m.fit'
|
||||
# with open(filename,'rb') as f:
|
||||
|
||||
# file_data = {'file': f}
|
||||
|
||||
# form_data = {
|
||||
# 'title':'test',
|
||||
# 'workouttype':'water',
|
||||
# 'boattype':'1x',
|
||||
# 'notes':'aap noot mies',
|
||||
# 'make_plot':False,
|
||||
# 'upload_to_c2':False,
|
||||
# 'plottype':'timeplot',
|
||||
# 'file': f,
|
||||
# }
|
||||
|
||||
# form = DocumentsForm(form_data,file_data)
|
||||
|
||||
# response = self.c.post('/rowers/workout/upload/',
|
||||
# form_data, follow=True,
|
||||
# format='multipart')
|
||||
# f.close()
|
||||
# self.assertRedirects(response, expected_url='/rowers/workout/'+encoded1+'/edit',
|
||||
# status_code=302,target_status_code=200)
|
||||
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
|
||||
# w = Workout.objects.get(id=1)
|
||||
# f_to_be_deleted = w.csvfilename
|
||||
# os.remove(f_to_be_deleted+'.gz')
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class subroutinetests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u)
|
||||
nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.w = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=nu.strftime('%Y-%m-%d'),
|
||||
starttime=nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
|
||||
def c2stuff(self):
|
||||
data = c2stuff.createc2workoutdata(self.w)
|
||||
jsond = json.dumps(data)
|
||||
data = c2stuff.createc2workoutdata_as_splits(w)
|
||||
jsond = json.dumps(data)
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class PlotTests(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u)
|
||||
self.nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
self.wotw = Workout.objects.create(name='testworkout',
|
||||
workouttype='water',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
self.wote = Workout.objects.create(name='testworkout',
|
||||
workouttype='Indoor Rower',
|
||||
user=r,date=self.nu.strftime('%Y-%m-%d'),
|
||||
starttime=self.nu.strftime('%H:%M:%S'),
|
||||
duration="0:55:00",distance=8000,
|
||||
csvfilename=filename)
|
||||
|
||||
# timestr = strftime("%Y%m%d-%H%M%S")
|
||||
# imagename = f1+timestr+'.png'
|
||||
# fullpathimagename = 'static/plots/'+imagename
|
||||
powerperc = 100*np.array([r.pw_ut2,
|
||||
r.pw_ut1,
|
||||
r.pw_at,
|
||||
r.pw_tr,r.pw_an])/r.ftp
|
||||
|
||||
|
||||
self.hrdata = {
|
||||
'hrmax':r.max,
|
||||
'hrut2':r.ut2,
|
||||
'hrut1':r.ut1,
|
||||
'hrat':r.at,
|
||||
'hrtr':r.tr,
|
||||
'hran':r.an,
|
||||
'ftp':r.ftp,
|
||||
'powerperc':serialize_list(powerperc),
|
||||
'powerzones':serialize_list(r.powerzones),
|
||||
}
|
||||
|
||||
@patch('rowers.tasks.rdata')
|
||||
@patch('rowers.tasks.FigureCanvas')
|
||||
def test_ote_plots(self, mocked_rowingdata, mocked_canvas):
|
||||
w = self.wote
|
||||
f1 = 'testdata.csv'[:-4]
|
||||
timestr = strftime("%Y%m%d-%H%M%S")
|
||||
imagename = f1+timestr+'.png'
|
||||
fullpathimagename = 'static/plots/'+imagename
|
||||
# make plot - asynchronous task
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 2
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 3
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 4
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 5
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 6
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 7
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 8
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 13
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
@patch('rowers.tasks.rdata')
|
||||
@patch('rowers.tasks.FigureCanvas')
|
||||
def test_otw_plots(self, mocked_rowingdata, mocked_canvas):
|
||||
w = self.wotw
|
||||
f1 = 'testdata.csv'[:-4]
|
||||
timestr = strftime("%Y%m%d-%H%M%S")
|
||||
imagename = f1+timestr+'.png'
|
||||
fullpathimagename = 'static/plots/'+imagename
|
||||
# make plot - asynchronous task
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 1
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 2
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 3
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 4
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 5
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 6
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 7
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 8
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 9
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
plotnr = 13
|
||||
if (w.workouttype=='water'):
|
||||
plotnr = plotnr+3
|
||||
|
||||
res = handle_makeplot(f1,w.csvfilename,
|
||||
w.name,self.hrdata,plotnr,imagename)
|
||||
i = GraphImage(workout=w,creationdatetime=self.nu,
|
||||
filename=fullpathimagename)
|
||||
try:
|
||||
os.remove(fullpathimagename)
|
||||
except WindowsError:
|
||||
pass
|
||||
@@ -56,9 +56,9 @@ class URLTests(TestCase):
|
||||
'sander@ds.ds',
|
||||
'koeinsloot',
|
||||
)
|
||||
r = Rower.objects.create(user=u,rowerplan='coach')
|
||||
r = Rower.objects.create(user=u,rowerplan='coach',gdproptin=True,
|
||||
gdproptindate=timezone.now())
|
||||
self.c = Client()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
|
||||
self.nu = datetime.datetime.now()
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
@@ -101,100 +101,100 @@ class URLTests(TestCase):
|
||||
'/rowers/500/',
|
||||
'/rowers/502/',
|
||||
'/rowers/1/list-workouts/',
|
||||
'/rowers/1/list-workouts/2016-01-01/2016-12-31',
|
||||
'/rowers/1/list-workouts/2016-01-01/2016-12-31/',
|
||||
'/rowers/1/ote-bests/',
|
||||
'/rowers/1/ote-bests2/2016-01-01/2016-12-31',
|
||||
'/rowers/about',
|
||||
'/rowers/addmanual/',
|
||||
'/rowers/agegroupcp/30',
|
||||
'/rowers/agegroupcp/30/1',
|
||||
'/rowers/agegrouprecords/male/hwt',
|
||||
'/rowers/agegrouprecords/male/hwt/2000m',
|
||||
'/rowers/agegrouprecords/male/hwt/2000min',
|
||||
'/rowers/ajax_agegroup/45/hwt/male/1',
|
||||
'/rowers/1/ote-bests2/2016-01-01/2016-12-31/',
|
||||
'/rowers/about/',
|
||||
'/rowers/workout/addmanual/',
|
||||
'/rowers/agegroupcp/30/',
|
||||
'/rowers/agegroupcp/30/1/',
|
||||
'/rowers/agegrouprecords/male/hwt/',
|
||||
'/rowers/agegrouprecords/male/hwt/2000m/',
|
||||
'/rowers/agegrouprecords/male/hwt/2000min/',
|
||||
'/rowers/ajax_agegroup/45/hwt/male/1/',
|
||||
'/rowers/analysis/',
|
||||
'/rowers/analysis/user/1',
|
||||
'/rowers/brochure',
|
||||
'/rowers/courses/upload',
|
||||
'/rowers/analysis/user/1/',
|
||||
'/rowers/brochure/',
|
||||
'/rowers/courses/upload/',
|
||||
'/rowers/createplan/',
|
||||
'/rowers/createplan/user/1/',
|
||||
'/rowers/cumstats/',
|
||||
'/rowers/cumstats/2016-01-01/2016-12-31',
|
||||
'/rowers/cumstats/user/1',
|
||||
'/rowers/cumstats/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/developers',
|
||||
'/rowers/cumstats/2016-01-01/2016-12-31/',
|
||||
'/rowers/cumstats/user/1/',
|
||||
'/rowers/cumstats/user/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/developers/',
|
||||
'/rowers/email/',
|
||||
'/rowers/email/thankyou/',
|
||||
'/rowers/fitness-progress/',
|
||||
'/rowers/fitness-progress/user/1',
|
||||
'/rowers/fitness-progress/user/1/rower',
|
||||
'/rowers/fitness-progress/user/1/',
|
||||
'/rowers/fitness-progress/user/1/rower/',
|
||||
'/rowers/flexall/',
|
||||
'/rowers/flexall/spm/hr/None/',
|
||||
'/rowers/flexall/spm/hr/None/2016-01-01/2016-12-31/',
|
||||
'/rowers/flexall/spm/hr/None/2016-01-01/2016-12-31/user/1',
|
||||
'/rowers/flexall/spm/hr/None/2016-01-01/2016-12-31/user/1/',
|
||||
'/rowers/flexall/user/1/',
|
||||
'/rowers/flexalldata/',
|
||||
'/rowers/help',
|
||||
'/rowers/help/',
|
||||
'/rowers/histo/',
|
||||
'/rowers/histo/user/1',
|
||||
'/rowers/histo/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/histodata',
|
||||
'/rowers/job-kill/1',
|
||||
'/rowers/histo/user/1/',
|
||||
'/rowers/histo/user/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/histodata/',
|
||||
'/rowers/job-kill/1/',
|
||||
'/rowers/jobs-status/',
|
||||
'/rowers/laboratory/',
|
||||
'/rowers/laboratory/user/1',
|
||||
'/rowers/legal',
|
||||
'/rowers/laboratory/user/1/',
|
||||
'/rowers/legal/',
|
||||
'/rowers/list-courses/',
|
||||
'/rowers/list-graphs/',
|
||||
'/rowers/list-jobs/',
|
||||
'/rowers/list-workouts/',
|
||||
'/rowers/list-workouts/2016-01-01/2016-12-31',
|
||||
'/rowers/list-workouts/2016-01-01/2016-12-31/',
|
||||
'/rowers/list-workouts/2016-01-01/2016-12-31/user/1/',
|
||||
'/rowers/list-workouts/ranking',
|
||||
'/rowers/list-workouts/ranking/',
|
||||
'/rowers/list-workouts/user/1/',
|
||||
'/rowers/me/calcdps/',
|
||||
'/rowers/me/edit/',
|
||||
'/rowers/me/edit/user/1',
|
||||
'/rowers/me/edit/user/1/',
|
||||
'/rowers/me/exportsettings/',
|
||||
'/rowers/me/exportsettings/user/1',
|
||||
'/rowers/me/exportsettings/user/1/',
|
||||
'/rowers/me/favoritecharts/',
|
||||
'/rowers/me/favoritecharts/user/1',
|
||||
'/rowers/me/favoritecharts/user/1/',
|
||||
'/rowers/me/invitation/',
|
||||
'/rowers/me/preferences/',
|
||||
'/rowers/me/preferences/user/1',
|
||||
'/rowers/me/preferences/user/1/',
|
||||
'/rowers/me/request/',
|
||||
'/rowers/me/teams/',
|
||||
'/rowers/me/workflowconfig2/',
|
||||
'/rowers/me/workflowconfig2/user/1',
|
||||
'/rowers/me/workflowdefault',
|
||||
'/rowers/multi-compare',
|
||||
'/rowers/me/workflowconfig2/user/1/',
|
||||
'/rowers/me/workflowdefault/',
|
||||
# '/rowers/multi-compare/',
|
||||
'/rowers/ote-bests/',
|
||||
'/rowers/ote-bests/2016-01-01/2016-12-31',
|
||||
'/rowers/ote-bests/user/1',
|
||||
'/rowers/ote-bests/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/ote-bests/2016-01-01/2016-12-31/',
|
||||
'/rowers/ote-bests/user/1/',
|
||||
'/rowers/ote-bests/user/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/ote-bests2/',
|
||||
'/rowers/ote-bests2/2016-01-01/2016-12-31',
|
||||
'/rowers/ote-bests2/user/1',
|
||||
'/rowers/ote-bests2/2016-01-01/2016-12-31/',
|
||||
'/rowers/ote-bests2/user/1/',
|
||||
'/rowers/ote-ranking/',
|
||||
'/rowers/ote-ranking/2016-01-01/2016-12-31',
|
||||
'/rowers/ote-ranking/2016-01-01/2016-12-31/',
|
||||
'/rowers/ote-ranking/user/1/',
|
||||
'/rowers/ote-ranking/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/ote-ranking/user/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/otw-bests/',
|
||||
'/rowers/otw-bests/2016-01-01/2016-12-31',
|
||||
'/rowers/otw-bests/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/partners',
|
||||
'/rowers/physics',
|
||||
'/rowers/planrequired',
|
||||
'/rowers/promembership',
|
||||
'/rowers/register',
|
||||
'/rowers/otw-bests/2016-01-01/2016-12-31/',
|
||||
'/rowers/otw-bests/user/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/partners/',
|
||||
'/rowers/physics/',
|
||||
'/rowers/planrequired/',
|
||||
'/rowers/promembership/',
|
||||
'/rowers/register/',
|
||||
'/rowers/register/thankyou/',
|
||||
'/rowers/sessions/',
|
||||
'/rowers/sessions/2016-01-01/2016-12-31',
|
||||
'/rowers/sessions/2016-01-01/2016-12-31/user/1',
|
||||
'/rowers/sessions/2016-01-01/2016-12-31/',
|
||||
'/rowers/sessions/2016-01-01/2016-12-31/user/1/',
|
||||
'/rowers/sessions/coach/',
|
||||
'/rowers/sessions/coach/user/1/',
|
||||
'/rowers/sessions/create/',
|
||||
'/rowers/sessions/create/user/1',
|
||||
'/rowers/sessions/create/user/1/',
|
||||
'/rowers/sessions/manage/',
|
||||
'/rowers/sessions/manage/user/1/',
|
||||
'/rowers/sessions/multiclone/',
|
||||
@@ -202,83 +202,82 @@ class URLTests(TestCase):
|
||||
'/rowers/sessions/multicreate/',
|
||||
'/rowers/sessions/multicreate/user/1/',
|
||||
'/rowers/sessions/print/',
|
||||
'/rowers/sessions/print/user/1',
|
||||
'/rowers/sessions/print/user/1/',
|
||||
'/rowers/sessions/teamcreate/',
|
||||
'/rowers/sessions/user/1',
|
||||
'/rowers/sessions/user/1/',
|
||||
'/rowers/team-compare-select/',
|
||||
'/rowers/team-compare-select/workout/1',
|
||||
'/rowers/team-compare-select/2016-01-01/2016-12-31',
|
||||
'/rowers/test-job/2',
|
||||
'/rowers/test-job2/2',
|
||||
'/rowers/test_callback',
|
||||
'/rowers/updatefitness',
|
||||
'/rowers/updatefitness/rower',
|
||||
'/rowers/updatefitness/rower/50',
|
||||
'/rowers/user-boxplot',
|
||||
'/rowers/user-boxplot-data',
|
||||
'/rowers/user-boxplot-select/',
|
||||
'/rowers/user-boxplot-select/user/1/',
|
||||
'/rowers/user-boxplot/user/1',
|
||||
'/rowers/user-multiflex-data',
|
||||
'/rowers/user-multiflex-select/',
|
||||
'/rowers/user-multiflex-select/2016-01-01/2016-12-31',
|
||||
'/rowers/user-multiflex-select/user/1/',
|
||||
'/rowers/user-multiflex-select/user/1/2016-01-01/2016-12-31',
|
||||
'/rowers/user-multiflex/',
|
||||
'/rowers/user-multiflex/user/1',
|
||||
'/rowers/workout/'+encoded1+'/',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot2',
|
||||
'/rowers/workout/'+encoded1+'/addotwpowerplot',
|
||||
'/rowers/workout/'+encoded1+'/addpiechart',
|
||||
'/rowers/workout/'+encoded1+'/addpowerpiechart',
|
||||
'/rowers/workout/'+encoded1+'/addstatic',
|
||||
'/rowers/workout/'+encoded1+'/addstatic/3',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot2',
|
||||
'/rowers/workout/'+encoded1+'/comment',
|
||||
'/rowers/workout/'+encoded1+'/darkskywind',
|
||||
'/rowers/workout/'+encoded1+'/data',
|
||||
'/rowers/workout/'+encoded1+'/edit',
|
||||
'/rowers/workout/'+encoded1+'/editintervals',
|
||||
'/rowers/workout/'+encoded1+'/flexchart',
|
||||
'/rowers/workout/'+encoded1+'/flexchart/spm/hr/None',
|
||||
'/rowers/workout/'+encoded1+'/flexchart/spm/hr/None/scatter',
|
||||
'/rowers/workout/'+encoded1+'/flexchart/spm/hr/None/scatter/',
|
||||
'/rowers/workout/'+encoded1+'/forcecurve',
|
||||
'/rowers/workout/'+encoded1+'/get-testscript',
|
||||
'/rowers/workout/'+encoded1+'/get-thumbnails',
|
||||
'/rowers/workout/'+encoded1+'/histo',
|
||||
'/rowers/workout/'+encoded1+'/image',
|
||||
'/rowers/workout/'+encoded1+'/instroke',
|
||||
'/rowers/workout/'+encoded1+'/interactiveotwplot',
|
||||
'/rowers/workout/'+encoded1+'/map',
|
||||
'/rowers/workout/'+encoded1+'/otwsetpower',
|
||||
'/rowers/workout/'+encoded1+'/recalcsummary/',
|
||||
'/rowers/workout/'+encoded1+'/restore',
|
||||
'/rowers/workout/'+encoded1+'/smoothenpace',
|
||||
'/rowers/workout/'+encoded1+'/split',
|
||||
'/rowers/workout/'+encoded1+'/stats',
|
||||
'/rowers/workout/'+encoded1+'/stream',
|
||||
'/rowers/workout/'+encoded1+'/task',
|
||||
'/rowers/workout/'+encoded1+'/test_strokedata',
|
||||
'/rowers/workout/'+encoded1+'/toggle-ranking',
|
||||
'/rowers/workout/'+encoded1+'/undosmoothenpace',
|
||||
'/rowers/workout/'+encoded1+'/unsubscribe',
|
||||
'/rowers/workout/'+encoded1+'/updatecp',
|
||||
'/rowers/workout/'+encoded1+'/view',
|
||||
'/rowers/workout/'+encoded1+'/wind',
|
||||
'/rowers/workout/'+encoded1+'/workflow',
|
||||
'/rowers/workout/compare/'+encoded1+'/2016-01-01/2016-12-31',
|
||||
'/rowers/workout/fusion/'+encoded1+'/',
|
||||
'/rowers/workout/fusion/'+encoded1+'/2016-01-01/2016-12-31',
|
||||
'/rowers/team-compare-select/workout/1/',
|
||||
'/rowers/team-compare-select/2016-01-01/2016-12-31/',
|
||||
'/rowers/test-job/2/',
|
||||
'/rowers/test-job2/2/',
|
||||
# '/rowers/test_callback/',
|
||||
# '/rowers/updatefitness/',
|
||||
# '/rowers/updatefitness/rower/',
|
||||
# '/rowers/updatefitness/rower/50/',
|
||||
# '/rowers/user-boxplot/',
|
||||
# '/rowers/user-boxplot-data/',
|
||||
# '/rowers/user-boxplot-select//',
|
||||
# '/rowers/user-boxplot-select/user/1//',
|
||||
# '/rowers/user-boxplot/user/1/',
|
||||
# '/rowers/user-multiflex-data/',
|
||||
# '/rowers/user-multiflex-select//',
|
||||
# '/rowers/user-multiflex-select/2016-01-01/2016-12-31/',
|
||||
# '/rowers/user-multiflex-select/user/1//',
|
||||
# '/rowers/user-multiflex-select/user/1/2016-01-01/2016-12-31/',
|
||||
# '/rowers/user-multiflex//',
|
||||
# '/rowers/user-multiflex/user/1/',
|
||||
'/rowers/workout/'+encoded1+'//',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot/',
|
||||
'/rowers/workout/'+encoded1+'/adddistanceplot2/',
|
||||
'/rowers/workout/'+encoded1+'/addotwpowerplot/',
|
||||
'/rowers/workout/'+encoded1+'/addpiechart/',
|
||||
'/rowers/workout/'+encoded1+'/addpowerpiechart/',
|
||||
'/rowers/workout/'+encoded1+'/addstatic/',
|
||||
'/rowers/workout/'+encoded1+'/addstatic/3/',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot/',
|
||||
'/rowers/workout/'+encoded1+'/addtimeplot2/',
|
||||
'/rowers/workout/'+encoded1+'/comment/',
|
||||
'/rowers/workout/'+encoded1+'/darkskywind/',
|
||||
'/rowers/workout/'+encoded1+'/data/',
|
||||
'/rowers/workout/'+encoded1+'/edit/',
|
||||
'/rowers/workout/'+encoded1+'/editintervals/',
|
||||
'/rowers/workout/'+encoded1+'/flexchart/',
|
||||
'/rowers/workout/'+encoded1+'/forcecurve/',
|
||||
'/rowers/workout/'+encoded1+'/get-testscript/',
|
||||
'/rowers/workout/'+encoded1+'/get-thumbnails/',
|
||||
'/rowers/workout/'+encoded1+'/histo/',
|
||||
'/rowers/workout/'+encoded1+'/image/',
|
||||
'/rowers/workout/'+encoded1+'/instroke/',
|
||||
'/rowers/workout/'+encoded1+'/interactiveotwplot/',
|
||||
'/rowers/workout/'+encoded1+'/map/',
|
||||
'/rowers/workout/'+encoded1+'/otwsetpower/',
|
||||
'/rowers/workout/'+encoded1+'/recalcsummary//',
|
||||
'/rowers/workout/'+encoded1+'/restore/',
|
||||
'/rowers/workout/'+encoded1+'/smoothenpace/',
|
||||
'/rowers/workout/'+encoded1+'/split/',
|
||||
'/rowers/workout/'+encoded1+'/stats/',
|
||||
'/rowers/workout/'+encoded1+'/stream/',
|
||||
'/rowers/workout/'+encoded1+'/task/',
|
||||
'/rowers/workout/'+encoded1+'/test_strokedata/',
|
||||
'/rowers/workout/'+encoded1+'/toggle-ranking/',
|
||||
'/rowers/workout/'+encoded1+'/undosmoothenpace/',
|
||||
'/rowers/workout/'+encoded1+'/unsubscribe/',
|
||||
'/rowers/workout/'+encoded1+'/updatecp/',
|
||||
'/rowers/workout/'+encoded1+'/view/',
|
||||
'/rowers/workout/'+encoded1+'/wind/',
|
||||
'/rowers/workout/'+encoded1+'/workflow/',
|
||||
'/rowers/workout/compare/'+encoded1+'/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/fusion/'+encoded1+'//',
|
||||
'/rowers/workout/fusion/'+encoded1+'/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/upload/',
|
||||
'/rowers/workout/upload/team/',
|
||||
'/rowers/workouts-join',
|
||||
'/rowers/workouts-join/',
|
||||
'/rowers/workouts-join-select/',
|
||||
'/rowers/workouts-join-select/2016-01-01/2016-12-31',
|
||||
'/rowers/workouts-join-select/2016-01-01/2016-12-31/',
|
||||
]
|
||||
|
||||
# urlstotest = ['/rowers/createplan/user/1/']
|
||||
|
||||
lijst = []
|
||||
for url in urlstotest:
|
||||
lijst.append(
|
||||
@@ -286,12 +285,20 @@ class URLTests(TestCase):
|
||||
)
|
||||
|
||||
@parameterized.expand(lijst)
|
||||
def test_url_generator(self,url,expected):
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.read_df_sql')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_url_generator(self,url,expected,
|
||||
mocked_sqlalchemy,
|
||||
mocked_read_df_sql,
|
||||
mocked_getsmallrowdata_db):
|
||||
login = self.c.login(username='john',password='koeinsloot')
|
||||
self.assertTrue(login)
|
||||
response = self.c.get(url,follow=True)
|
||||
if response.status_code != expected:
|
||||
print url
|
||||
print response.status_code
|
||||
self.assertEqual(response.status_code,
|
||||
expected,
|
||||
msg=url+' response status code not 200')
|
||||
expected)
|
||||
|
||||
|
||||
|
||||
@@ -152,11 +152,12 @@ workout water
|
||||
except (IOError,WindowsError):
|
||||
pass
|
||||
|
||||
@patch('requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.polarstuff.get_polar_notifications')
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
def test_emailprocessing(
|
||||
self, mock_get, mocked_sqlalchemy,mocked_polar_notifications):
|
||||
self, mocked_sqlalchemy,mocked_polar_notifications, mock_get, mock_post):
|
||||
out = StringIO()
|
||||
call_command('processemail', stdout=out,testing=True)
|
||||
self.assertIn('Successfully processed email attachments',out.getvalue())
|
||||
|
||||
288
rowers/tests/testdata/Courses.kml
vendored
Normal file
288
rowers/tests/testdata/Courses.kml
vendored
Normal file
@@ -0,0 +1,288 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
|
||||
<Document>
|
||||
<name>Courses.kml</name>
|
||||
<Style id="s_ylw-pushpin_hl">
|
||||
<IconStyle>
|
||||
<scale>1.3</scale>
|
||||
<Icon>
|
||||
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
|
||||
</Icon>
|
||||
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
|
||||
</IconStyle>
|
||||
</Style>
|
||||
<Style id="default">
|
||||
</Style>
|
||||
<Style id="s_ylw-pushpin_hl1">
|
||||
<IconStyle>
|
||||
<scale>1.3</scale>
|
||||
<Icon>
|
||||
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
|
||||
</Icon>
|
||||
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
|
||||
</IconStyle>
|
||||
</Style>
|
||||
<Style id="s_ylw-pushpin0">
|
||||
<IconStyle>
|
||||
<scale>1.1</scale>
|
||||
<Icon>
|
||||
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
|
||||
</Icon>
|
||||
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
|
||||
</IconStyle>
|
||||
</Style>
|
||||
<StyleMap id="m_ylw-pushpin00">
|
||||
<Pair>
|
||||
<key>normal</key>
|
||||
<styleUrl>#s_ylw-pushpin</styleUrl>
|
||||
</Pair>
|
||||
<Pair>
|
||||
<key>highlight</key>
|
||||
<styleUrl>#s_ylw-pushpin_hl1</styleUrl>
|
||||
</Pair>
|
||||
</StyleMap>
|
||||
<StyleMap id="default0">
|
||||
<Pair>
|
||||
<key>normal</key>
|
||||
<styleUrl>#default</styleUrl>
|
||||
</Pair>
|
||||
<Pair>
|
||||
<key>highlight</key>
|
||||
<styleUrl>#hl</styleUrl>
|
||||
</Pair>
|
||||
</StyleMap>
|
||||
<Style id="hl">
|
||||
<IconStyle>
|
||||
<scale>1.2</scale>
|
||||
</IconStyle>
|
||||
</Style>
|
||||
<StyleMap id="m_ylw-pushpin0">
|
||||
<Pair>
|
||||
<key>normal</key>
|
||||
<styleUrl>#s_ylw-pushpin0</styleUrl>
|
||||
</Pair>
|
||||
<Pair>
|
||||
<key>highlight</key>
|
||||
<styleUrl>#s_ylw-pushpin_hl</styleUrl>
|
||||
</Pair>
|
||||
</StyleMap>
|
||||
<Style id="s_ylw-pushpin">
|
||||
<IconStyle>
|
||||
<scale>1.1</scale>
|
||||
<Icon>
|
||||
<href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
|
||||
</Icon>
|
||||
<hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
|
||||
</IconStyle>
|
||||
</Style>
|
||||
<Folder>
|
||||
<name>Courses</name>
|
||||
<open>1</open>
|
||||
<Folder>
|
||||
<name>Prygl 6k</name>
|
||||
<open>1</open>
|
||||
<Placemark>
|
||||
<name>Start</name>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
16.493756183,49.24844155419999,0 16.4950276036,49.24946598889999,0 16.4935514581,49.25030382040001,0 16.4924501194,49.24874879119999,0 16.493756183,49.24844155419999,0 16.493756183,49.24844155419999,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Point 1</name>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
16.506708949,49.2439847728,0 16.502701462,49.2422079428,0 16.5053367985,49.2401527868,0 16.5094023592,49.2415898407,0 16.506708949,49.2439847728,0 16.506708949,49.2439847728,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Turn</name>
|
||||
<styleUrl>#default0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
16.5163547561,49.2300084054,0 16.5130017315,49.2295990778,0 16.5136670476,49.2286154281,0 16.5163274873,49.2289844757,0 16.5163547561,49.2300084054,0 16.5163547561,49.2300084054,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Finish</name>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
16.493756183,49.24844155419999,0 16.4950276036,49.24946598889999,0 16.4935514581,49.25030382040001,0 16.4924501194,49.24874879119999,0 16.493756183,49.24844155419999,0 16.493756183,49.24844155419999,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
</Folder>
|
||||
<Folder>
|
||||
<name>Head of Prague</name>
|
||||
<open>1</open>
|
||||
<Placemark>
|
||||
<name>Start</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
14.40795442915535,50.03834045518993,0 14.40882772308304,50.03984594689523,0 14.40678066310206,50.0401625745879,0 14.40566906248426,50.03869597446091,0 14.40795442915535,50.03834045518993,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Veslarsky Ostrov</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
14.41831806167885,50.05959293886939,0 14.41614241009258,50.05961498094956,0 14.41609483686422,50.05813133073231,0 14.41797644481905,50.05800508407179,0 14.41831806167885,50.05959293886939,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Bojka</name>
|
||||
<styleUrl>#m_ylw-pushpin00</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
14.41054841341896,50.07305590743798,0 14.41375740150687,50.07320621749878,0 14.41377510507448,50.07566133081293,0 14.40951128720742,50.07537273111618,0 14.41054841341896,50.07305590743798,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Finish</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
14.41318302502365,50.05400249489735,0 14.41471506059726,50.05385405063235,0 14.41509370112687,50.05487283052923,0 14.41358101629957,50.05505593846001,0 14.41318302502365,50.05400249489735,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
</Folder>
|
||||
<Folder>
|
||||
<name>Kalfje - Hoop</name>
|
||||
<open>1</open>
|
||||
<Placemark>
|
||||
<name>Start</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.894634980284101,52.3241873636367,0 4.895882222031302,52.32412984086649,0 4.895948941317798,52.32437687533162,0 4.894738874909264,52.32446348873298,0 4.894634980284101,52.3241873636367,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Rozenoord</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.897729984257948,52.33262092523194,0 4.89915049100132,52.3319113286945,0 4.899970177239785,52.33280796122619,0 4.8987424624178,52.33344193891938,0 4.897729984257948,52.33262092523194,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Willem</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.905851388469005,52.33544760540416,0 4.907086749586547,52.33518724070484,0 4.907534397847626,52.33579218770413,0 4.906276375816578,52.33609021548775,0 4.905851388469005,52.33544760540416,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>RIC</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.913241097543322,52.34075176199372,0 4.915165311671077,52.34014081049786,0 4.915552301531854,52.34055865906679,0 4.913870849216051,52.34141037275882,0 4.913241097543322,52.34075176199372,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Berlage</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.912187508821495,52.34692417428406,0 4.913632470994549,52.34710492136726,0 4.913415380326047,52.34752349771391,0 4.912003822744286,52.34732938928842,0 4.912187508821495,52.34692417428406,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
<Placemark>
|
||||
<name>Finish</name>
|
||||
<styleUrl>#m_ylw-pushpin0</styleUrl>
|
||||
<Polygon>
|
||||
<tessellate>1</tessellate>
|
||||
<outerBoundaryIs>
|
||||
<LinearRing>
|
||||
<coordinates>
|
||||
4.908558247025685,52.35433618476513,0 4.90724093544173,52.35393344489751,0 4.907595629957788,52.35358471533717,0 4.908788523651813,52.35393270379102,0 4.908558247025685,52.35433618476513,0
|
||||
</coordinates>
|
||||
</LinearRing>
|
||||
</outerBoundaryIs>
|
||||
</Polygon>
|
||||
</Placemark>
|
||||
</Folder>
|
||||
</Folder>
|
||||
</Document>
|
||||
</kml>
|
||||
1399
rowers/tests/testdata/colsfromdb.csv
vendored
Normal file
1399
rowers/tests/testdata/colsfromdb.csv
vendored
Normal file
File diff suppressed because it is too large
Load Diff
248
rowers/tests/testdata/empower.csv
vendored
Normal file
248
rowers/tests/testdata/empower.csv
vendored
Normal file
@@ -0,0 +1,248 @@
|
||||
index, lapIdx, Horizontal (meters),Distance (IMP),TimeStamp (sec), Stroke500mPace (sec/500m),GPS Speed,Split (IMP),Speed (IMP), Cadence (stokes/min),Total Strokes,Distance/Stroke (GPS),Distance/Stroke (IMP), HRCur (bpm), Power (watts),catch,slip,finish,wash, AverageDriveForce (lbs),driveenergy, PeakDriveForce (lbs),peakforceangle, latitude, longitude,cum_dist, ElapsedTime (sec), DriveLength (meters), StrokeDistance (meters), DriveTime (ms), DragFactor, StrokeRecoveryTime (ms), AverageBoatSpeed (m/s), AverageDriveForce (N), PeakDriveForce (N), WorkoutState, Stroke Number,originalvelo
|
||||
0,0.0,3.7,0.0,1546781882.0,252.022177952,1.97,0.0,0.0,23.5,1,3.7,0.0,139.0,0.0,11.0,0.0,27.0,0.0,-0.899236098934,0.0,2.0232812226,14.0,49.0731248,17.4591188,3.7,0.0,0,0,0,0,0,1.97,-4.0,9.0,4,0,1.97
|
||||
1,0.0,3.7,0.0,1546781883.9,310.393756651,1.97,0.0,0.0,23.5,1,3.7,0.0,139.0,73.0,-54.0,15.0,42.0,18.0,33.9461627348,233.0,62.4969088759,-8.0,49.0731248,17.4591188,3.7,1.90000009537,0,0,0,0,0,1.66666666667,151.0,278.0,4,1,1.66666666667
|
||||
2,0.0,9.9,0.0,1546781885.8,311.776233743,1.52,0.0,0.0,16.5,2,6.2,0.0,137.0,72.0,-59.0,5.0,42.0,22.0,37.3182981058,258.0,56.6518742328,-27.0,49.0731383,17.4590363,9.9,3.79999995232,0,0,0,0,0,1.52,166.0,252.0,4,2,1.52
|
||||
3,0.0,17.4,0.0,1546781889.8,291.326785417,1.8,0.0,0.0,14.5,3,7.5,0.0,134.0,65.0,-60.0,11.0,40.0,21.0,36.1942529821,256.0,63.6209539996,-15.0,49.073147,17.4589338,17.4,7.79999995232,0,0,0,0,0,1.8,161.0,283.0,4,2,1.8
|
||||
4,0.0,23.0,0.0,1546781893.6,280.448717949,1.8,0.0,0.0,16.0,4,5.6,0.0,133.0,69.0,-63.0,9.0,36.0,16.0,37.99272518,267.0,60.4736276533,-8.0,49.0731593,17.4588594,23.0,11.5999999046,0,0,0,0,0,1.8,169.0,269.0,4,3,1.8
|
||||
5,0.0,32.1,0.0,1546781897.2,264.750378215,1.79,0.0,0.0,16.5,5,9.1,0.0,133.0,86.0,-60.0,7.0,40.0,19.0,39.5663883531,302.0,73.2877420631,-27.0,49.0731625,17.4587341,32.1,15.2000000477,0,0,0,0,0,1.79,176.0,326.0,4,4,1.79
|
||||
6,0.0,42.9,0.0,1546781900.6,229.628657657,2.24,0.0,0.0,17.0,6,10.8,0.0,133.0,89.0,-63.0,7.0,40.0,16.0,39.5663883531,313.0,69.0163705932,-18.0,49.0731564,17.4585859,42.9,18.5999999046,0,0,0,0,0,2.24,176.0,307.0,4,5,2.24
|
||||
7,0.0,51.5,0.0,1546781904.3,203.27564177,2.47,0.0,0.0,17.0,7,8.6,0.0,134.0,90.0,-62.0,10.0,40.0,19.0,42.9385237241,308.0,78.2335406073,-25.0,49.073149,17.4584684,51.5,22.2999999523,0,0,0,0,0,2.47,191.0,348.0,4,6,2.46999999999
|
||||
8,0.0,61.7,0.0,1546781907.8,196.23233909,2.53,0.0,0.0,16.5,8,10.2,0.0,135.0,76.0,-63.0,8.0,39.0,15.0,36.8686800563,284.0,66.5434713211,-3.0,49.073145,17.4583284,61.7,25.7999999523,0,0,0,0,0,2.53,164.0,296.0,4,7,2.53
|
||||
9,0.0,70.7,0.0,1546781911.2,193.755535872,2.59,0.0,0.0,17.5,9,8.9,0.0,135.0,84.0,-63.0,11.0,42.0,25.0,36.1942529821,284.0,71.71407889,-24.0,49.0731419,17.458206,70.7,29.2000000477,0,0,0,0,0,2.59,161.0,319.0,4,8,2.59
|
||||
10,0.0,80.3,0.0,1546781914.8,190.445097399,2.61,0.0,0.0,16.5,10,9.6,0.0,136.0,90.0,-63.0,7.0,40.0,21.0,43.3881417736,327.0,82.5049120772,-28.0,49.0731419,17.4580743,80.3,32.7999999523,0,0,0,0,0,2.61,193.0,367.0,4,9,2.61
|
||||
11,0.0,90.5,0.0,1546781918.6,189.619677105,2.66,0.0,0.0,16.5,11,10.2,0.0,135.0,79.0,-65.0,8.0,40.0,22.0,38.6671522542,299.0,70.5900337663,-26.0,49.0731455,17.4579345,90.5,36.5999999046,0,0,0,0,0,2.66,172.0,314.0,4,10,2.66
|
||||
12,0.0,99.8,0.0,1546781922.3,189.005292148,2.63,0.0,0.0,17.0,12,9.3,0.0,135.0,75.0,-63.0,5.0,38.0,19.0,34.620589809,266.0,63.1713359501,-1.0,49.0731481,17.4578064,99.8,40.2999999523,0,0,0,0,0,2.63,154.0,281.0,4,12,2.63
|
||||
13,0.0,108.2,0.0,1546781925.3,185.61731014,2.68,0.0,0.0,18.0,13,8.4,0.0,136.0,103.0,-63.0,8.0,40.0,21.0,45.1866139714,331.0,82.7297211019,-25.0,49.0731503,17.4576916,108.2,43.2999999523,0,0,0,0,0,2.68,201.0,368.0,4,12,2.68
|
||||
14,0.0,118.6,0.0,1546781928.8,180.654485393,2.79,0.0,0.0,17.5,14,10.4,0.0,136.0,91.0,-62.0,8.0,42.0,20.0,42.4889056746,313.0,73.7373601126,-22.0,49.0731557,17.4575498,118.6,46.7999999523,0,0,0,0,0,2.79,189.0,328.0,4,13,2.79
|
||||
15,0.0,127.9,0.0,1546781932.3,180.13381369,2.78,0.0,0.0,17.5,15,9.3,0.0,136.0,98.0,-64.0,6.0,43.0,22.0,43.6129507983,331.0,79.1327767062,-25.0,49.0731625,17.4574222,127.9,50.2999999523,0,0,0,0,0,2.78,194.0,352.0,4,14,2.78
|
||||
16,0.0,137.9,0.0,1546781935.8,181.837073982,2.73,0.0,0.0,17.5,16,10.0,0.0,136.0,68.0,-62.0,12.0,40.0,21.0,32.8221176111,243.0,62.9465269254,-7.0,49.0731706,17.4572852,137.9,53.7999999523,0,0,0,0,0,2.73,146.0,280.0,4,15,2.73
|
||||
17,0.0,147.0,0.0,1546781939.1,180.897250361,2.77,0.0,0.0,17.5,17,9.0,0.0,136.0,91.0,-62.0,8.0,43.0,24.0,43.3881417736,302.0,75.3110232857,-25.0,49.0731793,17.4571618,147.0,57.0999999046,0,0,0,0,0,2.77,193.0,335.0,4,16,2.77000000001
|
||||
18,0.0,156.5,0.0,1546781942.4,179.009819967,2.8,0.0,0.0,18.0,18,9.5,0.0,136.0,75.0,-63.0,11.0,39.0,17.0,35.2950168832,261.0,61.3728637522,-5.0,49.0731856,17.4570316,156.5,60.4000000954,0,0,0,0,0,2.8,157.0,273.0,4,17,2.80000000001
|
||||
19,0.0,166.0,0.0,1546781945.8,179.046449765,2.79,0.0,0.0,18.0,19,9.5,0.0,137.0,93.0,-62.0,11.0,40.0,21.0,41.1400515262,303.0,76.6598774341,-18.0,49.0731918,17.4569012,166.0,63.7999999523,0,0,0,0,0,2.79,183.0,341.0,4,18,2.79
|
||||
20,0.0,175.2,0.0,1546781949.3,172.66896892,2.79,0.0,0.0,17.0,20,9.2,0.0,137.0,85.0,-61.0,12.0,37.0,18.0,42.0392876252,290.0,77.1094954836,-19.0,49.0731977,17.4567754,175.2,67.2999999523,0,0,0,0,0,2.79,187.0,343.0,4,19,2.79
|
||||
21,0.0,184.7,0.0,1546781952.6,206.294942827,2.82,0.0,0.0,18.0,21,9.5,0.0,137.0,81.0,-63.0,8.0,40.0,16.0,37.5431071305,276.0,64.7449991232,-8.0,49.0732025,17.4566457,184.7,70.5999999046,0,0,0,0,0,2.82,167.0,288.0,4,20,2.82
|
||||
22,0.0,184.7,0.0,1546781955.45,219.344056821,2.82,0.0,0.0,18.0,21,9.5,0.0,137.0,81.0,2.0,8.0,27.0,16.0,-8.54274293987,276.0,0.899236098934,8.0,49.0732025,17.4566457,184.7,73.4500000477,0,0,0,0,0,1.66666666667,-38.0,4.0,4,21,1.66666666667
|
||||
23,0.0,197.8,0.0,1546781958.3,218.613366646,2.74,0.0,0.0,32.0,22,13.1,0.0,137.0,81.0,-12.0,8.0,-3.0,16.0,-1.57366317313,276.0,2.24809024733,-9.0,49.0732089,17.456466,197.8,76.2999999523,0,0,0,0,0,2.74,-7.0,10.0,4,23,2.74
|
||||
24,0.0,202.3,0.0,1546781961.3,206.7091897,2.3,0.0,0.0,9.0,23,4.5,0.0,138.0,63.0,-49.0,11.0,33.0,24.0,26.5274649186,158.0,52.8301208124,-24.0,49.0732191,17.4564069,202.3,79.2999999523,0,0,0,0,0,2.3,118.0,235.0,4,23,2.3
|
||||
25,0.0,209.4,0.0,1546781964.9,263.118328071,1.89,0.0,0.0,15.5,24,7.1,0.0,138.0,50.0,-59.0,23.0,37.0,22.0,25.6282288196,190.0,56.4270652081,-13.0,49.0732446,17.4563168,209.4,82.9000000954,0,0,0,0,0,1.89,114.0,251.0,4,24,1.89
|
||||
26,0.0,209.4,0.0,1546781964.9,283.431409599,1.89,0.0,0.0,15.5,24,7.1,0.0,138.0,50.0,14.0,23.0,18.0,22.0,-2.92251732154,190.0,-0.449618049467,17.0,49.0732446,17.4563168,209.4,82.9000000954,0,0,0,0,0,1.66666666667,-13.0,-2.0,4,24,1.66666666667
|
||||
27,0.0,209.4,0.0,1546781964.9,371.208371633,1.89,0.0,0.0,15.5,24,7.1,0.0,138.0,50.0,19.0,23.0,24.0,22.0,-0.6744270742,190.0,0.6744270742,21.0,49.0732446,17.4563168,209.4,82.9000000954,0,0,0,0,0,1.66666666667,-3.0,3.0,4,24,1.66666666667
|
||||
28,0.0,237.7,0.0,1546781992.0,402.947271471,0.79,0.0,0.0,27.5,25,28.3,0.0,128.0,6.0,-39.0,23.0,14.0,22.0,6.29465269254,30.0,16.6358678303,-22.0,49.0732956,17.4559393,237.7,110.0,0,0,0,0,0,0.79,28.0,74.0,4,37,0.79
|
||||
29,0.0,237.7,0.0,1546781992.0,366.006692694,0.79,0.0,0.0,27.5,25,28.3,0.0,128.0,6.0,13.0,23.0,23.0,22.0,0.0,30.0,1.57366317313,16.0,49.0732956,17.4559393,237.7,110.0,0,0,0,0,0,1.66666666667,0.0,7.0,4,37,1.66666666667
|
||||
30,0.0,237.7,0.0,1546781992.0,281.561729057,0.79,0.0,0.0,27.5,25,28.3,0.0,128.0,26.0,-50.0,7.0,31.0,49.0,19.5583851518,103.0,37.7679161552,-33.0,49.0732956,17.4559393,237.7,110.0,0,0,0,0,0,1.66666666667,87.0,168.0,4,37,1.66666666667
|
||||
31,0.0,237.7,0.0,1546781992.0,332.110323887,0.79,0.0,0.0,27.5,25,28.3,0.0,128.0,53.0,-56.0,9.0,41.0,13.0,39.3415793284,265.0,61.8224818017,-20.0,49.0732956,17.4559393,237.7,110.0,0,0,0,0,0,1.66666666667,175.0,275.0,4,37,1.66666666667
|
||||
32,0.0,268.6,0.0,1546782019.8,330.937972769,1.27,0.0,0.0,12.0,26,30.9,0.0,123.0,85.0,-61.0,5.0,42.0,14.0,52.8301208124,398.0,89.2491828192,-29.0,49.0733344,17.4555205,268.6,137.799999952,0,0,0,0,0,1.27,235.0,397.0,4,42,1.27
|
||||
33,0.0,277.6,0.0,1546782023.7,270.688321732,1.96,0.0,0.0,15.5,27,8.9,0.0,122.0,100.0,-63.0,11.0,42.0,17.0,47.8843222682,367.0,89.9236098934,-22.0,49.073349,17.4553998,277.6,141.700000048,0,0,0,0,0,1.96,213.0,400.0,4,43,1.96
|
||||
34,0.0,286.8,0.0,1546782027.3,208.135109419,2.41,0.0,0.0,16.5,28,9.2,0.0,122.0,91.0,-62.0,8.0,42.0,19.0,44.0625688478,334.0,80.9312489041,-9.0,49.0733622,17.4552756,286.8,145.299999952,0,0,0,0,0,2.41,196.0,360.0,4,44,2.41
|
||||
35,0.0,296.9,0.0,1546782031.1,192.012288786,2.61,0.0,0.0,16.5,29,10.1,0.0,124.0,97.0,-62.0,5.0,45.0,15.0,46.7602771446,360.0,82.2801030525,-5.0,49.0733726,17.4551374,296.9,149.099999905,0,0,0,0,0,2.61,208.0,366.0,4,45,2.61
|
||||
36,0.0,305.9,0.0,1546782034.4,187.748095698,2.64,0.0,0.0,17.0,30,9.0,0.0,124.0,114.0,-62.0,7.0,42.0,18.0,51.7060756887,387.0,92.3965091655,-11.0,49.07338,17.4550146,305.9,152.400000095,0,0,0,0,0,2.64,230.0,411.0,4,46,2.64
|
||||
37,0.0,315.7,0.0,1546782038.2,185.893350329,2.65,0.0,0.0,17.0,31,9.8,0.0,126.0,112.0,-62.0,7.0,44.0,17.0,51.9308847134,404.0,98.4663528333,-24.0,49.07339,17.4548812,315.7,156.200000048,0,0,0,0,0,2.65,231.0,438.0,4,47,2.65
|
||||
38,0.0,323.2,0.0,1546782041.7,218.504182795,2.52,0.0,0.0,17.0,32,7.5,0.0,127.0,119.0,-62.0,7.0,45.0,18.0,54.6285930102,415.0,95.319026487,-22.0,49.0733961,17.4547786,323.2,159.700000048,0,0,0,0,0,2.52,243.0,424.0,4,48,2.52
|
||||
39,0.0,323.2,0.0,1546782045.6,245.464746587,2.52,0.0,0.0,17.0,32,7.5,0.0,127.0,119.0,-3.0,7.0,59.0,18.0,-7.64350684094,415.0,7.64350684094,1.0,49.0733961,17.4547786,323.2,163.599999905,0,0,0,0,0,1.66666666667,-34.0,34.0,4,49,1.66666666667
|
||||
40,0.0,339.9,0.0,1546782049.5,261.819269898,2.21,0.0,0.0,8.0,33,16.7,0.0,131.0,87.0,-57.0,8.0,43.0,15.0,47.6595132435,340.0,80.2568218299,-16.0,49.0734108,17.4545503,339.9,167.5,0,0,0,0,0,2.21,212.0,357.0,4,50,2.21
|
||||
41,0.0,344.1,0.0,1546782051.5,239.332603938,1.95,0.0,0.0,30.5,34,4.2,0.0,132.0,87.0,-57.0,8.0,43.0,15.0,47.6595132435,340.0,80.2568218299,-16.0,49.073411,17.4544927,344.1,169.5,0,0,0,0,0,1.95,212.0,357.0,4,51,1.95
|
||||
42,0.0,347.4,0.0,1546782052.6,226.537216828,2.19,0.0,0.0,38.5,35,3.3,0.0,133.0,108.0,-61.0,7.0,44.0,20.0,51.481266664,362.0,87.4507106213,-22.0,49.073411,17.4544472,347.4,170.599999905,0,0,0,0,0,2.19,229.0,389.0,4,52,2.19
|
||||
43,0.0,357.3,0.0,1546782056.3,196.806117859,2.61,0.0,0.0,17.0,36,9.8,0.0,133.0,81.0,-59.0,21.0,42.0,16.0,35.5198259079,288.0,78.9079676815,-15.0,49.0734072,17.4543125,357.3,174.299999952,0,0,0,0,0,2.61,158.0,351.0,4,53,2.61
|
||||
44,0.0,366.9,0.0,1546782059.7,184.638109306,2.69,0.0,0.0,18.0,37,9.6,0.0,133.0,110.0,-59.0,10.0,42.0,19.0,50.582030565,357.0,92.8461272149,-18.0,49.0734067,17.4541812,366.9,177.700000048,0,0,0,0,0,2.69,225.0,413.0,4,54,2.69
|
||||
45,0.0,376.1,0.0,1546782062.9,183.303655599,2.72,0.0,0.0,18.5,38,9.2,0.0,132.0,105.0,-61.0,7.0,44.0,20.0,48.5587493424,346.0,82.7297211019,-24.0,49.0734053,17.4540551,376.1,180.900000095,0,0,0,0,0,2.72,216.0,368.0,4,55,2.72
|
||||
46,0.0,385.5,0.0,1546782066.3,179.634571957,2.78,0.0,0.0,17.5,39,9.4,0.0,131.0,104.0,-64.0,10.0,43.0,18.0,46.5354681198,365.0,89.0243737945,-17.0,49.0734007,17.4539261,385.5,184.299999952,0,0,0,0,0,2.78,207.0,396.0,4,56,2.78
|
||||
47,0.0,394.8,0.0,1546782069.5,175.087543772,2.86,0.0,0.0,18.0,40,9.3,0.0,131.0,109.0,-63.0,11.0,44.0,17.0,45.8610410456,364.0,89.2491828192,-17.0,49.0733941,17.453799,394.8,187.5,0,0,0,0,0,2.86,204.0,397.0,4,57,2.86
|
||||
48,0.0,405.0,0.0,1546782072.9,171.922585716,2.91,0.0,0.0,18.5,41,10.2,0.0,131.0,122.0,-65.0,9.0,45.0,16.0,50.3572215403,392.0,86.5514745224,-10.0,49.0733851,17.4536597,405.0,190.900000095,0,0,0,0,0,2.91,224.0,385.0,4,58,2.91
|
||||
49,0.0,414.4,0.0,1546782076.1,170.399221032,2.93,0.0,0.0,18.5,42,9.4,0.0,132.0,130.0,-62.0,7.0,42.0,15.0,53.5045478866,406.0,98.0167347838,-18.0,49.0733741,17.4535318,414.4,194.099999905,0,0,0,0,0,2.93,238.0,436.0,4,59,2.93
|
||||
50,0.0,423.4,0.0,1546782079.0,170.266588831,2.94,0.0,0.0,19.5,43,9.0,0.0,133.0,137.0,-64.0,6.0,45.0,15.0,55.9774471586,435.0,100.939252105,-25.0,49.0733624,17.45341,423.4,197.0,0,0,0,0,0,2.94,249.0,449.0,4,60,2.94
|
||||
51,0.0,432.6,0.0,1546782082.3,171.97327044,2.91,0.0,0.0,19.0,44,9.2,0.0,134.0,125.0,-62.0,16.0,43.0,16.0,49.6827944661,390.0,106.109859674,-15.0,49.0733469,17.4532861,432.6,200.299999952,0,0,0,0,0,2.91,221.0,472.0,4,61,2.91
|
||||
52,0.0,441.5,0.0,1546782085.4,175.385848867,2.85,0.0,0.0,19.0,45,9.0,0.0,135.0,123.0,-66.0,9.0,41.0,15.0,50.3572215403,398.0,93.5205542891,-18.0,49.0733265,17.4531672,441.5,203.400000095,0,0,0,0,0,2.85,224.0,416.0,4,62,2.85
|
||||
53,0.0,450.1,0.0,1546782088.5,178.026449644,2.8,0.0,0.0,19.5,46,8.6,0.0,137.0,123.0,-61.0,8.0,45.0,17.0,49.0083673919,377.0,88.7995647697,-20.0,49.0733044,17.453055,450.1,206.5,0,0,0,0,0,2.8,218.0,395.0,4,63,2.80000000001
|
||||
54,0.0,459.5,0.0,1546782091.8,179.874601706,2.79,0.0,0.0,18.5,47,9.4,0.0,139.0,111.0,-63.0,7.0,40.0,19.0,48.7835583672,368.0,92.6213181902,-23.0,49.0732797,17.4529317,459.5,209.799999952,0,0,0,0,0,2.79,217.0,412.0,4,64,2.79
|
||||
55,0.0,468.3,0.0,1546782095.1,181.761528874,2.75,0.0,0.0,18.0,48,8.8,0.0,140.0,123.0,-64.0,8.0,43.0,20.0,54.4037839855,412.0,101.16406113,-20.0,49.0732572,17.4528157,468.3,213.099999905,0,0,0,0,0,2.75,242.0,450.0,4,65,2.75
|
||||
56,0.0,477.6,0.0,1546782098.5,182.863113897,2.73,0.0,0.0,18.5,49,9.3,0.0,141.0,119.0,-63.0,10.0,42.0,16.0,52.6053117876,390.0,100.264825031,-18.0,49.0732319,17.452694,477.6,216.5,0,0,0,0,0,2.73,234.0,446.0,4,66,2.73
|
||||
57,0.0,486.9,0.0,1546782101.7,180.170904972,2.77,0.0,0.0,18.5,50,9.3,0.0,142.0,131.0,-62.0,7.0,43.0,17.0,53.5045478866,421.0,106.784286748,-25.0,49.0732035,17.4525742,486.9,219.700000048,0,0,0,0,0,2.77,238.0,475.0,4,67,2.77000000001
|
||||
58,0.0,496.4,0.0,1546782104.9,175.087543772,2.86,0.0,0.0,18.5,51,9.6,0.0,142.0,123.0,-62.0,6.0,43.0,19.0,49.9076034908,391.0,94.4197903881,-15.0,49.0731742,17.452451,496.4,222.900000095,0,0,0,0,0,2.86,222.0,420.0,4,68,2.86
|
||||
59,0.0,505.6,0.0,1546782107.9,170.798360336,2.93,0.0,0.0,19.5,52,9.2,0.0,142.0,117.0,-63.0,5.0,42.0,14.0,45.4114229962,372.0,92.8461272149,-9.0,49.0731439,17.4523343,505.6,225.900000095,0,0,0,0,0,2.93,202.0,413.0,4,69,2.93
|
||||
60,0.0,515.1,0.0,1546782111.3,169.114804793,2.96,0.0,0.0,19.5,53,9.5,0.0,142.0,122.0,-61.0,8.0,43.0,20.0,47.8843222682,364.0,92.8461272149,-18.0,49.0731111,17.4522142,515.1,229.299999952,0,0,0,0,0,2.96,213.0,413.0,4,70,2.96
|
||||
61,0.0,524.0,0.0,1546782114.4,168.625939487,2.96,0.0,0.0,19.5,54,8.9,0.0,144.0,115.0,-61.0,10.0,44.0,19.0,47.8843222682,361.0,94.4197903881,-16.0,49.0730812,17.4521003,524.0,232.400000095,0,0,0,0,0,2.96,213.0,420.0,4,71,2.96
|
||||
62,0.0,533.2,0.0,1546782117.3,167.352013006,2.98,0.0,0.0,20.0,55,9.2,0.0,145.0,109.0,-62.0,8.0,43.0,21.0,44.736995922,331.0,84.0785752503,-25.0,49.0730525,17.4519826,533.2,235.299999952,0,0,0,0,0,2.98,199.0,374.0,4,72,2.98000000001
|
||||
63,0.0,542.4,0.0,1546782120.3,166.634926681,3.01,0.0,0.0,18.5,56,9.2,0.0,145.0,115.0,-62.0,9.0,43.0,17.0,49.2331764166,376.0,96.2182625859,-20.0,49.0730245,17.4518636,542.4,238.299999952,0,0,0,0,0,3.01,219.0,428.0,4,73,3.00999999999
|
||||
64,0.0,552.4,0.0,1546782123.7,170.13416294,2.95,0.0,0.0,18.0,57,10.0,0.0,145.0,106.0,-60.0,8.0,45.0,20.0,49.6827944661,362.0,94.1949813633,-20.0,49.072999,17.4517329,552.4,241.700000048,0,0,0,0,0,2.95,221.0,419.0,4,74,2.95
|
||||
65,0.0,561.6,0.0,1546782127.1,177.502789329,2.81,0.0,0.0,18.5,58,9.2,0.0,145.0,105.0,-63.0,10.0,39.0,14.0,44.5121868972,358.0,90.3732279429,-10.0,49.0729713,17.451614,561.6,245.099999905,0,0,0,0,0,2.81,198.0,402.0,4,75,2.81000000001
|
||||
66,0.0,570.2,0.0,1546782130.3,182.291666666,2.73,0.0,0.0,18.5,59,8.6,0.0,144.0,117.0,-62.0,8.0,42.0,17.0,50.3572215403,363.0,89.2491828192,-18.0,49.0729389,17.4515068,570.2,248.299999952,0,0,0,0,0,2.73,224.0,397.0,4,76,2.73
|
||||
67,0.0,579.2,0.0,1546782133.5,180.785123967,2.77,0.0,0.0,18.5,60,9.1,0.0,145.0,100.0,-62.0,8.0,41.0,21.0,43.3881417736,329.0,84.9778113493,-23.0,49.0729015,17.4513962,579.2,251.5,0,0,0,0,0,2.77,193.0,378.0,4,77,2.77000000001
|
||||
68,0.0,588.5,0.0,1546782136.7,176.322418136,2.84,0.0,0.0,19.0,61,9.3,0.0,145.0,98.0,-61.0,8.0,42.0,20.0,41.5896695757,310.0,77.7839225578,-26.0,49.0728648,17.4512823,588.5,254.700000048,0,0,0,0,0,2.84,185.0,346.0,4,78,2.84
|
||||
69,0.0,597.3,0.0,1546782139.7,172.057811424,2.9,0.0,0.0,19.5,62,8.8,0.0,145.0,128.0,-63.0,8.0,43.0,20.0,52.1556937382,387.0,95.319026487,-24.0,49.0728289,17.4511749,597.3,257.700000048,0,0,0,0,0,2.9,232.0,424.0,4,79,2.90000000001
|
||||
70,0.0,606.8,0.0,1546782142.9,169.212918198,2.96,0.0,0.0,18.5,63,9.5,0.0,145.0,106.0,-64.0,6.0,42.0,15.0,44.0625688478,353.0,82.7297211019,-5.0,49.0727886,17.45106,606.8,260.900000095,0,0,0,0,0,2.96,196.0,368.0,4,80,2.96
|
||||
71,0.0,616.1,0.0,1546782146.1,168.821146054,2.96,0.0,0.0,19.0,64,9.3,0.0,145.0,118.0,-62.0,7.0,42.0,18.0,48.109131293,374.0,90.1484189181,-23.0,49.0727483,17.4509477,616.1,264.099999905,0,0,0,0,0,2.96,214.0,401.0,4,81,2.96
|
||||
72,0.0,625.8,0.0,1546782149.5,173.181593271,2.9,0.0,0.0,18.0,65,9.6,0.0,145.0,116.0,-61.0,8.0,42.0,15.0,52.3805027629,378.0,90.8228459923,-18.0,49.0727058,17.450833,625.8,267.5,0,0,0,0,0,2.9,233.0,404.0,4,82,2.90000000001
|
||||
73,0.0,634.9,0.0,1546782152.9,180.822483984,2.76,0.0,0.0,18.0,66,9.1,0.0,146.0,111.0,-61.0,8.0,43.0,19.0,51.0316486145,376.0,93.9701723386,-17.0,49.0726665,17.4507231,634.9,270.900000095,0,0,0,0,0,2.76,227.0,418.0,4,83,2.76
|
||||
74,0.0,643.7,0.0,1546782156.3,186.428038777,2.67,0.0,0.0,18.0,67,8.8,0.0,146.0,116.0,-61.0,9.0,43.0,19.0,51.481266664,385.0,98.691161858,-22.0,49.072625,17.45062,643.7,274.299999952,0,0,0,0,0,2.67,229.0,439.0,4,84,2.67
|
||||
75,0.0,652.5,0.0,1546782159.5,184.307530279,2.7,0.0,0.0,18.0,68,8.8,0.0,146.0,124.0,-63.0,7.0,44.0,19.0,54.4037839855,412.0,100.939252105,-19.0,49.072583,17.4505179,652.5,277.5,0,0,0,0,0,2.7,242.0,449.0,4,85,2.7
|
||||
76,0.0,661.8,0.0,1546782162.7,180.915951618,2.78,0.0,0.0,18.0,69,9.2,0.0,146.0,118.0,-64.0,8.0,43.0,15.0,52.3805027629,402.0,92.6213181902,-10.0,49.0725354,17.450414,661.8,280.700000048,0,0,0,0,0,2.78,233.0,412.0,4,86,2.78
|
||||
77,0.0,670.2,0.0,1546782166.1,188.273265196,2.69,0.0,0.0,18.0,70,8.5,0.0,146.0,109.0,-59.0,12.0,43.0,19.0,48.3339403177,372.0,105.210623575,-18.0,49.0724894,17.450321,670.2,284.099999905,0,0,0,0,0,2.69,215.0,468.0,4,87,2.69
|
||||
78,0.0,677.9,0.0,1546782169.5,205.979284369,2.4,0.0,0.0,17.5,71,7.7,0.0,146.0,125.0,-62.0,7.0,45.0,18.0,57.1014922823,439.0,105.885050649,-19.0,49.072446,17.4502395,677.9,287.5,0,0,0,0,0,2.4,254.0,471.0,4,88,2.4
|
||||
79,0.0,685.9,0.0,1546782172.9,216.610966703,2.28,0.0,0.0,18.0,72,8.0,0.0,146.0,123.0,-61.0,10.0,45.0,16.0,53.2797388618,405.0,102.962533328,-16.0,49.0723973,17.4501597,685.9,290.900000095,0,0,0,0,0,2.28,237.0,458.0,4,89,2.28
|
||||
80,0.0,694.2,0.0,1546782176.3,211.992731678,2.38,0.0,0.0,18.0,73,8.4,0.0,147.0,115.0,-62.0,10.0,44.0,16.0,49.9076034908,381.0,96.8926896601,-9.0,49.0723414,17.4500835,694.2,294.299999952,0,0,0,0,0,2.38,222.0,431.0,4,90,2.38000000001
|
||||
81,0.0,701.9,0.0,1546782179.5,208.085612366,2.42,0.0,0.0,18.0,74,7.7,0.0,147.0,110.0,-61.0,9.0,42.0,17.0,49.6827944661,383.0,96.8926896601,-22.0,49.0722844,17.4500237,701.9,297.5,0,0,0,0,0,2.42,221.0,431.0,4,91,2.42
|
||||
82,0.0,710.1,0.0,1546782182.9,209.530651341,2.37,0.0,0.0,18.0,75,8.2,0.0,147.0,132.0,-62.0,9.0,43.0,16.0,57.326301307,424.0,105.210623575,-20.0,49.0722249,17.4499585,710.1,300.900000095,0,0,0,0,0,2.37,255.0,468.0,4,92,2.37
|
||||
83,0.0,718.2,0.0,1546782186.4,207.665836003,2.4,0.0,0.0,17.5,76,8.2,0.0,148.0,109.0,-62.0,8.0,43.0,19.0,50.3572215403,375.0,93.2957452644,-15.0,49.0721656,17.4498923,718.2,304.400000095,0,0,0,0,0,2.4,224.0,415.0,4,93,2.4
|
||||
84,0.0,727.5,0.0,1546782189.9,201.427255985,2.49,0.0,0.0,17.0,77,9.3,0.0,149.0,114.0,-63.0,8.0,43.0,18.0,55.5278291092,403.0,100.264825031,-18.0,49.0720993,17.449815,727.5,307.900000095,0,0,0,0,0,2.49,247.0,446.0,4,94,2.49000000001
|
||||
85,0.0,736.0,0.0,1546782193.3,198.637911464,2.53,0.0,0.0,17.0,78,8.5,0.0,148.0,103.0,-62.0,12.0,43.0,20.0,50.582030565,361.0,98.691161858,-20.0,49.0720396,17.4497418,736.0,311.299999952,0,0,0,0,0,2.53,225.0,439.0,4,95,2.53
|
||||
86,0.0,744.5,0.0,1546782196.7,198.637911464,2.5,0.0,0.0,18.0,79,8.5,0.0,148.0,116.0,-64.0,8.0,43.0,19.0,54.1789749608,393.0,98.2415438085,-25.0,49.0719792,17.4496715,744.5,314.700000048,0,0,0,0,0,2.5,241.0,437.0,4,96,2.5
|
||||
87,0.0,753.4,0.0,1546782200.1,198.031005998,2.53,0.0,0.0,17.0,80,8.9,0.0,149.0,91.0,-61.0,7.0,38.0,11.0,45.1866139714,317.0,74.8614052363,1.0,49.071914,17.4496013,753.4,318.099999905,0,0,0,0,0,2.53,201.0,333.0,4,97,2.53
|
||||
88,0.0,762.6,0.0,1546782203.7,196.939005177,2.55,0.0,0.0,17.0,81,9.2,0.0,149.0,111.0,-63.0,10.0,43.0,18.0,51.481266664,394.0,101.16406113,-21.0,49.0718452,17.4495309,762.6,321.700000048,0,0,0,0,0,2.55,229.0,450.0,4,98,2.54999999999
|
||||
89,0.0,771.7,0.0,1546782207.3,194.639083528,2.55,0.0,0.0,18.0,82,9.1,0.0,148.0,123.0,-64.0,7.0,41.0,15.0,55.5278291092,413.0,95.319026487,-16.0,49.0717776,17.4494599,771.7,325.299999952,0,0,0,0,0,2.55,247.0,424.0,4,99,2.54999999999
|
||||
90,0.0,780.7,0.0,1546782210.4,188.679245283,2.65,0.0,0.0,17.5,83,9.0,0.0,147.0,112.0,-64.0,11.0,41.0,17.0,50.3572215403,382.0,100.040016006,-19.0,49.0717101,17.4493922,780.7,328.400000095,0,0,0,0,0,2.65,224.0,445.0,4,100,2.65
|
||||
91,0.0,790.5,0.0,1546782213.9,182.786714017,2.75,0.0,0.0,18.0,84,9.8,0.0,146.0,126.0,-63.0,9.0,45.0,17.0,53.0549298371,418.0,101.838488204,-20.0,49.0716349,17.4493228,790.5,331.900000095,0,0,0,0,0,2.75,236.0,453.0,4,101,2.75
|
||||
92,0.0,799.8,0.0,1546782217.3,181.365944657,2.75,0.0,0.0,17.5,85,9.3,0.0,147.0,127.0,-65.0,12.0,45.0,16.0,56.2022561834,434.0,109.481995045,-19.0,49.0715618,17.4492615,799.8,335.299999952,0,0,0,0,0,2.75,250.0,487.0,4,102,2.75
|
||||
93,0.0,808.7,0.0,1546782220.5,183.303655599,2.72,0.0,0.0,18.0,86,8.9,0.0,147.0,101.0,-62.0,14.0,40.0,17.0,45.8610410456,338.0,88.3499467203,-23.0,49.0714903,17.4492069,808.7,338.5,0,0,0,0,0,2.72,204.0,393.0,4,103,2.72
|
||||
94,0.0,817.5,0.0,1546782223.9,190.902149013,2.65,0.0,0.0,18.5,87,8.8,0.0,146.0,97.0,-62.0,8.0,42.0,14.0,42.7137146994,346.0,81.6056759783,-1.0,49.0714171,17.4491605,817.5,341.900000095,0,0,0,0,0,2.65,190.0,363.0,4,104,2.65
|
||||
95,0.0,830.6,0.0,1546782229.5,203.986478611,2.44,0.0,0.0,11.0,88,13.1,0.0,145.0,90.0,-60.0,11.0,40.0,21.0,42.0392876252,326.0,94.4197903881,-28.0,49.0713075,17.4490961,830.6,347.5,0,0,0,0,0,2.44,187.0,420.0,4,105,2.44
|
||||
96,0.0,839.1,0.0,1546782232.9,209.706411025,2.35,0.0,0.0,17.5,89,8.5,0.0,145.0,130.0,-64.0,9.0,43.0,17.0,57.1014922823,427.0,105.660241625,-28.0,49.0712359,17.4490537,839.1,350.900000095,0,0,0,0,0,2.35,254.0,470.0,4,106,2.35
|
||||
97,0.0,848.3,0.0,1546782236.3,200.297584983,2.51,0.0,0.0,17.5,90,9.1,0.0,145.0,139.0,-66.0,10.0,45.0,18.0,60.9232457028,470.0,108.357949922,-18.0,49.0711593,17.4490091,848.3,354.299999952,0,0,0,0,0,2.51,271.0,482.0,4,107,2.51
|
||||
98,0.0,857.7,0.0,1546782239.7,190.031490933,2.65,0.0,0.0,17.0,91,9.4,0.0,142.0,104.0,-61.0,12.0,41.0,17.0,47.8843222682,360.0,94.4197903881,-19.0,49.0710799,17.4489643,857.7,357.700000048,0,0,0,0,0,2.65,213.0,420.0,4,108,2.65
|
||||
99,0.0,866.4,0.0,1546782242.9,187.065740246,2.66,0.0,0.0,19.0,92,8.7,0.0,142.0,109.0,-64.0,10.0,41.0,12.0,43.837759823,354.0,85.6522384235,-5.0,49.0710066,17.4489243,866.4,360.900000095,0,0,0,0,0,2.66,195.0,381.0,4,109,2.66
|
||||
100,0.0,874.9,0.0,1546782246.3,188.984881209,2.65,0.0,0.0,18.5,93,8.6,0.0,142.0,125.0,-63.0,8.0,41.0,16.0,54.853402035,396.0,95.7686445365,-21.0,49.0709334,17.4488879,874.9,364.299999952,0,0,0,0,0,2.65,244.0,426.0,4,110,2.65
|
||||
101,0.0,882.0,0.0,1546782249.3,194.314901177,2.58,0.0,0.0,18.5,94,7.0,0.0,142.0,136.0,-65.0,10.0,43.0,16.0,58.4503464307,447.0,108.357949922,-24.0,49.0708735,17.4488573,882.0,367.299999952,0,0,0,0,0,2.58,260.0,482.0,4,111,2.58000000001
|
||||
102,0.0,889.5,0.0,1546782252.6,203.322876728,2.46,0.0,0.0,18.5,95,7.6,0.0,142.0,114.0,-62.0,7.0,44.0,17.0,51.2564576392,380.0,87.2259015966,-7.0,49.0708074,17.448832,889.5,370.599999905,0,0,0,0,0,2.46,228.0,388.0,4,112,2.46
|
||||
103,0.0,898.0,0.0,1546782255.9,208.805631786,2.38,0.0,0.0,19.0,96,8.5,0.0,143.0,131.0,-63.0,7.0,45.0,19.0,55.5278291092,415.0,98.9159708827,-19.0,49.0707327,17.4488074,898.0,373.900000095,0,0,0,0,0,2.38,247.0,440.0,4,113,2.38000000001
|
||||
104,0.0,906.8,0.0,1546782259.1,204.272207307,2.44,0.0,0.0,18.5,97,8.7,0.0,144.0,128.0,-66.0,8.0,44.0,19.0,52.3805027629,423.0,98.691161858,-22.0,49.0706573,17.448774,906.8,377.099999905,0,0,0,0,0,2.44,233.0,439.0,4,114,2.44
|
||||
105,0.0,915.9,0.0,1546782262.3,196.452626852,2.57,0.0,0.0,19.0,98,9.1,0.0,144.0,108.0,-63.0,9.0,41.0,15.0,45.4114229962,347.0,86.3266654977,-17.0,49.0705788,17.4487408,915.9,380.299999952,0,0,0,0,0,2.57,202.0,384.0,4,115,2.57
|
||||
106,0.0,924.8,0.0,1546782265.5,190.569530654,2.61,0.0,0.0,18.5,99,8.9,0.0,144.0,110.0,-62.0,10.0,42.0,18.0,48.109131293,341.0,83.1793391514,-10.0,49.0705009,17.4487107,924.8,383.5,0,0,0,0,0,2.61,214.0,370.0,4,116,2.61
|
||||
107,0.0,934.1,0.0,1546782268.7,184.755067568,2.69,0.0,0.0,18.5,100,9.3,0.0,146.0,106.0,-63.0,10.0,41.0,19.0,45.8610410456,353.0,90.1484189181,-21.0,49.0704196,17.4486806,934.1,386.700000048,0,0,0,0,0,2.69,204.0,401.0,4,117,2.69
|
||||
108,0.0,944.5,0.0,1546782272.3,181.931593721,2.78,0.0,0.0,17.0,101,10.4,0.0,146.0,98.0,-62.0,11.0,42.0,14.0,46.9850861693,341.0,88.1251376955,-10.0,49.0703297,17.4486444,944.5,390.299999952,0,0,0,0,0,2.78,209.0,392.0,4,118,2.78
|
||||
109,0.0,957.6,0.0,1546782277.5,183.688464365,2.66,0.0,0.0,11.5,102,13.2,0.0,146.0,90.0,-53.0,7.0,42.0,17.0,51.7060756887,347.0,92.3965091655,-19.0,49.0702153,17.448599,957.6,395.5,0,0,0,0,0,2.66,230.0,411.0,4,119,2.66
|
||||
110,0.0,965.8,0.0,1546782280.7,216.745107753,2.48,0.0,0.0,19.0,103,8.2,0.0,145.0,116.0,-59.0,4.0,43.0,18.0,47.4347042188,376.0,94.1949813633,-5.0,49.0701445,17.448568,965.8,398.700000048,0,0,0,0,0,2.48,211.0,419.0,4,120,2.48
|
||||
111,0.0,965.8,0.0,1546782280.7,268.762158288,2.48,0.0,0.0,19.0,103,8.2,0.0,145.0,116.0,17.0,4.0,28.0,18.0,-3.14732634627,376.0,-0.6744270742,27.0,49.0701445,17.448568,965.8,398.700000048,0,0,0,0,0,1.66666666667,-14.0,-3.0,4,120,1.66666666667
|
||||
112,0.0,965.8,0.0,1546782280.7,308.67826905,2.48,0.0,0.0,19.0,103,8.2,0.0,145.0,116.0,16.0,4.0,21.0,18.0,-3.59694439574,376.0,-0.6744270742,21.0,49.0701445,17.448568,965.8,398.700000048,0,0,0,0,0,1.66666666667,-16.0,-3.0,4,120,1.66666666667
|
||||
113,0.0,965.8,0.0,1546782280.7,295.441755768,2.48,0.0,0.0,19.0,103,8.2,0.0,145.0,41.0,-44.0,3.0,37.0,22.0,34.8453988337,179.0,54.1789749608,-11.0,49.0701445,17.448568,965.8,398.700000048,0,0,0,0,0,1.66666666667,155.0,241.0,4,120,1.66666666667
|
||||
114,0.0,978.8,0.0,1546782295.7,424.139602521,1.4,0.0,0.0,23.0,104,12.9,0.0,142.0,34.0,-48.0,4.0,36.0,22.0,31.4732634627,174.0,46.0858500704,-26.0,49.0700297,17.4485482,978.8,413.700000048,0,0,0,0,0,1.4,140.0,205.0,4,125,1.4
|
||||
115,0.0,978.9,0.0,1546782299.7,865.051903114,0.3,0.0,0.0,12.5,105,0.1,0.0,141.0,34.0,-48.0,4.0,36.0,22.0,31.4732634627,174.0,46.0858500704,-26.0,49.0700298,17.448565,978.9,417.700000048,0,0,0,0,0,0.3,140.0,205.0,4,126,0.299999999999
|
||||
116,0.0,979.0,0.0,1546782302.3,1995.43899657,0.38,0.0,0.0,18.5,106,0.1,0.0,140.0,38.0,-48.0,4.0,31.0,13.0,31.9228815122,174.0,46.5354681198,-16.0,49.0700292,17.4485737,979.0,420.299999952,0,0,0,0,0,0.38,142.0,207.0,4,127,0.380000000001
|
||||
117,0.0,979.0,0.0,1546782304.9,1134.15424497,0.41,0.0,0.0,21.5,107,0.0,0.0,138.0,99.0,-24.0,2.0,36.0,15.0,43.1633327488,161.0,66.0938532716,-8.0,49.0700377,17.4485847,979.0,422.900000095,0,0,0,0,0,0.41,192.0,294.0,4,128,0.410000000001
|
||||
118,0.0,979.0,0.0,1546782307.1,703.942075623,0.67,0.0,0.0,29.5,108,0.0,0.0,137.0,34.0,-29.0,7.0,32.0,31.0,17.5351039292,84.0,38.2175342047,-12.0,49.0700554,17.448598,979.0,425.099999905,0,0,0,0,0,0.67,78.0,170.0,4,129,0.67
|
||||
119,0.0,979.0,0.0,1546782310.5,495.610308694,1.08,0.0,0.0,19.0,109,0.0,0.0,136.0,0.0,4.0,7.0,9.0,31.0,0.449618049467,0.0,4.27137146994,4.0,49.0700886,17.4486129,979.0,428.5,0,0,0,0,0,1.08,2.0,19.0,4,130,1.08
|
||||
120,0.0,979.0,0.0,1546782314.7,482.89183223,1.09,0.0,0.0,29.5,110,0.0,0.0,133.0,0.0,4.0,7.0,9.0,31.0,0.449618049467,0.0,4.27137146994,4.0,49.0701216,17.4486281,979.0,432.700000048,0,0,0,0,0,1.09,2.0,19.0,4,132,1.09
|
||||
121,0.0,979.0,0.0,1546782315.9,400.091449474,0.98,0.0,0.0,18.5,111,0.0,0.0,133.0,0.0,5.0,7.0,19.0,31.0,1.3488541484,0.0,4.0465624452,5.0,49.0701303,17.4486336,979.0,433.900000095,0,0,0,0,0,0.98,6.0,18.0,4,133,0.979999999999
|
||||
122,0.0,979.0,0.0,1546782317.6,398.602991421,0.98,0.0,0.0,18.5,111,0.0,0.0,133.0,0.0,15.0,7.0,23.0,31.0,-0.6744270742,0.0,3.59694439574,16.0,49.0701303,17.4486336,979.0,435.599999905,0,0,0,0,0,1.66666666667,-3.0,16.0,4,133,1.66666666667
|
||||
123,0.0,980.2,0.0,1546782319.3,413.711583924,0.92,0.0,0.0,15.5,112,1.2,0.0,132.0,90.0,-54.0,3.0,36.0,20.0,44.2873778725,285.0,78.458349632,-27.0,49.0701559,17.4486452,980.2,437.299999952,0,0,0,0,0,0.92,197.0,349.0,4,134,0.919999999999
|
||||
124,0.0,986.9,0.0,1546782322.9,382.179515178,1.32,0.0,0.0,16.5,113,6.7,0.0,131.0,75.0,-61.0,11.0,39.0,16.0,35.2950168832,252.0,62.7217179006,-1.0,49.070216,17.4486666,986.9,440.900000095,0,0,0,0,0,1.32,157.0,279.0,4,135,1.32
|
||||
125,0.0,995.3,0.0,1546782326.3,247.105337476,2.08,0.0,0.0,17.5,114,8.4,0.0,130.0,107.0,-60.0,8.0,40.0,18.0,47.209895194,335.0,84.7530023245,-28.0,49.0702893,17.4486947,995.3,444.299999952,0,0,0,0,0,2.08,210.0,377.0,4,136,2.08
|
||||
126,0.0,1004.7,0.0,1546782329.7,197.20531891,2.55,0.0,0.0,18.0,115,9.4,0.0,129.0,100.0,-62.0,8.0,40.0,18.0,44.736995922,336.0,80.9312489041,-20.0,49.0703715,17.4487249,1004.7,447.700000048,0,0,0,0,0,2.55,199.0,360.0,4,137,2.54999999999
|
||||
127,0.0,1014.4,0.0,1546782333.4,181.912681913,2.74,0.0,0.0,17.5,116,9.6,0.0,130.0,89.0,-61.0,8.0,39.0,18.0,41.364860551,306.0,74.8614052363,-23.0,49.0704561,17.4487538,1014.4,451.400000095,0,0,0,0,0,2.74,184.0,333.0,4,138,2.74
|
||||
128,0.0,1023.2,0.0,1546782336.4,176.198147402,2.83,0.0,0.0,18.0,117,8.8,0.0,132.0,86.0,-65.0,6.0,37.0,15.0,37.99272518,299.0,76.6598774341,-13.0,49.0705336,17.44878,1023.2,454.400000095,0,0,0,0,0,2.83,169.0,341.0,4,139,2.82999999999
|
||||
129,0.0,1033.0,0.0,1546782339.6,172.413793103,2.9,0.0,0.0,18.5,118,9.7,0.0,133.0,103.0,-62.0,8.0,39.0,18.0,43.3881417736,322.0,79.8072037804,-21.0,49.0706186,17.448811,1033.0,457.599999905,0,0,0,0,0,2.9,193.0,355.0,4,140,2.90000000001
|
||||
130,0.0,1043.2,0.0,1546782343.1,170.167250097,2.94,0.0,0.0,18.0,119,10.2,0.0,134.0,107.0,-62.0,8.0,43.0,18.0,46.7602771446,354.0,84.7530023245,-7.0,49.070707,17.4488502,1043.2,461.099999905,0,0,0,0,0,2.94,208.0,377.0,4,141,2.94
|
||||
131,0.0,1052.7,0.0,1546782346.3,169.524363073,2.94,0.0,0.0,18.0,120,9.5,0.0,135.0,91.0,-63.0,11.0,39.0,21.0,40.465624452,304.0,82.0552940277,-22.0,49.070788,17.44889,1052.7,464.299999952,0,0,0,0,0,2.94,180.0,365.0,4,142,2.94
|
||||
132,0.0,1061.8,0.0,1546782349.5,172.328902019,2.91,0.0,0.0,18.5,121,9.1,0.0,135.0,57.0,-62.0,34.0,35.0,18.0,25.4034197949,194.0,59.5743915544,-3.0,49.0708656,17.4489293,1061.8,467.5,0,0,0,0,0,2.91,113.0,265.0,4,143,2.91
|
||||
133,0.0,1069.3,0.0,1546782352.7,184.171753315,2.75,0.0,0.0,19.5,122,7.5,0.0,137.0,110.0,-62.0,9.0,39.0,19.0,42.2640966499,333.0,87.9003286708,-23.0,49.0709313,17.4489551,1069.3,470.700000048,0,0,0,0,0,2.75,188.0,391.0,4,144,2.75
|
||||
134,0.0,1077.0,0.0,1546782356.1,200.734113329,2.46,0.0,0.0,18.5,123,7.7,0.0,137.0,116.0,-64.0,8.0,40.0,18.0,49.4579854414,379.0,89.2491828192,-27.0,49.0709986,17.4489806,1077.0,474.099999905,0,0,0,0,0,2.46,220.0,397.0,4,145,2.46
|
||||
135,0.0,1086.5,0.0,1546782359.3,200.297584983,2.45,0.0,0.0,18.0,124,9.4,0.0,137.0,110.0,-63.0,7.0,44.0,20.0,45.1866139714,364.0,87.4507106213,-22.0,49.0710747,17.4490381,1086.5,477.299999952,0,0,0,0,0,2.45,201.0,389.0,4,146,2.45
|
||||
136,0.0,1097.2,0.0,1546782362.7,183.284457478,2.77,0.0,0.0,19.0,125,10.8,0.0,138.0,94.0,-64.0,9.0,38.0,16.0,38.6671522542,314.0,78.458349632,-2.0,49.0711598,17.4491083,1097.2,480.700000048,0,0,0,0,0,2.77,172.0,349.0,4,147,2.77000000001
|
||||
137,0.0,1106.6,0.0,1546782365.7,171.804437463,2.93,0.0,0.0,18.5,126,9.4,0.0,138.0,122.0,-63.0,9.0,41.0,18.0,51.2564576392,374.0,87.9003286708,-27.0,49.0712324,17.4491733,1106.6,483.700000048,0,0,0,0,0,2.93,228.0,391.0,4,148,2.93
|
||||
138,0.0,1117.3,0.0,1546782369.4,169.114804794,2.93,0.0,0.0,17.5,127,10.7,0.0,139.0,109.0,-64.0,9.0,40.0,16.0,49.2331764166,381.0,88.3499467203,-19.0,49.0713161,17.4492459,1117.3,487.400000095,0,0,0,0,0,2.93,219.0,393.0,4,149,2.93
|
||||
139,0.0,1127.6,0.0,1546782372.5,166.905102527,3.0,0.0,0.0,18.0,128,10.3,0.0,139.0,107.0,-65.0,10.0,40.0,18.0,44.5121868972,365.0,88.574755745,-15.0,49.071396,17.4493171,1127.6,490.5,0,0,0,0,0,3.0,198.0,394.0,4,150,2.99999999999
|
||||
140,0.0,1138.9,0.0,1546782375.9,163.490284006,3.06,0.0,0.0,18.0,129,11.3,0.0,140.0,116.0,-64.0,8.0,40.0,17.0,48.7835583672,382.0,90.8228459923,-31.0,49.0714833,17.4493949,1138.9,493.900000095,0,0,0,0,0,3.06,217.0,404.0,4,151,3.06000000001
|
||||
141,0.0,1149.5,0.0,1546782379.3,162.382852371,3.08,0.0,0.0,18.0,130,10.6,0.0,139.0,105.0,-64.0,11.0,40.0,18.0,43.6129507983,360.0,90.3732279429,-26.0,49.0715661,17.4494673,1149.5,497.299999952,0,0,0,0,0,3.08,194.0,402.0,4,152,3.07999999999
|
||||
142,0.0,1160.2,0.0,1546782382.7,164.303821238,3.05,0.0,0.0,18.0,131,10.7,0.0,140.0,84.0,-64.0,14.0,38.0,14.0,37.7679161552,285.0,72.3885059642,-8.0,49.0716492,17.4495411,1160.2,500.700000048,0,0,0,0,0,3.05,168.0,322.0,4,153,3.04999999999
|
||||
143,0.0,1169.8,0.0,1546782385.9,167.865707434,2.97,0.0,0.0,18.0,132,9.6,0.0,140.0,77.0,-60.0,14.0,42.0,27.0,32.8221176111,258.0,78.2335406073,-22.0,49.0717218,17.4496122,1169.8,503.900000095,0,0,0,0,0,2.97,146.0,348.0,4,154,2.97
|
||||
144,0.0,1179.5,0.0,1546782389.1,171.333463873,2.92,0.0,0.0,18.5,133,9.7,0.0,140.0,56.0,-61.0,31.0,36.0,21.0,24.504183696,191.0,57.7759193565,-8.0,49.0717933,17.4496874,1179.5,507.099999905,0,0,0,0,0,2.92,109.0,257.0,4,155,2.92000000001
|
||||
145,0.0,1188.7,0.0,1546782392.3,173.818037346,2.88,0.0,0.0,19.0,134,9.2,0.0,141.0,105.0,-60.0,9.0,41.0,20.0,44.5121868972,313.0,81.3808669535,-18.0,49.0718568,17.4497684,1188.7,510.299999952,0,0,0,0,0,2.88,198.0,362.0,4,156,2.88
|
||||
146,0.0,1198.5,0.0,1546782395.7,175.175175175,2.85,0.0,0.0,18.0,135,9.8,0.0,141.0,92.0,-61.0,8.0,40.0,20.0,42.7137146994,311.0,81.3808669535,-21.0,49.0719208,17.4498615,1198.5,513.700000048,0,0,0,0,0,2.85,190.0,362.0,4,157,2.85
|
||||
147,0.0,1208.7,0.0,1546782399.3,174.008153525,2.87,0.0,0.0,17.0,136,10.2,0.0,141.0,83.0,-63.0,8.0,40.0,15.0,37.5431071305,295.0,70.814842791,-6.0,49.0719849,17.4499606,1208.7,517.299999952,0,0,0,0,0,2.87,167.0,315.0,4,158,2.86999999999
|
||||
148,0.0,1218.2,0.0,1546782402.5,170.498830865,2.93,0.0,0.0,18.0,137,9.5,0.0,141.0,106.0,-63.0,10.0,41.0,19.0,46.3106590951,348.0,88.574755745,-21.0,49.0720448,17.4500529,1218.2,520.5,0,0,0,0,0,2.93,206.0,394.0,4,159,2.93
|
||||
149,0.0,1229.1,0.0,1546782405.9,168.172208341,2.98,0.0,0.0,17.5,138,10.9,0.0,141.0,77.0,-63.0,11.0,39.0,17.0,34.620589809,269.0,70.3652247416,-5.0,49.0721142,17.4501588,1229.1,523.900000095,0,0,0,0,0,2.98,154.0,313.0,4,160,2.98000000001
|
||||
150,0.0,1239.9,0.0,1546782409.7,170.6651063,2.94,0.0,0.0,15.5,139,10.9,0.0,141.0,65.0,-61.0,15.0,38.0,20.0,34.620589809,254.0,69.9156066921,-13.0,49.0721853,17.4502609,1239.9,527.700000048,0,0,0,0,0,2.94,154.0,311.0,4,161,2.94
|
||||
151,0.0,1249.4,0.0,1546782413.1,172.193250024,2.81,0.0,0.0,18.0,140,9.5,0.0,141.0,85.0,-62.0,11.0,41.0,18.0,39.5663883531,282.0,72.6133149889,-1.0,49.0722456,17.4503531,1249.4,531.099999905,0,0,0,0,0,2.81,176.0,323.0,4,162,2.81000000001
|
||||
152,0.0,1258.8,0.0,1546782416.5,210.184962767,2.71,0.0,0.0,18.5,141,9.4,0.0,141.0,84.0,-62.0,13.0,36.0,15.0,38.6671522542,275.0,75.086214261,-13.0,49.0723019,17.4504484,1258.8,534.5,0,0,0,0,0,2.71,172.0,334.0,4,163,2.71000000001
|
||||
153,0.0,1258.8,0.0,1546782419.2,223.604071724,2.71,0.0,0.0,18.5,141,9.4,0.0,141.0,0.0,11.0,13.0,23.0,15.0,0.449618049467,0.0,4.49618049467,12.0,49.0723019,17.4504484,1258.8,537.200000048,0,0,0,0,0,1.66666666667,2.0,20.0,4,163,1.66666666667
|
||||
154,0.0,1271.9,0.0,1546782421.9,248.015873016,2.57,0.0,0.0,11.0,142,13.1,0.0,140.0,5.0,-53.0,13.0,17.0,15.0,3.372135371,20.0,9.66678806354,-40.0,49.0723852,17.4505758,1271.9,539.900000095,0,0,0,0,0,2.57,15.0,43.0,4,164,2.57
|
||||
155,0.0,1271.9,0.0,1546782421.9,252.98766384,2.57,0.0,0.0,11.0,142,13.1,0.0,140.0,0.0,15.0,13.0,20.0,15.0,0.224809024733,0.0,4.27137146994,15.0,49.0723852,17.4505758,1271.9,539.900000095,0,0,0,0,0,1.66666666667,1.0,19.0,4,164,1.66666666667
|
||||
156,0.0,1271.9,0.0,1546782421.9,314.616168275,2.57,0.0,0.0,11.0,142,13.1,0.0,140.0,0.0,20.0,13.0,27.0,15.0,-0.224809024733,0.0,1.3488541484,20.0,49.0723852,17.4505758,1271.9,539.900000095,0,0,0,0,0,1.66666666667,-1.0,6.0,4,164,1.66666666667
|
||||
157,0.0,1271.9,0.0,1546782421.9,299.281723863,2.57,0.0,0.0,11.0,142,13.1,0.0,140.0,0.0,22.0,13.0,27.0,15.0,-0.224809024733,0.0,1.57366317313,24.0,49.0723852,17.4505758,1271.9,539.900000095,0,0,0,0,0,1.66666666667,-1.0,7.0,4,164,1.66666666667
|
||||
158,0.0,1271.9,0.0,1546782421.9,302.33227757,2.57,0.0,0.0,11.0,142,13.1,0.0,140.0,48.0,-55.0,7.0,32.0,26.0,33.4965446853,197.0,62.2720998512,-22.0,49.0723852,17.4505758,1271.9,539.900000095,0,0,0,0,0,1.66666666667,149.0,277.0,4,164,1.66666666667
|
||||
159,0.0,1294.9,0.0,1546782438.3,312.27694504,1.62,0.0,0.0,30.5,143,23.0,0.0,132.0,48.0,-55.0,7.0,32.0,26.0,33.4965446853,197.0,62.2720998512,-22.0,49.0725246,17.4508084,1294.9,556.299999952,0,0,0,0,0,1.62,149.0,277.0,4,172,1.62
|
||||
160,0.0,1298.6,0.0,1546782439.9,292.838018742,1.63,0.0,0.0,33.5,144,3.7,0.0,131.0,51.0,-59.0,30.0,33.0,16.0,25.8530378444,185.0,60.0240096038,2.0,49.0725444,17.4508496,1298.6,557.900000095,0,0,0,0,0,1.63,115.0,267.0,4,173,1.63
|
||||
161,0.0,1306.5,0.0,1546782443.5,257.466529351,2.02,0.0,0.0,17.0,145,7.8,0.0,129.0,111.0,-60.0,5.0,42.0,17.0,50.1324125156,357.0,81.3808669535,-29.0,49.0725838,17.4509382,1306.5,561.5,0,0,0,0,0,2.02,223.0,362.0,4,174,2.02
|
||||
162,0.0,1315.8,0.0,1546782447.3,219.683655536,2.21,0.0,0.0,15.5,146,9.3,0.0,129.0,90.0,-61.0,9.0,39.0,16.0,47.4347042188,345.0,83.4041481761,-7.0,49.0726277,17.4510476,1315.8,565.299999952,0,0,0,0,0,2.21,211.0,371.0,4,175,2.21
|
||||
163,0.0,1325.7,0.0,1546782450.9,202.49942143,2.53,0.0,0.0,16.5,147,9.9,0.0,128.0,77.0,-63.0,10.0,39.0,14.0,36.1942529821,288.0,72.6133149889,1.0,49.0726736,17.451164,1325.7,568.900000095,0,0,0,0,0,2.53,161.0,323.0,4,176,2.53
|
||||
164,0.0,1331.6,0.0,1546782453.4,195.92476489,2.54,0.0,0.0,32.0,148,5.8,0.0,128.0,77.0,10.0,10.0,18.0,14.0,0.0,288.0,4.0465624452,11.0,49.0727025,17.4512309,1331.6,571.400000095,0,0,0,0,0,2.54,0.0,18.0,4,178,2.54
|
||||
165,0.0,1337.3,0.0,1546782455.5,197.450073339,2.51,0.0,0.0,22.0,149,5.8,0.0,128.0,119.0,-62.0,7.0,41.0,18.0,49.9076034908,359.0,86.3266654977,-28.0,49.0727314,17.4512965,1337.3,573.5,0,0,0,0,0,2.51,222.0,384.0,4,178,2.51
|
||||
166,0.0,1346.8,0.0,1546782459.4,195.990592452,2.57,0.0,0.0,17.0,150,9.5,0.0,130.0,94.0,-64.0,8.0,41.0,18.0,45.6362320209,328.0,73.2877420631,-16.0,49.0727792,17.4514036,1346.8,577.400000095,0,0,0,0,0,2.57,203.0,326.0,4,179,2.57
|
||||
167,0.0,1356.0,0.0,1546782462.6,191.970162352,2.59,0.0,0.0,16.5,151,9.3,0.0,130.0,86.0,-66.0,15.0,39.0,22.0,39.5663883531,323.0,90.8228459923,-23.0,49.0728264,17.4515081,1356.0,580.599999905,0,0,0,0,0,2.59,176.0,404.0,4,180,2.59
|
||||
168,0.0,1365.8,0.0,1546782466.1,188.821752266,2.66,0.0,0.0,16.5,152,9.8,0.0,131.0,102.0,-63.0,9.0,41.0,16.0,47.8843222682,353.0,83.1793391514,-18.0,49.0728765,17.4516178,1365.8,584.099999905,0,0,0,0,0,2.66,213.0,370.0,4,181,2.66
|
||||
169,0.0,1375.7,0.0,1546782469.7,184.482395108,2.7,0.0,0.0,17.0,153,10.0,0.0,132.0,88.0,-61.0,7.0,41.0,21.0,40.6904334768,309.0,75.3110232857,-21.0,49.0729287,17.4517288,1375.7,587.700000048,0,0,0,0,0,2.7,181.0,335.0,4,182,2.7
|
||||
170,0.0,1385.5,0.0,1546782473.1,180.953365732,2.77,0.0,0.0,18.0,154,9.7,0.0,132.0,80.0,-64.0,15.0,40.0,19.0,34.1709717595,269.0,71.2644608405,-11.0,49.072975,17.4518419,1385.5,591.099999905,0,0,0,0,0,2.77,152.0,317.0,4,183,2.77000000001
|
||||
171,0.0,1394.6,0.0,1546782476.3,177.93594306,2.81,0.0,0.0,18.5,155,9.2,0.0,133.0,115.0,-64.0,9.0,40.0,18.0,50.582030565,361.0,89.6988008687,-28.0,49.0730153,17.4519514,1394.6,594.299999952,0,0,0,0,0,2.81,225.0,399.0,4,184,2.81000000001
|
||||
172,0.0,1404.2,0.0,1546782479.5,175.685172171,2.84,0.0,0.0,18.5,156,9.5,0.0,134.0,108.0,-62.0,7.0,39.0,16.0,45.4114229962,360.0,86.3266654977,-27.0,49.0730548,17.4520673,1404.2,597.5,0,0,0,0,0,2.84,202.0,384.0,4,185,2.84
|
||||
173,0.0,1414.3,0.0,1546782482.9,174.025457438,2.88,0.0,0.0,18.0,157,10.1,0.0,135.0,113.0,-63.0,10.0,40.0,17.0,50.3572215403,371.0,88.3499467203,-27.0,49.0730951,17.4521922,1414.3,600.900000095,0,0,0,0,0,2.88,224.0,393.0,4,186,2.88
|
||||
174,0.0,1424.0,0.0,1546782486.4,173.611111111,2.88,0.0,0.0,18.0,158,9.7,0.0,135.0,64.0,-63.0,19.0,36.0,18.0,31.0236454132,214.0,64.2953810738,-1.0,49.0731319,17.4523123,1424.0,604.400000095,0,0,0,0,0,2.88,138.0,286.0,4,187,2.88
|
||||
175,0.0,1432.6,0.0,1546782489.4,174.216027875,2.87,0.0,0.0,19.0,159,8.7,0.0,136.0,92.0,-60.0,10.0,39.0,21.0,41.364860551,287.0,77.7839225578,-23.0,49.0731598,17.4524232,1432.6,607.400000095,0,0,0,0,0,2.87,184.0,346.0,4,188,2.86999999999
|
||||
176,0.0,1442.1,0.0,1546782492.5,172.941990315,2.88,0.0,0.0,18.5,160,9.4,0.0,137.0,106.0,-61.0,9.0,40.0,17.0,46.9850861693,343.0,84.3033842751,-22.0,49.0731835,17.4525474,1442.1,610.5,0,0,0,0,0,2.88,209.0,375.0,4,189,2.88
|
||||
177,0.0,1452.5,0.0,1546782495.9,170.565302144,2.94,0.0,0.0,18.0,161,10.5,0.0,137.0,103.0,-64.0,8.0,41.0,19.0,49.0083673919,354.0,84.5281932998,-26.0,49.0732039,17.4526874,1452.5,613.900000095,0,0,0,0,0,2.94,218.0,376.0,4,190,2.94
|
||||
178,0.0,1463.2,0.0,1546782499.5,169.688742364,2.95,0.0,0.0,16.5,162,10.6,0.0,138.0,91.0,-61.0,8.0,41.0,21.0,43.6129507983,328.0,90.8228459923,-22.0,49.0732228,17.4528302,1463.2,617.5,0,0,0,0,0,2.95,194.0,404.0,4,191,2.95
|
||||
179,0.0,1472.6,0.0,1546782502.7,171.97327044,2.91,0.0,0.0,18.5,163,9.4,0.0,139.0,77.0,-64.0,12.0,38.0,18.0,33.4965446853,268.0,72.8381240137,-3.0,49.0732382,17.452957,1472.6,620.700000048,0,0,0,0,0,2.91,149.0,324.0,4,192,2.91
|
||||
180,0.0,1482.0,0.0,1546782506.1,173.938972269,2.86,0.0,0.0,18.0,164,9.5,0.0,139.0,119.0,-62.0,9.0,41.0,18.0,50.582030565,377.0,93.9701723386,-16.0,49.0732489,17.4530859,1482.0,624.099999905,0,0,0,0,0,2.86,225.0,418.0,4,193,2.86
|
||||
181,0.0,1492.0,0.0,1546782509.5,174.581005587,2.87,0.0,0.0,18.0,165,10.0,0.0,140.0,100.0,-62.0,11.0,39.0,18.0,44.736995922,336.0,87.2259015966,-25.0,49.0732572,17.4532219,1492.0,627.5,0,0,0,0,0,2.87,199.0,388.0,4,194,2.86999999999
|
||||
182,0.0,1501.5,0.0,1546782512.9,177.394830208,2.84,0.0,0.0,17.5,166,9.5,0.0,140.0,95.0,-62.0,8.0,40.0,19.0,43.837759823,330.0,80.7064398793,-22.0,49.0732667,17.4533516,1501.5,630.900000095,0,0,0,0,0,2.84,195.0,359.0,4,195,2.84
|
||||
183,0.0,1510.6,0.0,1546782516.4,180.617194757,2.74,0.0,0.0,17.0,167,9.0,0.0,140.0,107.0,-64.0,10.0,40.0,18.0,50.3572215403,369.0,93.7453633139,-25.0,49.0732739,17.4534752,1510.6,634.400000095,0,0,0,0,0,2.74,224.0,417.0,4,196,2.74
|
||||
184,0.0,1520.6,0.0,1546782519.7,178.826895565,2.79,0.0,0.0,17.5,168,10.0,0.0,140.0,94.0,-64.0,6.0,37.0,18.0,45.8610410456,319.0,75.086214261,-28.0,49.0732821,17.4536123,1520.6,637.700000048,0,0,0,0,0,2.79,204.0,334.0,4,197,2.79
|
||||
185,0.0,1530.4,0.0,1546782523.1,175.12258581,2.88,0.0,0.0,18.5,169,9.8,0.0,140.0,91.0,-65.0,27.0,38.0,12.0,39.7911973778,299.0,87.0010925719,6.0,49.0732865,17.4537461,1530.4,641.099999905,0,0,0,0,0,2.88,177.0,387.0,4,198,2.88
|
||||
186,0.0,1538.7,0.0,1546782526.1,176.251384832,2.83,0.0,0.0,20.5,170,8.4,0.0,140.0,93.0,-63.0,7.0,40.0,16.0,39.5663883531,280.0,65.4194261974,-15.0,49.0732873,17.4538607,1538.7,644.099999905,0,0,0,0,0,2.83,176.0,291.0,4,199,2.82999999999
|
||||
187,0.0,1547.0,0.0,1546782529.1,181.704911224,2.75,0.0,0.0,18.5,171,8.2,0.0,140.0,122.0,-63.0,6.0,41.0,17.0,53.7293569113,389.0,92.3965091655,-25.0,49.0732917,17.4539736,1547.0,647.099999905,0,0,0,0,0,2.75,239.0,411.0,4,200,2.75
|
||||
188,0.0,1561.5,0.0,1546782534.7,187.990117091,2.67,0.0,0.0,11.0,172,14.5,0.0,141.0,94.0,-62.0,5.0,40.0,17.0,49.0083673919,376.0,89.0243737945,-16.0,49.0733018,17.4541724,1561.5,652.700000048,0,0,0,0,0,2.67,218.0,396.0,4,201,2.67
|
||||
189,0.0,1570.8,0.0,1546782538.3,190.673349314,2.6,0.0,0.0,17.5,173,9.2,0.0,141.0,109.0,-64.0,7.0,43.0,22.0,47.209895194,372.0,90.3732279429,-19.0,49.0733095,17.4542988,1570.8,656.299999952,0,0,0,0,0,2.6,210.0,402.0,4,202,2.6
|
||||
190,0.0,1580.2,0.0,1546782541.7,187.56698821,2.67,0.0,0.0,17.5,174,9.4,0.0,141.0,73.0,-63.0,11.0,34.0,15.0,33.4965446853,255.0,67.6675164448,-2.0,49.0733179,17.4544276,1580.2,659.700000048,0,0,0,0,0,2.67,149.0,301.0,4,203,2.67
|
||||
191,0.0,1588.5,0.0,1546782544.7,182.21574344,2.75,0.0,0.0,19.0,175,8.3,0.0,140.0,82.0,-60.0,10.0,37.0,25.0,35.5198259079,252.0,73.0629330384,-28.0,49.0733226,17.454541,1588.5,662.700000048,0,0,0,0,0,2.75,158.0,325.0,4,204,2.75
|
||||
192,0.0,1597.9,0.0,1546782548.1,179.985601152,2.76,0.0,0.0,18.0,176,9.4,0.0,140.0,63.0,-63.0,33.0,35.0,16.0,29.6747912648,211.0,67.44270742,-1.0,49.0733207,17.4546705,1597.9,666.099999905,0,0,0,0,0,2.76,132.0,300.0,4,205,2.76
|
||||
193,0.0,1606.3,0.0,1546782551.5,190.860508234,2.69,0.0,0.0,17.5,177,8.4,0.0,140.0,112.0,-62.0,10.0,42.0,19.0,49.4579854414,372.0,94.4197903881,-25.0,49.0733119,17.4547845,1606.3,669.5,0,0,0,0,0,2.69,220.0,420.0,4,206,2.69
|
||||
194,0.0,1613.9,0.0,1546782555.4,211.454809086,2.32,0.0,0.0,16.5,178,7.6,0.0,139.0,92.0,-62.0,9.0,40.0,19.0,48.3339403177,350.0,85.6522384235,-18.0,49.0733102,17.4548889,1613.9,673.400000095,0,0,0,0,0,2.32,215.0,381.0,4,207,2.32
|
||||
195,0.0,1623.1,0.0,1546782558.7,216.530561742,2.25,0.0,0.0,16.5,179,9.2,0.0,139.0,89.0,-63.0,11.0,40.0,23.0,42.4889056746,317.0,84.0785752503,-20.0,49.0732991,17.4550143,1623.1,676.700000048,0,0,0,0,0,2.25,189.0,374.0,4,208,2.25
|
||||
196,0.0,1632.1,0.0,1546782562.1,200.688073394,2.56,0.0,0.0,17.5,180,9.0,0.0,138.0,90.0,-63.0,12.0,40.0,14.0,40.9152425015,313.0,85.8770474482,-1.0,49.0732865,17.4551358,1632.1,680.099999905,0,0,0,0,0,2.56,182.0,382.0,4,209,2.56
|
||||
197,0.0,1641.4,0.0,1546782565.5,188.781014024,2.64,0.0,0.0,17.5,181,9.2,0.0,138.0,105.0,-63.0,11.0,40.0,17.0,45.1866139714,355.0,89.9236098934,-25.0,49.073271,17.4552603,1641.4,683.5,0,0,0,0,0,2.64,201.0,400.0,4,210,2.64
|
||||
198,0.0,1651.5,0.0,1546782569.1,184.852646033,2.68,0.0,0.0,17.5,182,10.1,0.0,137.0,105.0,-62.0,9.0,42.0,19.0,48.3339403177,353.0,94.6445994128,-19.0,49.0732539,17.4553961,1651.5,687.099999905,0,0,0,0,0,2.68,215.0,421.0,4,211,2.68
|
||||
199,0.0,1660.8,0.0,1546782572.3,182.595993322,2.77,0.0,0.0,18.0,183,9.3,0.0,136.0,86.0,-64.0,6.0,41.0,19.0,35.9694439574,309.0,80.0320128051,-12.0,49.0732389,17.4555219,1660.8,690.299999952,0,0,0,0,0,2.77,160.0,356.0,4,212,2.77000000001
|
||||
200,0.0,1673.2,0.0,1546782576.9,184.385207038,2.71,0.0,0.0,13.0,184,12.4,0.0,136.0,130.0,-64.0,7.0,38.0,15.0,50.8068395898,396.0,98.691161858,-33.0,49.0732179,17.4556888,1673.2,694.900000095,0,0,0,0,0,2.71,226.0,439.0,4,213,2.71000000001
|
||||
201,0.0,1682.8,0.0,1546782580.3,185.00898615,2.67,0.0,0.0,17.5,185,9.6,0.0,136.0,125.0,-65.0,10.0,43.0,18.0,55.0782110597,413.0,100.264825031,-27.0,49.0732012,17.4558178,1682.8,698.299999952,0,0,0,0,0,2.67,245.0,446.0,4,214,2.67
|
||||
202,0.0,1693.2,0.0,1546782583.9,179.671457906,2.8,0.0,0.0,17.0,186,10.5,0.0,136.0,109.0,-65.0,7.0,42.0,18.0,48.3339403177,386.0,92.3965091655,-21.0,49.0731823,17.4559582,1693.2,701.900000095,0,0,0,0,0,2.8,215.0,411.0,4,215,2.80000000001
|
||||
203,0.0,1702.6,0.0,1546782587.1,174.73789316,2.87,0.0,0.0,17.5,187,9.4,0.0,137.0,117.0,-63.0,8.0,42.0,16.0,50.3572215403,396.0,91.0476550171,-23.0,49.0731682,17.4560857,1702.6,705.099999905,0,0,0,0,0,2.87,224.0,405.0,4,216,2.86999999999
|
||||
204,0.0,1712.3,0.0,1546782590.5,175.227796135,2.85,0.0,0.0,17.5,188,9.7,0.0,138.0,94.0,-63.0,6.0,37.0,17.0,41.5896695757,326.0,78.0087315825,-27.0,49.0731523,17.4562168,1712.3,708.5,0,0,0,0,0,2.85,185.0,347.0,4,217,2.85
|
||||
205,0.0,1722.0,0.0,1546782593.9,178.207739307,2.81,0.0,0.0,18.0,189,9.6,0.0,139.0,104.0,-64.0,6.0,41.0,14.0,43.1633327488,355.0,82.7297211019,-6.0,49.0731367,17.4563468,1722.0,711.900000095,0,0,0,0,0,2.81,192.0,368.0,4,218,2.81000000001
|
||||
206,0.0,1730.9,0.0,1546782597.4,178.918311011,2.78,0.0,0.0,19.0,190,8.9,0.0,140.0,126.0,-64.0,10.0,43.0,17.0,51.9308847134,397.0,95.7686445365,-21.0,49.0731222,17.456467,1730.9,715.400000095,0,0,0,0,0,2.78,231.0,426.0,4,219,2.78
|
||||
207,0.0,1740.4,0.0,1546782600.5,175.897075083,2.84,0.0,0.0,17.5,191,9.5,0.0,141.0,116.0,-64.0,10.0,44.0,19.0,52.3805027629,392.0,98.0167347838,-23.0,49.0731058,17.4565947,1740.4,718.5,0,0,0,0,0,2.84,233.0,436.0,4,220,2.84
|
||||
208,0.0,1750.4,0.0,1546782603.9,173.852573018,2.9,0.0,0.0,18.0,192,10.0,0.0,141.0,109.0,-64.0,10.0,43.0,16.0,46.3106590951,374.0,85.6522384235,-19.0,49.0730894,17.4567297,1750.4,721.900000095,0,0,0,0,0,2.9,206.0,381.0,4,221,2.90000000001
|
||||
209,0.0,1759.8,0.0,1546782607.3,175.368273374,2.84,0.0,0.0,18.5,193,9.4,0.0,142.0,105.0,-63.0,16.0,42.0,20.0,41.5896695757,342.0,93.7453633139,-22.0,49.073079,17.4568581,1759.8,725.299999952,0,0,0,0,0,2.84,185.0,417.0,4,222,2.84
|
||||
210,0.0,1768.9,0.0,1546782610.5,176.500252143,2.82,0.0,0.0,18.5,194,9.1,0.0,142.0,119.0,-64.0,10.0,42.0,18.0,49.2331764166,380.0,91.946891116,-25.0,49.0730725,17.4569824,1768.9,728.5,0,0,0,0,0,2.82,219.0,409.0,4,223,2.82
|
||||
211,0.0,1778.9,0.0,1546782613.9,175.52657974,2.87,0.0,0.0,18.0,195,10.0,0.0,142.0,95.0,-65.0,15.0,42.0,17.0,39.7911973778,326.0,86.1018564729,-5.0,49.0730694,17.4571193,1778.9,731.900000095,0,0,0,0,0,2.87,177.0,383.0,4,224,2.86999999999
|
||||
212,0.0,1787.7,0.0,1546782616.9,172.924901186,2.87,0.0,0.0,18.5,196,8.8,0.0,142.0,125.0,-64.0,6.0,43.0,19.0,50.3572215403,394.0,96.8926896601,-27.0,49.0730676,17.4572398,1787.7,734.900000095,0,0,0,0,0,2.87,224.0,431.0,4,225,2.86999999999
|
||||
213,0.0,1798.2,0.0,1546782620.3,169.787523043,2.95,0.0,0.0,19.0,197,10.4,0.0,142.0,104.0,-62.0,12.0,43.0,16.0,41.1400515262,332.0,86.1018564729,-5.0,49.0730675,17.457383,1798.2,738.299999952,0,0,0,0,0,2.95,183.0,383.0,4,226,2.95
|
||||
214,0.0,1807.6,0.0,1546782623.5,168.188370976,2.99,0.0,0.0,19.0,198,9.5,0.0,142.0,107.0,-65.0,13.0,42.0,21.0,45.6362320209,344.0,88.7995647697,-23.0,49.0730681,17.4575127,1807.6,741.5,0,0,0,0,0,2.99,203.0,395.0,4,227,2.98999999999
|
||||
215,0.0,1817.2,0.0,1546782626.7,169.754583374,2.93,0.0,0.0,18.5,199,9.6,0.0,142.0,94.0,-65.0,6.0,40.0,15.0,40.0160064026,320.0,75.9854503599,-4.0,49.0730709,17.4576442,1817.2,744.700000048,0,0,0,0,0,2.93,178.0,338.0,4,228,2.93
|
||||
216,0.0,1826.7,0.0,1546782629.9,171.922585716,2.91,0.0,0.0,18.5,200,9.5,0.0,142.0,112.0,-62.0,12.0,44.0,21.0,46.5354681198,349.0,89.9236098934,-25.0,49.0730756,17.4577745,1826.7,747.900000095,0,0,0,0,0,2.91,207.0,400.0,4,229,2.91
|
||||
217,0.0,1838.6,0.0,1546782633.9,173.576671295,2.89,0.0,0.0,14.5,201,11.8,0.0,142.0,70.0,-64.0,6.0,37.0,14.0,36.6438710316,297.0,72.8381240137,-6.0,49.0730843,17.4579365,1838.6,751.900000095,0,0,0,0,0,2.89,163.0,324.0,4,230,2.89
|
||||
218,0.0,1847.6,0.0,1546782637.1,174.912543728,2.85,0.0,0.0,19.5,202,9.0,0.0,142.0,116.0,-63.0,8.0,41.0,20.0,47.6595132435,346.0,87.4507106213,-23.0,49.0730938,17.4580594,1847.6,755.099999905,0,0,0,0,0,2.85,212.0,389.0,4,231,2.85
|
||||
219,0.0,1857.2,0.0,1546782640.3,172.993277975,2.88,0.0,0.0,18.5,203,9.6,0.0,143.0,113.0,-65.0,10.0,42.0,17.0,47.209895194,372.0,90.3732279429,-12.0,49.0731049,17.45819,1857.2,758.299999952,0,0,0,0,0,2.88,210.0,402.0,4,232,2.88
|
||||
220,0.0,1866.9,0.0,1546782643.5,169.180201083,2.97,0.0,0.0,18.5,204,9.7,0.0,143.0,101.0,-65.0,5.0,42.0,16.0,41.1400515262,335.0,78.458349632,-12.0,49.0731154,17.4583217,1866.9,761.5,0,0,0,0,0,2.97,183.0,349.0,4,233,2.97
|
||||
221,0.0,1876.3,0.0,1546782646.7,166.413084823,2.99,0.0,0.0,19.5,205,9.5,0.0,143.0,109.0,-63.0,5.0,39.0,19.0,42.0392876252,337.0,85.202620374,-28.0,49.0731258,17.4584504,1876.3,764.700000048,0,0,0,0,0,2.99,187.0,379.0,4,234,2.98999999999
|
||||
222,0.0,1885.9,0.0,1546782649.9,169.540786669,2.98,0.0,0.0,19.0,206,9.6,0.0,143.0,63.0,-64.0,9.0,35.0,19.0,27.4267010175,209.0,58.225537406,-2.0,49.0731333,17.458581,1885.9,767.900000095,0,0,0,0,0,2.98,122.0,259.0,4,235,2.98000000001
|
||||
223,0.0,1893.5,0.0,1546782652.9,177.07173935,2.81,0.0,0.0,19.0,207,7.6,0.0,144.0,103.0,-63.0,10.0,39.0,20.0,41.5896695757,310.0,82.9545301267,-30.0,49.0731349,17.4586852,1893.5,770.900000095,0,0,0,0,0,2.81,185.0,369.0,4,236,2.81000000001
|
||||
224,0.0,1903.3,0.0,1546782656.3,177.035912999,2.71,0.0,0.0,18.5,208,9.8,0.0,144.0,73.0,-64.0,13.0,36.0,19.0,33.0469266358,247.0,74.1869781621,-11.0,49.0731439,17.4588188,1903.3,774.299999952,0,0,0,0,0,2.71,147.0,330.0,4,237,2.71000000001
|
||||
225,0.0,1913.0,0.0,1546782659.5,210.665703623,2.75,0.0,0.0,19.0,209,9.7,0.0,144.0,20.0,-62.0,13.0,14.0,19.0,12.8141144098,64.0,24.2793746712,-22.0,49.0731381,17.4589521,1913.0,777.5,0,0,0,0,0,2.75,57.0,108.0,4,238,2.75
|
||||
226,0.0,1913.0,0.0,1546782661.5,227.292406269,2.75,0.0,0.0,19.0,209,9.7,0.0,144.0,20.0,5.0,13.0,14.0,19.0,-0.899236098934,64.0,1.79847219787,6.0,49.0731381,17.4589521,1913.0,779.5,0,0,0,0,0,1.66666666667,-4.0,8.0,4,239,1.66666666667
|
||||
227,0.0,1922.9,0.0,1546782663.5,218.914185639,2.59,0.0,0.0,14.5,210,9.9,0.0,143.0,116.0,-60.0,14.0,41.0,19.0,43.837759823,318.0,85.4274293987,-24.0,49.0731198,17.4590849,1922.9,781.5,0,0,0,0,0,2.59,195.0,380.0,4,239,2.59
|
||||
228,0.0,1932.0,0.0,1546782667.1,218.395107949,2.43,0.0,0.0,17.5,211,9.1,0.0,143.0,80.0,-65.0,7.0,32.0,14.0,36.1942529821,279.0,70.1404157168,-10.0,49.0730953,17.4592039,1932.0,785.099999905,0,0,0,0,0,2.43,161.0,312.0,4,240,2.43000000001
|
||||
229,0.0,1932.0,0.0,1546782669.75,245.052277819,2.43,0.0,0.0,17.5,211,9.1,0.0,143.0,0.0,1.0,7.0,16.0,14.0,0.224809024733,0.0,4.27137146994,4.0,49.0730953,17.4592039,1932.0,787.75,0,0,0,0,0,1.66666666667,1.0,19.0,4,241,1.66666666667
|
||||
230,0.0,1944.3,0.0,1546782672.4,230.748945148,2.42,0.0,0.0,11.5,212,12.3,0.0,142.0,102.0,-61.0,7.0,40.0,21.0,39.7911973778,309.0,77.7839225578,-22.0,49.0730708,17.4593679,1944.3,790.400000095,0,0,0,0,0,2.42,177.0,346.0,4,242,2.42
|
||||
231,0.0,1953.5,0.0,1546782675.7,198.908842919,2.45,0.0,0.0,17.0,213,9.2,0.0,142.0,68.0,-61.0,9.0,38.0,17.0,32.1476905369,238.0,61.597672777,-12.0,49.0730525,17.4594902,1953.5,793.700000048,0,0,0,0,0,2.45,143.0,274.0,4,243,2.45
|
||||
232,0.0,1962.2,0.0,1546782679.3,202.49942143,2.47,0.0,0.0,17.0,214,8.8,0.0,140.0,87.0,-63.0,8.0,43.0,23.0,38.6671522542,312.0,78.9079676815,-26.0,49.0730352,17.459608,1962.2,797.299999952,0,0,0,0,0,2.47,172.0,351.0,4,244,2.46999999999
|
||||
233,0.0,1971.2,0.0,1546782682.9,200.274662394,2.45,0.0,0.0,16.0,215,8.9,0.0,138.0,54.0,-59.0,17.0,35.0,17.0,26.977082968,199.0,52.8301208124,-4.0,49.0730205,17.459728,1971.2,800.900000095,0,0,0,0,0,2.45,120.0,235.0,4,245,2.45
|
||||
234,0.0,1979.4,0.0,1546782686.5,226.449275362,2.37,0.0,0.0,16.5,216,8.3,0.0,137.0,61.0,-60.0,9.0,35.0,26.0,31.0236454132,218.0,62.2720998512,-30.0,49.0730083,17.4598398,1979.4,804.5,0,0,0,0,0,2.37,138.0,277.0,4,246,2.37
|
||||
235,0.0,1979.4,0.0,1546782686.5,272.063014976,2.37,0.0,0.0,16.5,216,8.3,0.0,137.0,61.0,16.0,9.0,28.0,26.0,-0.899236098934,218.0,0.6744270742,22.0,49.0730083,17.4598398,1979.4,804.5,0,0,0,0,0,1.66666666667,-4.0,3.0,4,246,1.66666666667
|
||||
236,0.0,1979.4,0.0,1546782686.5,304.277269039,2.37,0.0,0.0,16.5,216,8.3,0.0,137.0,29.0,-55.0,35.0,30.0,33.0,20.4576212507,118.0,34.1709717595,-10.0,49.0730083,17.4598398,1979.4,804.5,0,0,0,0,0,1.66666666667,91.0,152.0,4,246,1.66666666667
|
||||
237,0.0,2004.1,0.0,1546782702.6,316.226960607,1.7,0.0,0.0,25.5,217,24.6,0.0,133.0,29.0,-55.0,35.0,30.0,33.0,20.4576212507,118.0,34.1709717595,-10.0,49.0729655,17.4601713,2004.1,820.599999905,0,0,0,0,0,1.7,91.0,152.0,4,252,1.7
|
||||
238,0.0,2006.2,0.0,1546782703.9,325.9452412,1.37,0.0,0.0,32.0,218,2.1,0.0,132.0,52.0,-56.0,8.0,37.0,27.0,31.248454438,196.0,54.853402035,-17.0,49.0729604,17.4601995,2006.2,821.900000095,0,0,0,0,0,1.37,139.0,244.0,4,253,1.37
|
||||
239,0.0,2006.2,0.0,1546782703.9,320.082916718,1.37,0.0,0.0,32.0,218,2.1,0.0,132.0,52.0,5.0,8.0,18.0,27.0,-1.57366317313,196.0,2.24809024733,6.0,49.0729604,17.4601995,2006.2,821.900000095,0,0,0,0,0,1.66666666667,-7.0,10.0,4,253,1.66666666667
|
||||
240,0.0,2006.2,0.0,1546782703.9,286.119134558,1.37,0.0,0.0,32.0,218,2.1,0.0,132.0,52.0,17.0,8.0,22.0,27.0,-1.57366317313,196.0,0.0,21.0,49.0729604,17.4601995,2006.2,821.900000095,0,0,0,0,0,1.66666666667,-7.0,0.0,4,253,1.66666666667
|
||||
241,0.0,2006.2,0.0,1546782703.9,324.534833405,1.37,0.0,0.0,32.0,218,2.1,0.0,132.0,52.0,22.0,8.0,29.0,27.0,-1.12404512367,196.0,0.6744270742,22.0,49.0729604,17.4601995,2006.2,821.900000095,0,0,0,0,0,1.66666666667,-5.0,3.0,4,253,1.66666666667
|
||||
242,0.0,2024.5,0.0,1546782719.5,470.051034112,1.02,0.0,0.0,40.0,219,18.3,0.0,130.0,52.0,3.0,8.0,11.0,27.0,-0.224809024733,196.0,3.14732634627,6.0,49.0729153,17.4604413,2024.5,837.5,0,0,0,0,0,1.02,-1.0,14.0,4,264,1.02
|
||||
243,0.0,2026.7,0.0,1546782722.9,949.538795442,0.55,0.0,0.0,69.0,220,2.2,0.0,128.0,52.0,3.0,8.0,11.0,27.0,-0.224809024733,196.0,3.14732634627,6.0,49.0729099,17.4604706,2026.7,840.900000095,0,0,0,0,0,0.55,-1.0,14.0,4,267,0.55
|
||||
244,0.0,2027.7,0.0,1546782724.3,619.907899398,0.57,0.0,0.0,15.0,221,0.9,0.0,128.0,20.0,-47.0,8.0,8.0,27.0,16.860676855,62.0,29.0003641906,-36.0,49.0729063,17.4604824,2027.7,842.299999952,0,0,0,0,0,0.57,75.0,129.0,4,268,0.57
|
||||
245,0.0,2027.7,0.0,1546782724.3,331.355718253,0.57,0.0,0.0,15.0,221,0.9,0.0,128.0,20.0,8.0,8.0,19.0,27.0,-1.12404512367,62.0,1.3488541484,11.0,49.0729063,17.4604824,2027.7,842.299999952,0,0,0,0,0,1.66666666667,-5.0,6.0,4,268,1.66666666667
|
||||
246,0.0,2027.7,0.0,1546782724.3,293.06687507,0.57,0.0,0.0,15.0,221,0.9,0.0,128.0,20.0,13.0,8.0,22.0,27.0,-0.6744270742,62.0,0.899236098934,14.0,49.0729063,17.4604824,2027.7,842.299999952,0,0,0,0,0,1.66666666667,-3.0,4.0,4,268,1.66666666667
|
||||
|
215
rowers/tests/testdata/fake_empowerdata.csv
vendored
Normal file
215
rowers/tests/testdata/fake_empowerdata.csv
vendored
Normal file
@@ -0,0 +1,215 @@
|
||||
,distance,finish,workoutid,peakforceangle,averageforce,wash,peakforce,workoutstate,spm,slip,catch,driveenergy
|
||||
1,3.7,41.2571428571,3275,-11.6571428571,151.0,17.5428571429,278.0,4,22.7285714286,11.2857142857,-51.1428571429,224.942857143
|
||||
2,9.9,43.1142857143,3275,-21.5142857143,166.0,22.6857142857,252.0,4,17.6571428571,10.5714285714,-63.2857142857,270.085714286
|
||||
3,17.4,39.1428571429,3275,-16.2857142857,161.0,20.0571428571,283.0,4,14.7571428571,8.25714285714,-61.2,258.485714286
|
||||
4,23.0,37.8857142857,3275,-14.4285714286,169.0,18.2285714286,269.0,4,15.5285714286,9.51428571429,-61.2857142857,272.057142857
|
||||
5,32.1,38.6285714286,3275,-18.6,176.0,16.7714285714,326.0,4,16.6285714286,7.08571428571,-61.8857142857,297.2
|
||||
6,42.9,40.4285714286,3275,-25.6285714286,176.0,18.1428571429,307.0,4,16.9571428571,7.77142857143,-61.6285714286,313.942857143
|
||||
7,51.5,39.4857142857,3275,-14.9714285714,191.0,16.0857142857,348.0,4,16.8285714286,8.45714285714,-62.7714285714,304.057142857
|
||||
8,61.7,40.2,3275,-14.3142857143,164.0,19.2,296.0,4,16.9714285714,9.88571428571,-62.6571428571,286.057142857
|
||||
9,70.7,40.6285714286,3275,-17.9142857143,161.0,20.9714285714,319.0,4,16.9428571429,8.94285714286,-62.9142857143,295.4
|
||||
10,80.3,40.9428571429,3275,-30.4,193.0,23.4,367.0,4,16.8,8.8,-63.6857142857,311.571428571
|
||||
11,90.5,39.1428571429,3275,-18.3714285714,172.0,20.4571428571,314.0,4,16.4571428571,6.37142857143,-63.9714285714,295.828571429
|
||||
12,99.8,38.8571428571,3275,-13.6857142857,154.0,20.4571428571,281.0,4,17.1714285714,6.62857142857,-63.7714285714,290.342857143
|
||||
13,108.2,39.7428571429,3275,-15.6571428571,201.0,19.8,368.0,4,17.6571428571,7.14285714286,-62.4,305.285714286
|
||||
14,118.6,42.1714285714,3275,-27.1428571429,189.0,21.0285714286,328.0,4,17.7142857143,7.22857142857,-62.9428571429,335.371428571
|
||||
15,127.9,41.8857142857,3275,-17.8,194.0,20.8857142857,352.0,4,17.4571428571,8.4,-62.8857142857,297.142857143
|
||||
16,137.9,41.9714285714,3275,-18.2285714286,146.0,22.8,280.0,4,17.4571428571,9.0,-62.6,285.857142857
|
||||
17,147.0,40.8571428571,3275,-12.5714285714,193.0,21.0,335.0,4,17.6285714286,10.3142857143,-62.1714285714,265.142857143
|
||||
18,156.5,40.8,3275,-14.9428571429,157.0,20.3428571429,273.0,4,17.9571428571,9.8,-62.5714285714,288.514285714
|
||||
19,166.0,38.3714285714,3275,-14.1428571429,183.0,18.7714285714,341.0,4,17.7,11.8571428571,-61.9142857143,286.542857143
|
||||
20,175.2,39.7428571429,3275,-18.4,187.0,18.6,343.0,4,17.5142857143,10.7142857143,-67.2571428571,293.342857143
|
||||
21,184.7,38.2,3275,-5.34285714286,167.0,16.2571428571,288.0,4,16.4571428571,9.11428571429,-44.4857142857,278.485714286
|
||||
24,202.3,23.8285714286,3275,-21.3428571429,118.0,21.4285714286,235.0,4,17.7857142857,13.3142857143,-49.5142857143,196.571428571
|
||||
25,209.4,33.6571428571,3275,-9.74285714286,114.0,23.2,251.0,4,11.8571428571,20.1714285714,-41.2571428571,171.657142857
|
||||
30,237.7,32.2,3275,-13.0285714286,86.9999999999,32.7142857143,168.0,4,28.8285714286,11.9714285714,-30.4571428571,114.485714286
|
||||
31,237.7,39.3714285714,3275,-30.4571428571,175.0,24.5714285714,275.0,4,23.2142857143,5.57142857143,-60.9714285714,266.457142857
|
||||
32,268.6,42.6,3275,-24.8857142857,235.0,11.2571428571,397.0,4,16.8,8.0,-60.8285714286,372.542857143
|
||||
33,277.6,41.8285714286,3275,-21.5714285714,213.0,17.1714285714,400.0,4,13.5285714286,8.6,-62.6571428571,375.657142857
|
||||
34,286.8,43.0285714286,3275,-10.2,196.0,17.4571428571,360.0,4,16.5,8.34285714286,-62.4285714286,344.2
|
||||
35,296.9,43.2857142857,3275,-5.34285714286,208.0,17.0571428571,366.0,4,16.7142857143,6.02857142857,-61.9142857143,355.971428571
|
||||
36,305.9,43.4571428571,3275,-12.6285714286,230.0,16.5428571429,411.0,4,16.8714285714,6.22857142857,-62.0,385.714285714
|
||||
37,315.7,42.2857142857,3275,-22.6285714286,231.0,17.7714285714,438.0,4,17.0428571429,7.17142857143,-67.0571428571,404.771428571
|
||||
38,323.2,49.8857142857,3275,-16.2571428571,243.0,17.9142857143,424.0,4,17.7714285714,6.91428571429,-42.2,420.057142857
|
||||
40,339.9,48.2285714286,3275,-9.14285714286,212.0,15.3428571429,357.0,4,15.4142857143,7.82857142857,-37.7142857143,357.4
|
||||
41,344.1,42.0571428571,3275,-19.6,212.0,16.3714285714,357.0,4,27.8428571429,6.62857142857,-62.8285714286,345.571428571
|
||||
42,347.4,43.2285714286,3275,-18.4,229.0,17.4285714286,389.0,4,32.7571428571,11.8,-59.4571428571,331.4
|
||||
43,357.3,42.4285714286,3275,-17.5714285714,158.0,18.1428571429,351.0,4,23.4285714286,14.7428571429,-59.6857142857,327.6
|
||||
44,366.9,42.4285714286,3275,-18.7714285714,225.0,18.3142857143,413.0,4,16.1142857143,13.0,-59.0857142857,328.457142857
|
||||
45,376.1,43.1428571429,3275,-20.9142857143,216.0,19.5714285714,368.0,4,18.1571428571,7.51428571429,-61.3428571429,359.714285714
|
||||
46,385.5,43.6,3275,-19.9142857143,207.0,18.4285714286,396.0,4,17.8857142857,9.4,-62.9714285714,356.514285714
|
||||
47,394.8,44.1714285714,3275,-13.9142857143,204.0,16.9142857143,397.0,4,17.9142857143,10.6571428571,-64.2857142857,371.885714286
|
||||
48,405.0,43.8,3275,-13.2571428571,224.0,15.9142857143,385.0,4,18.3285714286,9.17142857143,-63.4571428571,385.828571429
|
||||
49,414.4,43.8,3275,-18.0,238.0,15.0857142857,436.0,4,18.8428571429,6.22857142857,-63.6285714286,416.114285714
|
||||
50,423.4,43.6285714286,3275,-21.0571428571,249.0,15.2571428571,448.999999999,4,19.1142857143,9.25714285714,-62.3714285714,416.485714286
|
||||
51,432.6,42.9142857143,3275,-18.7714285714,221.0,15.3142857143,471.999999999,4,19.1714285714,11.6285714286,-64.1428571429,407.914285714
|
||||
52,441.5,42.8,3275,-16.6285714286,224.0,15.6857142857,416.0,4,19.1714285714,11.4857142857,-63.3428571429,387.457142857
|
||||
53,450.1,42.2571428571,3275,-20.7714285714,218.0,16.8285714286,395.0,4,19.1571428571,7.31428571429,-63.0571428571,377.0
|
||||
54,459.5,42.4857142857,3275,-21.8,217.0,19.2571428571,412.0,4,18.6285714286,7.25714285714,-62.4,381.714285714
|
||||
55,468.3,41.4571428571,3275,-19.9142857143,242.0,18.8,450.0,4,18.1714285714,8.42857142857,-63.7428571429,391.6
|
||||
56,477.6,42.7714285714,3275,-20.9142857143,234.0,17.2,445.999999999,4,18.3285714286,8.88571428571,-63.0857142857,409.971428571
|
||||
57,486.9,42.7428571429,3275,-20.9714285714,238.0,17.3428571429,474.999999998,4,18.4571428571,7.77142857143,-62.0857142857,405.057142857
|
||||
58,496.4,42.7428571429,3275,-15.8571428571,222.0,16.7714285714,420.0,4,18.7571428571,5.48571428571,-62.3428571429,397.171428571
|
||||
59,505.6,42.4285714286,3275,-12.1714285714,202.0,17.0857142857,413.0,4,19.2428571429,5.77142857143,-62.2285714286,372.514285714
|
||||
60,515.1,43.0,3275,-13.8857142857,213.0,17.6,413.0,4,19.5428571429,7.82857142857,-61.5142857143,366.228571429
|
||||
61,524.0,43.5714285714,3275,-20.0285714286,213.0,20.6285714286,420.0,4,19.7571428571,9.14285714286,-61.0857142857,349.514285714
|
||||
62,533.2,43.1714285714,3275,-21.2285714286,199.0,19.1142857143,374.0,4,19.5285714286,9.02857142857,-61.9142857143,351.228571429
|
||||
63,542.4,43.9428571429,3275,-22.9142857143,219.0,19.4857142857,428.0,4,18.7571428571,8.14285714286,-61.3142857143,358.6
|
||||
64,552.4,42.6857142857,3275,-16.3142857143,221.0,17.0857142857,419.0,4,18.1285714286,9.02857142857,-61.3714285714,368.0
|
||||
65,561.6,41.5714285714,3275,-14.2,198.0,16.2285714286,402.0,4,18.3285714286,8.88571428571,-61.8,362.028571429
|
||||
66,570.2,40.3714285714,3275,-16.1142857143,224.0,16.8285714286,397.0,4,18.5,8.68571428571,-62.6,354.257142857
|
||||
67,579.2,41.6857142857,3275,-23.3428571429,193.0,19.9714285714,378.0,4,18.5857142857,7.82857142857,-61.4857142857,326.685714286
|
||||
68,588.5,42.0,3275,-26.7714285714,185.0,21.0285714286,346.0,4,19.0857142857,8.17142857143,-61.6857142857,334.685714286
|
||||
69,597.3,42.5714285714,3275,-18.3428571429,232.0,18.3714285714,424.0,4,19.1142857143,7.4,-62.8285714286,355.028571429
|
||||
70,606.8,42.3428571429,3275,-14.7714285714,196.0,17.3142857143,368.0,4,19.0142857143,6.68571428571,-63.4857142857,373.4
|
||||
71,616.1,41.8285714286,3275,-15.5428571429,214.0,15.6857142857,401.0,4,18.5285714286,6.82857142857,-62.3428571429,366.885714286
|
||||
72,625.8,42.2571428571,3275,-20.1428571429,233.0,17.0571428571,404.0,4,18.3,7.74285714286,-61.0857142857,377.485714286
|
||||
73,634.9,42.6571428571,3275,-18.3714285714,227.0,17.7142857143,418.0,4,17.9142857143,8.51428571429,-60.7428571429,376.857142857
|
||||
74,643.7,43.4285714286,3275,-20.6285714286,229.0,19.6857142857,439.0,4,18.0,8.14285714286,-61.4285714286,390.314285714
|
||||
75,652.5,43.4857142857,3275,-17.2,242.0,17.6285714286,448.999999999,4,18.0,7.51428571429,-63.1714285714,405.828571429
|
||||
76,661.8,43.1714285714,3275,-14.0285714286,233.0,17.1428571429,412.0,4,18.0428571429,9.02857142857,-62.3714285714,393.428571429
|
||||
77,670.2,43.4285714286,3275,-15.6857142857,215.0,17.5428571429,467.999999999,4,17.8285714286,9.51428571429,-61.2285714286,399.0
|
||||
78,677.9,44.5714285714,3275,-19.2571428571,254.0,18.0857142857,470.999999998,4,17.7571428571,9.4,-60.4571428571,412.514285714
|
||||
79,685.9,45.0857142857,3275,-13.9428571429,237.0,16.3428571429,458.0,4,17.8285714286,8.88571428571,-61.8571428571,413.142857143
|
||||
80,694.2,43.6571428571,3275,-14.0571428571,222.0,16.1714285714,431.0,4,18.0428571429,10.0,-61.3142857143,381.257142857
|
||||
81,701.9,42.6857142857,3275,-17.9714285714,221.0,16.2285714286,431.0,4,18.0428571429,9.34285714286,-61.6,395.171428571
|
||||
82,710.1,42.5714285714,3275,-20.0857142857,255.0,17.2,467.999999999,4,17.9142857143,8.65714285714,-61.5714285714,398.628571429
|
||||
83,718.2,43.0857142857,3275,-16.7142857143,224.0,17.7142857143,415.0,4,17.5,7.91428571429,-62.4285714286,401.914285714
|
||||
84,727.5,43.0,3275,-16.8857142857,247.0,19.1142857143,445.999999999,4,17.0,9.28571428571,-62.3142857143,378.057142857
|
||||
85,736.0,43.4285714286,3275,-23.2571428571,225.0,19.8285714286,439.0,4,17.3,10.0285714286,-63.1142857143,388.942857143
|
||||
86,744.5,41.2857142857,3275,-15.3142857143,241.0,16.7714285714,437.0,4,17.4857142857,8.85714285714,-62.4571428571,355.028571429
|
||||
87,753.4,40.7428571429,3275,-12.2,201.0,15.0285714286,333.0,4,17.2571428571,7.94285714286,-62.3714285714,357.457142857
|
||||
88,762.6,40.7714285714,3275,-11.5714285714,229.0,14.5714285714,450.0,4,17.2142857143,8.02857142857,-62.4857142857,375.228571429
|
||||
89,771.7,41.6,3275,-19.8571428571,247.0,16.8857142857,424.0,4,17.5714285714,9.22857142857,-64.0,403.657142857
|
||||
90,780.7,41.8571428571,3275,-18.1428571429,224.0,16.3142857143,444.999999998,4,17.8857142857,8.94285714286,-63.6571428571,399.485714286
|
||||
91,790.5,44.4,3275,-19.4,236.0,16.8285714286,452.999999999,4,17.6571428571,10.4571428571,-64.0285714286,418.428571429
|
||||
92,799.8,43.8857142857,3275,-22.2571428571,250.0,16.7714285714,486.999999999,4,17.7571428571,12.0857142857,-63.6285714286,407.6
|
||||
93,808.7,41.9714285714,3275,-13.9142857143,204.0,15.2857142857,393.0,4,18.6,11.9428571429,-63.1142857143,367.828571429
|
||||
94,817.5,40.2857142857,3275,-13.9428571429,190.0,17.0,363.0,4,15.9285714286,10.6571428571,-60.8857142857,321.914285714
|
||||
95,830.6,41.2857142857,3275,-20.0285714286,187.0,17.8285714286,420.0,4,14.6428571429,9.11428571429,-61.3714285714,354.114285714
|
||||
96,839.1,42.9142857143,3275,-27.6571428571,254.0,18.9714285714,470.000000001,4,15.2285714286,9.85714285714,-63.7428571429,419.8
|
||||
97,848.3,43.7142857143,3275,-22.0285714286,271.0,17.5714285714,482.000000002,4,17.7571428571,10.2571428571,-64.2857142857,439.828571429
|
||||
98,857.7,42.2,3275,-12.9142857143,213.0,15.7142857143,420.0,4,17.6857142857,11.2285714286,-63.3142857143,386.828571429
|
||||
99,866.4,40.4857142857,3275,-12.5428571429,195.0,14.2285714286,381.0,4,18.3142857143,10.0,-62.3714285714,352.542857143
|
||||
100,874.9,41.4285714286,3275,-17.9142857143,244.0,14.4571428571,426.0,4,18.8,9.11428571429,-64.2857142857,403.542857143
|
||||
101,882.0,42.6571428571,3275,-19.2,260.0,16.4285714286,482.000000002,4,18.4142857143,8.54285714286,-63.5428571429,417.257142857
|
||||
102,889.5,44.2571428571,3275,-14.4571428571,228.0,17.2571428571,388.0,4,18.6714285714,7.85714285714,-62.9428571429,409.914285714
|
||||
103,898.0,44.8285714286,3275,-15.6571428571,247.0,18.9142857143,440.0,4,18.7,6.91428571429,-63.5142857143,408.828571429
|
||||
104,906.8,43.4857142857,3275,-21.5714285714,233.0,17.8857142857,439.0,4,18.8428571429,7.91428571429,-64.6285714286,404.914285714
|
||||
105,915.9,42.0285714286,3275,-15.8,202.0,16.7142857143,384.0,4,18.7,9.08571428571,-63.6857142857,364.657142857
|
||||
106,924.8,41.1428571429,3275,-15.1428571429,214.0,17.5714285714,370.0,4,18.8,9.74285714286,-62.3428571429,340.142857143
|
||||
107,934.1,41.6,3275,-13.9714285714,204.0,17.4571428571,401.0,4,18.5428571429,10.6857142857,-63.1714285714,345.8
|
||||
108,944.5,41.5714285714,3275,-17.2857142857,209.0,16.0571428571,392.0,4,15.3285714286,9.97142857143,-59.5142857143,344.171428571
|
||||
109,957.6,43.6285714286,3275,-14.8857142857,230.0,16.0571428571,411.0,4,14.7142857143,7.34285714286,-63.2857142857,351.885714286
|
||||
110,965.8,39.4857142857,3275,-0.628571428571,211.0,18.0,419.0,4,16.6,4.42857142857,-37.0571428571,369.057142857
|
||||
114,978.8,38.0571428571,3275,-25.7428571429,140.0,23.1142857143,205.0,4,18.7571428571,3.65714285714,-52.1142857143,158.4
|
||||
115,978.9,34.2,3275,-25.4,140.0,19.5142857143,205.0,4,16.8285714286,4.25714285714,-50.4,174.685714286
|
||||
116,979.0,33.9142857143,3275,-16.1714285714,142.0,14.4571428571,207.0,4,16.1428571429,3.05714285714,-41.4,177.257142857
|
||||
117,979.0,35.2285714286,3275,-11.6,192.0,17.8285714286,294.0,4,24.2,3.8,-34.2857142857,151.742857143
|
||||
123,980.2,33.6857142857,3275,-6.0,197.0,21.6285714286,349.0,4,16.4428571429,6.34285714286,-37.2857142857,196.114285714
|
||||
124,986.9,39.6,3275,-19.0,157.0,16.6,279.0,4,16.2,7.82857142857,-64.6857142857,306.171428571
|
||||
125,995.3,40.0857142857,3275,-16.5142857143,210.0,17.1428571429,377.0,4,17.5,9.45714285714,-61.4571428571,313.657142857
|
||||
126,1004.7,40.0,3275,-26.0,199.0,18.4285714286,360.0,4,17.7857142857,7.91428571429,-60.8,335.742857143
|
||||
127,1014.4,38.5714285714,3275,-18.2857142857,184.0,16.9714285714,333.0,4,17.7571428571,7.31428571429,-62.7142857143,310.028571429
|
||||
128,1023.2,37.6,3275,-19.0857142857,169.0,16.5428571429,341.0,4,18.0,7.02857142857,-63.1142857143,301.4
|
||||
129,1033.0,39.6857142857,3275,-13.2,193.0,16.7142857143,355.0,4,18.2857142857,7.05714285714,-63.0285714286,328.0
|
||||
130,1043.2,41.4571428571,3275,-16.7714285714,208.0,19.2857142857,377.0,4,18.1285714286,6.97142857143,-62.0857142857,344.314285714
|
||||
131,1052.7,39.0,3275,-10.3428571429,180.0,19.3714285714,365.0,4,18.0,18.2857142857,-62.4857142857,279.4
|
||||
132,1061.8,36.6285714286,3275,-13.9714285714,113.0,19.3714285714,265.0,4,18.7142857143,22.0,-62.1714285714,249.8
|
||||
133,1069.3,37.5428571429,3275,-17.6857142857,188.0,18.0571428571,391.0,4,19.0714285714,17.2285714286,-62.5142857143,300.942857143
|
||||
134,1077.0,41.6285714286,3275,-28.1142857143,220.0,19.2,397.0,4,18.6285714286,5.68571428571,-63.1428571429,379.514285714
|
||||
135,1086.5,41.2571428571,3275,-16.3428571429,201.0,18.2,389.0,4,18.3428571429,7.68571428571,-63.7714285714,353.8
|
||||
136,1097.2,40.7428571429,3275,-13.8285714286,172.0,17.8857142857,349.0,4,18.6571428571,8.4,-63.3142857143,340.4
|
||||
137,1106.6,39.4571428571,3275,-17.1428571429,228.0,16.4571428571,391.0,4,18.4142857143,9.08571428571,-63.5142857143,357.457142857
|
||||
138,1117.3,40.5142857143,3275,-20.8,219.0,17.2857142857,393.0,4,17.8428571429,9.42857142857,-64.0,378.771428571
|
||||
139,1127.6,39.9142857143,3275,-19.8857142857,198.0,16.9714285714,394.0,4,17.7857142857,8.97142857143,-64.5714285714,375.971428571
|
||||
140,1138.9,40.1714285714,3275,-26.8,217.0,18.0285714286,404.0,4,18.0428571429,9.11428571429,-64.3428571429,377.028571429
|
||||
141,1149.5,39.1428571429,3275,-22.8285714286,194.0,15.5142857143,402.0,4,18.0,10.8285714286,-64.2571428571,350.142857143
|
||||
142,1160.2,40.0571428571,3275,-17.0,168.0,18.9714285714,322.0,4,17.9571428571,12.0285714286,-62.8857142857,301.2
|
||||
143,1169.8,38.8285714286,3275,-12.4,146.0,21.8571428571,348.0,4,18.0857142857,20.5142857143,-61.3714285714,230.828571429
|
||||
144,1179.5,39.2571428571,3275,-15.1142857143,109.0,23.4,257.0,4,18.5857142857,21.0571428571,-60.0571428571,237.457142857
|
||||
145,1188.7,38.9428571429,3275,-16.2857142857,198.0,20.1714285714,362.0,4,18.7428571429,15.8571428571,-60.4285714286,276.742857143
|
||||
146,1198.5,40.6,3275,-15.9428571429,190.0,18.2857142857,362.0,4,17.9571428571,6.2,-61.1714285714,313.314285714
|
||||
147,1208.7,40.3428571429,3275,-15.3428571429,167.0,17.4857142857,315.0,4,17.4714285714,8.34285714286,-62.5714285714,319.342857143
|
||||
148,1218.2,40.3142857143,3275,-11.0571428571,206.0,16.7714285714,394.0,4,17.7,9.4,-63.3428571429,313.971428571
|
||||
149,1229.1,39.0857142857,3275,-13.4857142857,154.0,18.8,313.0,4,16.9857142857,12.2857142857,-62.4,287.6
|
||||
150,1239.9,39.2857142857,3275,-5.45714285714,154.0,18.8,311.0,4,16.5714285714,12.8571428571,-61.7714285714,258.885714286
|
||||
151,1249.4,39.9714285714,3275,-10.0,176.0,18.0,323.0,4,17.3142857143,12.8857142857,-67.8285714286,295.285714286
|
||||
152,1258.8,34.7142857143,3275,2.0,172.0,15.6,334.0,4,19.2285714286,12.1428571429,-37.8285714286,206.771428571
|
||||
158,1271.9,30.6285714286,3275,-11.8857142857,149.0,24.0285714286,277.0,4,15.7571428571,6.57142857143,-34.6857142857,147.371428571
|
||||
159,1294.9,31.9142857143,3275,-17.1142857143,149.0,24.2857142857,277.0,4,27.6714285714,14.5428571429,-62.5428571429,196.057142857
|
||||
160,1298.6,35.3142857143,3275,-14.0285714286,115.0,18.9142857143,267.0,4,30.2857142857,17.3142857143,-58.1428571429,233.342857143
|
||||
161,1306.5,39.0,3275,-14.0,223.0,15.8,362.0,4,21.0285714286,14.3428571429,-60.1714285714,313.542857143
|
||||
162,1315.8,42.3428571429,3275,-14.1142857143,211.0,15.8285714286,371.0,4,13.4,6.08571428571,-67.6,348.171428571
|
||||
163,1325.7,31.3714285714,3275,6.74285714286,161.0,14.0857142857,323.0,4,20.9571428571,10.3428571429,-37.6285714286,295.542857143
|
||||
165,1337.3,33.4571428571,3275,-13.4285714286,222.0,16.6285714286,384.0,4,24.6571428571,7.42857142857,-37.5714285714,333.2
|
||||
166,1346.8,42.2857142857,3275,-24.6571428571,203.0,19.8857142857,326.0,4,17.3,9.8,-70.4285714286,338.2
|
||||
167,1356.0,40.0285714286,3275,-18.6285714286,176.0,19.0,404.0,4,16.1571428571,11.9142857143,-65.0571428571,333.114285714
|
||||
168,1365.8,40.4,3275,-21.5142857143,213.0,19.3428571429,370.0,4,16.5,9.94285714286,-63.1714285714,336.971428571
|
||||
169,1375.7,40.9142857143,3275,-15.7714285714,181.0,18.7714285714,335.0,4,17.0857142857,9.57142857143,-62.0285714286,304.714285714
|
||||
170,1385.5,40.3428571429,3275,-18.2857142857,152.0,19.8571428571,317.0,4,17.9142857143,11.4,-63.2285714286,299.257142857
|
||||
171,1394.6,39.5714285714,3275,-22.5142857143,225.0,17.4857142857,399.0,4,18.5,10.4571428571,-63.6571428571,332.714285714
|
||||
172,1404.2,39.8571428571,3275,-30.9428571429,202.0,16.6,384.0,4,18.4142857143,7.0,-62.7714285714,384.428571429
|
||||
173,1414.3,38.3714285714,3275,-18.3428571429,224.0,16.5714285714,393.0,4,18.0428571429,12.1428571429,-62.8285714286,321.457142857
|
||||
174,1424.0,37.8,3275,-13.4285714286,138.0,18.9428571429,286.0,4,18.2571428571,14.7142857143,-62.2285714286,269.285714286
|
||||
175,1432.6,38.0571428571,3275,-14.5142857143,184.0,19.1142857143,346.0,4,18.6571428571,12.9142857143,-60.7714285714,268.228571429
|
||||
176,1442.1,40.2571428571,3275,-25.5142857143,209.0,18.6285714286,375.0,4,18.7142857143,8.22857142857,-61.5142857143,339.914285714
|
||||
177,1452.5,41.0857142857,3275,-25.4857142857,218.0,18.9142857143,376.0,4,17.5285714286,7.82857142857,-62.2857142857,354.428571429
|
||||
178,1463.2,40.0571428571,3275,-17.3714285714,194.0,19.8857142857,404.0,4,17.4,9.2,-62.9714285714,310.857142857
|
||||
179,1472.6,39.7142857143,3275,-10.1142857143,149.0,18.9428571429,324.0,4,17.7285714286,10.0285714286,-62.4571428571,312.742857143
|
||||
180,1482.0,39.3714285714,3275,-13.6,225.0,17.6571428571,418.0,4,18.3428571429,10.8857142857,-62.7714285714,333.8
|
||||
181,1492.0,40.0285714286,3275,-22.7714285714,199.0,18.3428571429,388.0,4,17.8714285714,9.28571428571,-61.6571428571,351.0
|
||||
182,1501.5,39.8285714286,3275,-24.0571428571,195.0,18.4857142857,359.0,4,17.4571428571,9.8,-62.5142857143,342.342857143
|
||||
183,1510.6,39.2285714286,3275,-27.6571428571,224.0,18.8571428571,417.0,4,17.1285714286,6.4,-63.4,347.314285714
|
||||
184,1520.6,37.8571428571,3275,-16.9428571429,204.0,16.0285714286,334.0,4,17.4142857143,14.3142857143,-64.6,331.685714286
|
||||
185,1530.4,37.9142857143,3275,-7.54285714286,177.0,14.4857142857,387.0,4,18.9714285714,16.2,-64.2285714286,285.628571429
|
||||
186,1538.7,39.9142857143,3275,-10.0285714286,176.0,14.7142857143,291.0,4,20.2,13.7714285714,-63.6857142857,312.314285714
|
||||
187,1547.0,40.4,3275,-21.6571428571,239.0,16.6571428571,411.0,4,16.7,4.11428571429,-62.4,356.342857143
|
||||
188,1561.5,41.8857142857,3275,-21.4,218.0,18.9714285714,396.0,4,14.4285714286,5.34285714286,-62.8571428571,397.685714286
|
||||
189,1570.8,39.5714285714,3275,-10.8571428571,210.0,18.0571428571,402.0,4,15.0571428571,7.51428571429,-63.4,342.085714286
|
||||
190,1580.2,37.5142857143,3275,-15.6285714286,149.0,20.5714285714,301.0,4,18.5285714286,7.91428571429,-62.4,287.485714286
|
||||
191,1588.5,34.3428571429,3275,-10.8571428571,158.0,19.2571428571,325.0,4,18.4,18.4857142857,-61.5428571429,218.4
|
||||
192,1597.9,37.7428571429,3275,-16.9428571429,132.0,19.9428571429,300.0,4,18.3428571429,21.1714285714,-61.7142857143,264.571428571
|
||||
193,1606.3,39.5142857143,3275,-14.5428571429,220.0,17.1142857143,420.0,4,17.2857142857,17.4571428571,-62.4285714286,324.257142857
|
||||
194,1613.9,41.1142857143,3275,-24.0,215.0,21.0571428571,381.0,4,16.6285714286,7.71428571429,-62.1714285714,361.314285714
|
||||
195,1623.1,39.8285714286,3275,-11.9428571429,189.0,19.4,374.0,4,16.6714285714,10.7428571429,-62.7428571429,318.971428571
|
||||
196,1632.1,39.8285714286,3275,-12.7428571429,182.0,17.2571428571,382.0,4,17.2428571429,11.8285714286,-63.1714285714,322.171428571
|
||||
197,1641.4,40.6,3275,-16.2571428571,201.0,15.9714285714,400.0,4,17.5428571429,11.0857142857,-62.5714285714,347.114285714
|
||||
198,1651.5,41.4857142857,3275,-19.0,215.0,19.0857142857,421.0,4,18.0571428571,8.57142857143,-62.7714285714,338.342857143
|
||||
199,1660.8,40.2285714286,3275,-19.2,160.0,17.8857142857,356.0,4,16.2,6.6,-63.3142857143,341.057142857
|
||||
200,1673.2,40.0571428571,3275,-25.9714285714,226.0,16.8,439.0,4,15.5285714286,7.51428571429,-64.4285714286,376.542857143
|
||||
201,1682.8,41.2,3275,-28.6285714286,245.0,17.0571428571,445.999999999,4,15.7428571429,8.45714285714,-64.9142857143,408.285714286
|
||||
202,1693.2,43.1142857143,3275,-22.2,215.0,17.6571428571,411.0,4,17.6428571429,8.45714285714,-64.5714285714,402.971428571
|
||||
203,1702.6,40.2857142857,3275,-24.8,224.0,17.0285714286,405.0,4,17.2857142857,6.97142857143,-63.4285714286,370.628571429
|
||||
204,1712.3,39.1428571429,3275,-19.4571428571,185.0,15.5428571429,347.0,4,17.5857142857,6.25714285714,-63.0857142857,348.714285714
|
||||
205,1722.0,39.9714285714,3275,-15.4285714286,192.0,15.4571428571,368.0,4,18.2571428571,6.85714285714,-63.7428571429,352.771428571
|
||||
206,1730.9,43.1714285714,3275,-16.2,231.0,16.7428571429,426.0,4,18.3571428571,8.97142857143,-64.0857142857,388.942857143
|
||||
207,1740.4,43.7428571429,3275,-22.4857142857,233.0,17.6285714286,436.0,4,18.0571428571,9.82857142857,-64.0857142857,395.0
|
||||
208,1750.4,43.0857142857,3275,-20.7142857143,206.0,18.1428571429,381.0,4,17.8714285714,12.0571428571,-63.6571428571,366.714285714
|
||||
209,1759.8,42.1714285714,3275,-23.3714285714,185.0,18.2857142857,417.0,4,18.4571428571,12.4857142857,-63.4285714286,363.085714286
|
||||
210,1768.9,41.8285714286,3275,-17.4571428571,219.0,18.4285714286,409.0,4,18.3714285714,14.1142857143,-64.0,347.771428571
|
||||
211,1778.9,42.2571428571,3275,-17.9428571429,177.0,17.8571428571,383.0,4,18.2142857143,10.3714285714,-64.7428571429,365.942857143
|
||||
212,1787.7,42.8285714286,3275,-12.4285714286,224.0,17.2,431.0,4,18.4571428571,10.2,-63.5714285714,354.914285714
|
||||
213,1798.2,43.0,3275,-18.8,183.0,18.7428571429,383.0,4,18.9571428571,10.5428571429,-63.2,358.914285714
|
||||
214,1807.6,41.4,3275,-9.8,203.0,17.4,395.0,4,18.9142857143,10.9428571429,-64.3142857143,326.942857143
|
||||
215,1817.2,42.0571428571,3275,-17.4571428571,178.0,19.1142857143,338.0,4,18.9714285714,9.94285714286,-64.3142857143,339.114285714
|
||||
216,1826.7,40.6571428571,3275,-11.6285714286,207.0,16.6285714286,400.0,4,17.0,8.14285714286,-63.3714285714,321.914285714
|
||||
217,1838.6,40.0857142857,3275,-18.0,163.0,18.1142857143,324.0,4,16.9,8.4,-62.8,323.228571429
|
||||
218,1847.6,39.6285714286,3275,-14.1714285714,212.0,17.1714285714,389.0,4,17.6142857143,7.91428571429,-63.9428571429,338.8
|
||||
219,1857.2,42.3428571429,3275,-14.9142857143,210.0,17.7714285714,402.0,4,19.1,8.37142857143,-64.5714285714,359.828571429
|
||||
220,1866.9,41.6571428571,3275,-17.4,183.0,16.7714285714,349.0,4,18.7142857143,6.11428571429,-64.5714285714,358.228571429
|
||||
221,1876.3,38.4,3275,-14.8,187.0,18.0571428571,379.0,4,19.1142857143,5.51428571429,-63.8571428571,291.742857143
|
||||
222,1885.9,37.0571428571,3275,-18.8857142857,122.0,19.6,259.0,4,19.2571428571,7.97142857143,-63.2285714286,273.457142857
|
||||
223,1893.5,38.7428571429,3275,-14.7428571429,185.0,19.4857142857,369.0,4,18.7857142857,10.8571428571,-63.7714285714,272.542857143
|
||||
224,1903.3,31.4571428571,3275,-23.5142857143,147.0,19.3428571429,330.0,4,18.7571428571,12.3142857143,-68.8857142857,224.8
|
||||
227,1922.9,33.1142857143,3275,-11.4857142857,195.0,17.7142857143,380.0,4,16.4285714286,11.9428571429,-44.4857142857,266.571428571
|
||||
228,1932.0,30.4571428571,3275,-10.3428571429,161.0,14.6857142857,312.0,4,16.8571428571,8.88571428571,-47.0,212.571428571
|
||||
229,1932.0,25.6857142857,3275,-5.94285714286,0.999999999998,15.7142857143,19.0,4,15.7428571429,6.22857142857,-32.3428571429,153.942857143
|
||||
230,1944.3,31.5142857143,3275,-10.3428571429,177.0,17.6571428571,346.0,4,14.4571428571,7.6,-39.2285714286,181.028571429
|
||||
231,1953.5,42.5428571429,3275,-22.2857142857,143.0,20.6857142857,274.0,4,15.1571428571,7.45714285714,-67.1714285714,311.457142857
|
||||
232,1962.2,39.4857142857,3275,-13.6571428571,172.0,18.8,351.0,4,17.1714285714,11.4285714286,-61.3714285714,256.2
|
||||
233,1971.2,38.0857142857,3275,-22.0,120.0,21.3714285714,235.0,4,16.3857142857,12.5428571429,-66.9714285714,239.285714286
|
||||
234,1979.4,32.3428571429,3275,-5.31428571429,138.0,22.5714285714,277.0,4,16.2857142857,9.6,-33.7714285714,212.0
|
||||
236,1979.4,28.2857142857,3275,3.28571428571,90.9999999998,31.7142857143,152.0,4,18.2571428571,30.6285714286,-30.1428571429,137.028571429
|
||||
237,2004.1,33.6,3275,-16.5142857143,90.9999999998,32.0571428571,152.0,4,24.8571428571,30.2857142857,-66.5714285714,129.485714286
|
||||
238,2006.2,29.9714285714,3275,-10.5714285714,139.0,28.5428571429,244.0,4,31.1,14.9428571429,-41.0857142857,175.942857143
|
||||
|
2226
rowers/tests/testdata/fake_powerdata.csv
vendored
Normal file
2226
rowers/tests/testdata/fake_powerdata.csv
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1429
rowers/tests/testdata/fake_strokedata2.csv
vendored
Normal file
1429
rowers/tests/testdata/fake_strokedata2.csv
vendored
Normal file
File diff suppressed because it is too large
Load Diff
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
BIN
rowers/tests/testdata/testdata.csv.gz
vendored
Binary file not shown.
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Normal file
BIN
rowers/tests/testdata/testdata.tcx.gz
vendored
Normal file
Binary file not shown.
402
rowers/urls.py
402
rowers/urls.py
@@ -108,9 +108,9 @@ urlpatterns = [
|
||||
url(r'^o/authorize/$', base.AuthorizationView.as_view(), name="authorize"),
|
||||
url(r'^o/token/$', base.TokenView.as_view(), name="token"),
|
||||
url(r'^', include(router.urls)),
|
||||
url(r'^api-docs$', views.schema_view),
|
||||
url(r'^api-docs/$', views.schema_view),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
url(r'^api/workouts/(?P<id>\b[0-9A-Fa-f]+\b)/strokedata$',views.strokedatajson),
|
||||
url(r'^api/workouts/(?P<id>\b[0-9A-Fa-f]+\b)/strokedata/$',views.strokedatajson),
|
||||
url(r'^500v/$',views.error500_view),
|
||||
url(r'^502/$', TemplateView.as_view(template_name='502.html'),name='502'),
|
||||
url(r'^500/$', TemplateView.as_view(template_name='500.html'),name='500'),
|
||||
@@ -118,244 +118,244 @@ urlpatterns = [
|
||||
url(r'^400/$', TemplateView.as_view(template_name='400.html'),name='400'),
|
||||
url(r'^403/$', TemplateView.as_view(template_name='403.html'),name='403'),
|
||||
# url(r'^imports/$', views.imports_view),
|
||||
url(r'^exportallworkouts/?$',views.workouts_summaries_email_view),
|
||||
url(r'^update_empower$',views.rower_update_empower_view),
|
||||
url(r'^agegroupcp/(?P<age>\d+)$',views.agegroupcpview),
|
||||
url(r'^agegroupcp/(?P<age>\d+)/(?P<normalize>\d+)$',views.agegroupcpview),
|
||||
url(r'^ajax_agegroup/(?P<age>\d+)/(?P<weightcategory>\w+.*)/(?P<sex>\w+.*)/(?P<userid>\d+)$',
|
||||
url(r'^exportallworkouts/?/$',views.workouts_summaries_email_view),
|
||||
url(r'^update_empower/$',views.rower_update_empower_view),
|
||||
url(r'^agegroupcp/(?P<age>\d+)/$',views.agegroupcpview),
|
||||
url(r'^agegroupcp/(?P<age>\d+)/(?P<normalize>\d+)/$',views.agegroupcpview),
|
||||
url(r'^ajax_agegroup/(?P<age>\d+)/(?P<weightcategory>\w+.*)/(?P<sex>\w+.*)/(?P<userid>\d+)/$',
|
||||
views.ajax_agegrouprecords),
|
||||
url(r'^updatefitness/(?P<mode>\w+.*)/(?P<days>\d+)$',views.fitness_metric_view),
|
||||
url(r'^updatefitness/(?P<mode>\w+.*)$',views.fitness_metric_view),
|
||||
url(r'^updatefitness$',views.fitness_metric_view),
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<distance>\d+)m$',
|
||||
url(r'^updatefitness/(?P<mode>\w+.*)/(?P<days>\d+)/$',views.fitness_metric_view),
|
||||
url(r'^updatefitness/(?P<mode>\w+.*)/$',views.fitness_metric_view),
|
||||
url(r'^updatefitness/$',views.fitness_metric_view),
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<distance>\d+)m/$',
|
||||
views.agegrouprecordview),
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<duration>\d+)min$',
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/(?P<duration>\d+)min/$',
|
||||
views.agegrouprecordview),
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)$',
|
||||
url(r'^agegrouprecords/(?P<sex>\w+.*)/(?P<weightcategory>\w+.*)/$',
|
||||
views.agegrouprecordview),
|
||||
url(r'^list-workouts/ranking$',views.workouts_view,{'rankingonly':True}),
|
||||
url(r'^list-workouts/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workouts_view),
|
||||
url(r'^list-workouts/ranking/$',views.workouts_view,{'rankingonly':True}),
|
||||
url(r'^list-workouts/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/team/(?P<teamid>\d+)/$',views.workouts_view),
|
||||
url(r'^(?P<rowerid>\d+)/list-workouts/$',views.workouts_view),
|
||||
url(r'^(?P<rowerid>\d+)/list-workouts/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workouts_view),
|
||||
url(r'^(?P<rowerid>\d+)/list-workouts/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/user/(?P<userid>\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.workouts_view),
|
||||
url(r'^list-workouts/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workouts_view),
|
||||
url(r'^virtualevents$',views.virtualevents_view),
|
||||
url(r'^virtualevent/create$',views.virtualevent_create_view),
|
||||
url(r'^virtualevent/createindoor$',views.indoorvirtualevent_create_view),
|
||||
url(r'^list-workouts/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_view),
|
||||
url(r'^virtualevents/$',views.virtualevents_view),
|
||||
url(r'^virtualevent/create/$',views.virtualevent_create_view),
|
||||
url(r'^virtualevent/createindoor/$',views.indoorvirtualevent_create_view),
|
||||
url(r'^raceregistration/togglenotification/(?P<id>\d+)/$',
|
||||
views.virtualevent_toggle_email_view),
|
||||
url(r'^indoorraceregistration/togglenotification/(?P<id>\d+)/$',
|
||||
views.indoorvirtualevent_toggle_email_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)$',views.virtualevent_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/edit$',views.virtualevent_edit_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/editindoor$',views.indoorvirtualevent_edit_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/register$',views.virtualevent_register_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/registerindoor$',views.indoorvirtualevent_register_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/adddiscipline$',views.virtualevent_addboat_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw/(?P<recordid>\d+)$',views.virtualevent_withdraw_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw$',views.virtualevent_withdraw_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit$',
|
||||
url(r'^virtualevent/(?P<id>\d+)/$',views.virtualevent_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/edit/$',views.virtualevent_edit_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/editindoor/$',views.indoorvirtualevent_edit_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/register/$',views.virtualevent_register_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/registerindoor/$',views.indoorvirtualevent_register_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/adddiscipline/$',views.virtualevent_addboat_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw/(?P<recordid>\d+)/$',views.virtualevent_withdraw_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/withdraw/$',views.virtualevent_withdraw_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/$',
|
||||
views.virtualevent_submit_result_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/(?P<workoutid>\d+)$',
|
||||
url(r'^virtualevent/(?P<id>\d+)/submit/(?P<workoutid>\d+)/$',
|
||||
views.virtualevent_submit_result_view),
|
||||
url(r'^virtualevent/(?P<raceid>\d+)/disqualify/(?P<recordid>\d+)/',
|
||||
views.virtualevent_disqualify_view),
|
||||
url(r'^list-workouts/$',views.workouts_view),
|
||||
url(r'^list-courses/$',views.courses_view),
|
||||
url(r'^courses/upload$',views.course_upload_view),
|
||||
url(r'^courses/upload/$',views.course_upload_view),
|
||||
url(r'^workout/addmanual/$',views.addmanual_view),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/user/(?P<userid>\d+)/$',views.team_comparison_select),
|
||||
url(r'^team-compare-select/$',views.team_comparison_select),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workouts_join_select),
|
||||
url(r'^workouts-join$',views.workouts_join_view),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_join_select),
|
||||
url(r'^workouts-join/$',views.workouts_join_view),
|
||||
url(r'^workouts-join-select/team/(?P<teamid>\d+)/$',views.workouts_join_select),
|
||||
url(r'^workouts-join-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workouts_join_select),
|
||||
url(r'^workouts-join-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workouts_join_select),
|
||||
url(r'^workouts-join-select/$',views.workouts_join_select),
|
||||
url(r'^user-boxplot-select/user/(?P<userid>\d+)/$',views.user_boxplot_select),
|
||||
url(r'^user-boxplot-select/$',views.user_boxplot_select),
|
||||
url(r'^user-multiflex-select/user/(?P<userid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.user_multiflex_select),
|
||||
url(r'^user-multiflex-select/user/(?P<userid>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.user_multiflex_select),
|
||||
url(r'^user-multiflex-select/user/(?P<userid>\d+)/$',views.user_multiflex_select),
|
||||
url(r'^user-multiflex-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.user_multiflex_select),
|
||||
url(r'^user-multiflex-select/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.user_multiflex_select),
|
||||
url(r'^user-multiflex-select/$',views.user_multiflex_select),
|
||||
url(r'^list-jobs/$',views.session_jobs_view),
|
||||
url(r'^jobs-status/$',views.session_jobs_status),
|
||||
url(r'^job-kill/(?P<id>.*)$',views.kill_async_job),
|
||||
url(r'^test-job/(?P<aantal>\d+)$',views.test_job_view),
|
||||
url(r'^test-job2/(?P<aantal>\d+)$',views.test_job_view2),
|
||||
url(r'^record-progress/(?P<value>\d+)/(?P<id>.*)$',views.post_progress),
|
||||
url(r'^record-progress/(?P<id>.*)$',views.post_progress),
|
||||
url(r'^record-progress$',views.post_progress),
|
||||
url(r'^job-kill/(?P<id>.*)/$',views.kill_async_job),
|
||||
url(r'^test-job/(?P<aantal>\d+)/$',views.test_job_view),
|
||||
url(r'^test-job2/(?P<aantal>\d+)/$',views.test_job_view2),
|
||||
url(r'^record-progress/(?P<value>\d+)/(?P<id>.*)/$',views.post_progress),
|
||||
url(r'^record-progress/(?P<id>.*)/$',views.post_progress),
|
||||
url(r'^record-progress/$',views.post_progress),
|
||||
url(r'^list-graphs/$',views.graphs_view),
|
||||
url(r'^fitness-progress/$',views.fitnessmetric_view),
|
||||
url(r'^fitness-progress/user/(?P<id>\d+)$',views.fitnessmetric_view),
|
||||
url(r'^fitness-progress/user/(?P<id>\d+)/(?P<mode>\w+.*)$',views.fitnessmetric_view),
|
||||
url(r'^ote-bests/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.rankings_view),
|
||||
url(r'^ote-bests/user/(?P<theuser>\d+)$',views.rankings_view),
|
||||
url(r'^ote-bests/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.rankings_view),
|
||||
url(r'^fitness-progress/user/(?P<id>\d+)/$',views.fitnessmetric_view),
|
||||
url(r'^fitness-progress/user/(?P<id>\d+)/(?P<mode>\w+.*)/$',views.fitnessmetric_view),
|
||||
url(r'^ote-bests/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.rankings_view),
|
||||
url(r'^ote-bests/user/(?P<theuser>\d+)/$',views.rankings_view),
|
||||
url(r'^ote-bests/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.rankings_view),
|
||||
url(r'^ote-bests/$',views.rankings_view),
|
||||
url(r'^(?P<theuser>\d+)/ote-bests/$',views.rankings_view),
|
||||
url(r'^(?P<theuser>\d+)/ote-bests2/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.rankings_view2),
|
||||
url(r'^ote-bests2/user/(?P<theuser>\d+)$',views.rankings_view2),
|
||||
url(r'^ote-bests2/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.rankings_view2),
|
||||
url(r'^(?P<theuser>\d+)/ote-bests2/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.rankings_view2),
|
||||
url(r'^ote-bests2/user/(?P<theuser>\d+)/$',views.rankings_view2),
|
||||
url(r'^ote-bests2/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.rankings_view2),
|
||||
url(r'^ote-bests2/$',views.rankings_view2),
|
||||
url(r'^otw-bests/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.otwrankings_view),
|
||||
url(r'^otw-bests/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.otwrankings_view),
|
||||
url(r'^otw-bests/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otwrankings_view),
|
||||
url(r'^otw-bests/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otwrankings_view),
|
||||
url(r'^otw-bests/user/(?P<theuser>\d+)/$',views.otwrankings_view),
|
||||
url(r'^otw-bests/$',views.otwrankings_view),
|
||||
url(r'^ote-ranking/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.oterankings_view),
|
||||
url(r'^ote-ranking/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.oterankings_view),
|
||||
url(r'^ote-ranking/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.oterankings_view),
|
||||
url(r'^ote-ranking/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.oterankings_view),
|
||||
url(r'^ote-ranking/$',views.oterankings_view),
|
||||
url(r'^ote-ranking/user/(?P<theuser>\d+)/$',views.oterankings_view),
|
||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<theuser>\d+)$',views.cum_flex),
|
||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<theuser>\d+)/$',views.cum_flex),
|
||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.cum_flex),
|
||||
url(r'^flexall/(?P<xparam>\w+.*)/(?P<yparam1>\w+.*)/(?P<yparam2>\w+.*)/$',views.cum_flex),
|
||||
url(r'^flexall/user/(?P<theuser>\d+)/$',views.cum_flex),
|
||||
url(r'^flexall/$',views.cum_flex),
|
||||
url(r'^flexalldata/$',views.cum_flex_data),
|
||||
url(r'^histo/user/(?P<theuser>\d+)$',views.histo),
|
||||
url(r'^histodata$',views.histo_data),
|
||||
url(r'^histo/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.histo),
|
||||
url(r'^histo/user/(?P<theuser>\d+)/$',views.histo),
|
||||
url(r'^histodata/$',views.histo_data),
|
||||
url(r'^histo/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.histo),
|
||||
url(r'^histo/$',views.histo),
|
||||
url(r'^cumstats/user/(?P<theuser>\d+)$',views.cumstats),
|
||||
url(r'^cumstats/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.cumstats),
|
||||
url(r'^cumstats/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.cumstats),
|
||||
url(r'^cumstats/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.cumstats),
|
||||
url(r'^cumstats/user/(?P<theuser>\d+)/$',views.cumstats),
|
||||
url(r'^cumstats/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.cumstats),
|
||||
url(r'^cumstats/user/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.cumstats),
|
||||
url(r'^cumstats/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.cumstats),
|
||||
url(r'^cumstats/$',views.cumstats),
|
||||
url(r'^graph/(?P<id>\d+)/$',views.graph_show_view),
|
||||
url(r'^graph/(?P<pk>\d+)/delete$',views.GraphDelete.as_view(),name='graph_delete'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-thumbnails$',views.get_thumbnails),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/toggle-ranking$',views.workout_toggle_ranking),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-testscript$',views.get_testscript),
|
||||
url(r'^graph/(?P<pk>\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-thumbnails/$',views.get_thumbnails),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/toggle-ranking/$',views.workout_toggle_ranking),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/get-testscript/$',views.get_testscript),
|
||||
url(r'^workout/upload/team/$',views.team_workout_upload_view),
|
||||
url(r'^workout/upload/$',views.workout_upload_view,name='workout_upload_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/histo$',views.workout_histo_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/task$',views.workout_test_task_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/forcecurve$',views.workout_forcecurve_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/unsubscribe$',views.workout_unsubscribe_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/export$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/comment$',views.workout_comment_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailtcx$',views.workout_tcxemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailgpx$',views.workout_gpxemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailcsv$',views.workout_csvemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/csvtoadmin$',views.workout_csvtoadmin_view),
|
||||
url(r'^ergcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.otecp_toadmin_view),
|
||||
url(r'^otwcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.otwcp_toadmin_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/histo/$',views.workout_histo_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/task/$',views.workout_test_task_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/forcecurve/$',views.workout_forcecurve_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/unsubscribe/$',views.workout_unsubscribe_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/export/$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/comment/$',views.workout_comment_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailtcx/$',views.workout_tcxemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailgpx/$',views.workout_gpxemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/emailcsv/$',views.workout_csvemail_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/csvtoadmin/$',views.workout_csvtoadmin_view),
|
||||
url(r'^ergcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otecp_toadmin_view),
|
||||
url(r'^otwcpdatatoadmin/(?P<theuser>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.otwcp_toadmin_view),
|
||||
# url(r'^workout/compare/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.workout_comparison_list),
|
||||
# url(r'^workout/compare2/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view),
|
||||
url(r'^workout/compare/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/edit$',views.workout_edit_view,
|
||||
url(r'^workout/compare/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/edit/$',views.workout_edit_view,
|
||||
name='workout_edit_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/map$',views.workout_map_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/setprivate$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/updatecp$',views.workout_update_cp_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/makepublic$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/geeky$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/advanced$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke/(?P<metric>\w+.*)$',views.instroke_chart),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke$',views.instroke_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stats$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/data$',views.workout_data_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/map/$',views.workout_map_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/setprivate/$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/updatecp/$',views.workout_update_cp_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/makepublic/$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/geeky/$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/advanced/$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke/(?P<metric>\w+.*)/$',views.instroke_chart),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/instroke/$',views.instroke_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/data/$',views.workout_data_view,
|
||||
name='workout_data_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/otwsetpower$',views.workout_otwsetpower_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/interactiveotwplot$',views.workout_otwpowerplot_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/wind$',views.workout_wind_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/image$',views.workout_uploadimage_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/compare$',views.virtualevent_compare_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/image$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/otwsetpower/$',views.workout_otwsetpower_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/interactiveotwplot/$',views.workout_otwpowerplot_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/wind/$',views.workout_wind_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/image/$',views.workout_uploadimage_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/compare/$',views.virtualevent_compare_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/image/$',
|
||||
views.virtualevent_uploadimage_view),
|
||||
url(r'^virtualevent/(?P<id>\d+)/setimage/(?P<logoid>\d+)/$',
|
||||
views.virtualevent_setlogo_view),
|
||||
url(r'^logo/(?P<id>\d+)/delete/$',
|
||||
views.logo_delete_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/darkskywind$',views.workout_downloadwind_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/metar/(?P<airportcode>\w+)$',views.workout_downloadmetar_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stream$',views.workout_stream_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/crewnerdsummary$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/editintervals$',views.workout_summary_edit_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/darkskywind/$',views.workout_downloadwind_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/metar/(?P<airportcode>\w+)/$',views.workout_downloadmetar_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stream/$',views.workout_stream_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/crewnerdsummary/$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/editintervals/$',views.workout_summary_edit_view,
|
||||
name='workout_summary_edit_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/restore$',views.workout_summary_restore_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/split$',views.workout_split_view),
|
||||
# url(r'^workout/(?P<id>\d+)/interactiveplot$',views.workout_biginteractive_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view$',views.workout_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/restore/$',views.workout_summary_restore_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/split/$',views.workout_split_view),
|
||||
# url(r'^workout/(?P<id>\d+)/interactiveplot/$',views.workout_biginteractive_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/view/$',views.workout_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.workout_view),
|
||||
url(r'^workout/fusion/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)$',views.workout_fusion_view),
|
||||
url(r'^workout/fusion/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/$',views.workout_fusion_view),
|
||||
url(r'^workout/fusion/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.workout_fusion_list),
|
||||
url(r'^workout/fusion/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workout_fusion_list),
|
||||
url(r'^help$',TemplateView.as_view(
|
||||
url(r'^workout/fusion/(?P<id>\b[0-9A-Fa-f]+\b)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_fusion_list),
|
||||
url(r'^help/$',TemplateView.as_view(
|
||||
template_name='help.html'),name='help'
|
||||
),
|
||||
url(r'^physics$',TemplateView.as_view(template_name='physics.html'),name='physics'),
|
||||
url(r'^partners$',TemplateView.as_view(template_name='partners.html'),name='partners'),
|
||||
url(r'^physics/$',TemplateView.as_view(template_name='physics.html'),name='physics'),
|
||||
url(r'^partners/$',TemplateView.as_view(template_name='partners.html'),name='partners'),
|
||||
# keeping the old URLs for retrofit
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'1'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'2'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpiechart$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'3'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot2$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/adddistanceplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'7'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot2$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addtimeplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'8'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addotwpowerplot$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addotwpowerplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'9'}),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpowerpiechart$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addpowerpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'13'}),
|
||||
# addstatic is the new URL -> need to update in templates
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/(?P<plotnr>\d+)$',
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/(?P<plotnr>\d+)/$',
|
||||
views.workout_add_chart_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic$',views.workout_add_chart_view),
|
||||
url(r'^workout/(?P<pk>\d+)/delete$',login_required(
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/addstatic/$',views.workout_add_chart_view),
|
||||
url(r'^workout/(?P<pk>\d+)/delete/$',login_required(
|
||||
views.WorkoutDelete.as_view()),
|
||||
name='workout_delete'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace$',views.workout_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/undosmoothenpace$',views.workout_undo_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/smoothenpace/$',views.workout_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/undosmoothenpace/$',views.workout_undo_smoothenpace_view),
|
||||
url(r'^workout/c2import/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/user/(?P<userid>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)/user/(?P<userid>\d+)$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/user/(?P<userid>\d+)/$',views.workout_c2import_view),
|
||||
url(r'^workout/c2list/(?P<page>\d+)/user/(?P<userid>\d+)/$',views.workout_c2import_view),
|
||||
url(r'^workout/stravaimport/$',views.workout_stravaimport_view),
|
||||
url(r'^workout/stravaimport/user/(?P<userid>\d+)$',views.workout_stravaimport_view),
|
||||
url(r'^workout/stravaimport/user/(?P<userid>\d+)/$',views.workout_stravaimport_view),
|
||||
url(r'^workout/c2import/all/$',views.workout_getc2workout_all),
|
||||
url(r'^workout/c2import/all/(?P<page>\d+)$',views.workout_getc2workout_all),
|
||||
url(r'^workout/c2import/all/(?P<page>\d+)/$',views.workout_getc2workout_all),
|
||||
url(r'^workout/(?P<source>\w+.*)import/(?P<externalid>\d+)/$',views.workout_getimportview),
|
||||
url(r'^workout/stravaimport/all/$',views.workout_getstravaworkout_all),
|
||||
url(r'^workout/stravaimport/next/$',views.workout_getstravaworkout_next),
|
||||
url(r'^workout/sporttracksimport/$',views.workout_sporttracksimport_view),
|
||||
url(r'^workout/sporttracksimport/user/(?P<userid>\d+)$',views.workout_sporttracksimport_view),
|
||||
url(r'^workout/sporttracksimport/user/(?P<userid>\d+)/$',views.workout_sporttracksimport_view),
|
||||
url(r'^workout/sporttracksimport/all/$',views.workout_getsporttracksworkout_all),
|
||||
url(r'^workout/polarimport/$',views.workout_polarimport_view),
|
||||
url(r'^workout/polarimport/user/(?P<userid>\d+)/',views.workout_polarimport_view),
|
||||
url(r'^workout/runkeeperimport/$',views.workout_runkeeperimport_view),
|
||||
url(r'^workout/runkeeperimport/user/(?P<userid>\d+)$',views.workout_runkeeperimport_view),
|
||||
url(r'^workout/runkeeperimport/user/(?P<userid>\d+)/$',views.workout_runkeeperimport_view),
|
||||
url(r'^workout/underarmourimport/$',views.workout_underarmourimport_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/deleteconfirm$',views.workout_delete_confirm_view),
|
||||
# url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/deleteconfirm/$',views.workout_delete_confirm_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/c2uploadw/$',views.workout_c2_upload_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/stravauploadw/$',views.workout_strava_upload_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/recalcsummary/$',views.workout_recalcsummary_view),
|
||||
@@ -366,34 +366,34 @@ urlpatterns = [
|
||||
url(r'^multi-compare/workout/(?P<id>\b[0-9A-Fa-f]+\b)/user/(?P<userid>\d+)/$',views.multi_compare_view),
|
||||
url(r'^multi-compare/workout/(?P<id>\b[0-9A-Fa-f]+\b)/$',views.multi_compare_view),
|
||||
url(r'^multi-compare/$',views.multi_compare_view),
|
||||
url(r'^user-boxplot/user/(?P<userid>\d+)$',views.boxplot_view),
|
||||
url(r'^user-boxplot$',views.boxplot_view),
|
||||
url(r'^user-boxplot-data$',views.boxplot_view_data),
|
||||
url(r'^user-multiflex/user/(?P<userid>\d+)$',views.multiflex_view),
|
||||
url(r'^user-boxplot/user/(?P<userid>\d+)/$',views.boxplot_view),
|
||||
url(r'^user-boxplot/$',views.boxplot_view),
|
||||
url(r'^user-boxplot-data/$',views.boxplot_view_data),
|
||||
url(r'^user-multiflex/user/(?P<userid>\d+)/$',views.multiflex_view),
|
||||
url(r'^user-multiflex/$',views.multiflex_view),
|
||||
url(r'^user-multiflex-data$',views.multiflex_data),
|
||||
url(r'^me/deactivate$',views.deactivate_user),
|
||||
url(r'^me/delete$',views.remove_user),
|
||||
url(r'^me/gdpr-optin-confirm/?$',views.user_gdpr_confirm),
|
||||
url(r'^user-multiflex-data/$',views.multiflex_data),
|
||||
url(r'^me/deactivate/$',views.deactivate_user),
|
||||
url(r'^me/delete/$',views.remove_user),
|
||||
url(r'^me/gdpr-optin-confirm/?/$',views.user_gdpr_confirm),
|
||||
url(r'^me/gdpr-optin-confirm/$',views.user_gdpr_confirm),
|
||||
url(r'^me/gdpr-optin/?$',views.user_gdpr_optin),
|
||||
url(r'^me/gdpr-optin/?/$',views.user_gdpr_optin),
|
||||
url(r'^me/gdpr-optin/$',views.user_gdpr_optin),
|
||||
url(r'^me/teams/$',views.rower_teams_view),
|
||||
url(r'^me/calcdps/$',views.rower_calcdps_view),
|
||||
url(r'^me/exportsettings/$',views.rower_exportsettings_view),
|
||||
url(r'^me/exportsettings/user/(?P<userid>\d+)$',views.rower_exportsettings_view),
|
||||
url(r'^me/exportsettings/user/(?P<userid>\d+)/$',views.rower_exportsettings_view),
|
||||
url(r'^team/(?P<id>\d+)/$',views.team_view),
|
||||
url(r'^team/(?P<id>\d+)/memberstats/$',views.team_members_stats_view),
|
||||
url(r'^team/(?P<id>\d+)/edit/$',views.team_edit_view),
|
||||
url(r'^team/(?P<id>\d+)/leaveconfirm/$',views.team_leaveconfirm_view),
|
||||
url(r'^team/(?P<id>\d+)/leave/$',views.team_leave_view),
|
||||
url(r'^team/(?P<id>\d+)/deleteconfirm/$',views.team_deleteconfirm_view),
|
||||
url(r'^team/(?P<teamid>\d+)/requestmembership/(?P<userid>\d+)$',views.team_requestmembership_view),
|
||||
url(r'^team/(?P<teamid>\d+)/requestmembership/(?P<userid>\d+)/$',views.team_requestmembership_view),
|
||||
url(r'^team/(?P<id>\d+)/delete/$',views.team_delete_view),
|
||||
url(r'^team/create/$',views.team_create_view),
|
||||
url(r'^me/team/(?P<teamid>\d+)/drop/(?P<userid>\d+)$',views.manager_member_drop_view),
|
||||
url(r'^me/invitation/(?P<id>\d+)/reject$',views.invitation_reject_view),
|
||||
url(r'^me/invitation/(?P<id>\d+)/revoke$',views.invitation_revoke_view),
|
||||
url(r'^me/team/(?P<teamid>\d+)/drop/(?P<userid>\d+)/$',views.manager_member_drop_view),
|
||||
url(r'^me/invitation/(?P<id>\d+)/reject/$',views.invitation_reject_view),
|
||||
url(r'^me/invitation/(?P<id>\d+)/revoke/$',views.invitation_revoke_view),
|
||||
url(r'^me/invitation/$',views.rower_invitations_view),
|
||||
url(r'^me/raise500/$',views.raise_500),
|
||||
url(r'^me/invitation/(\w+.*)/$',views.rower_invitations_view),
|
||||
@@ -402,14 +402,14 @@ urlpatterns = [
|
||||
url(r'^me/request/(\w+.*)/$',views.manager_requests_view),
|
||||
url(r'^me/request/$',views.manager_requests_view),
|
||||
url(r'^me/edit/$',views.rower_edit_view),
|
||||
url(r'^me/edit/user/(?P<userid>\d+)$',views.rower_edit_view),
|
||||
url(r'^me/edit/user/(?P<userid>\d+)/$',views.rower_edit_view),
|
||||
url(r'^me/preferences/$',views.rower_prefs_view),
|
||||
url(r'^me/transactions/$',views.transactions_view),
|
||||
url(r'^me/preferences/user/(?P<userid>\d+)$',views.rower_prefs_view),
|
||||
url(r'^me/preferences/user/(?P<userid>\d+)/$',views.rower_prefs_view),
|
||||
url(r'^me/edit/(.+.*)/$',views.rower_edit_view),
|
||||
url(r'^me/c2authorize/$',views.rower_c2_authorize),
|
||||
url(r'^me/polarauthorize/$',views.rower_polar_authorize),
|
||||
url(r'^me/revokeapp/(?P<id>\d+)$',views.rower_revokeapp_view),
|
||||
url(r'^me/revokeapp/(?P<id>\d+)/$',views.rower_revokeapp_view),
|
||||
url(r'^me/stravaauthorize/$',views.rower_strava_authorize),
|
||||
url(r'^me/sporttracksauthorize/$',views.rower_sporttracks_authorize),
|
||||
url(r'^me/underarmourauthorize/$',views.rower_underarmour_authorize),
|
||||
@@ -420,59 +420,59 @@ urlpatterns = [
|
||||
url(r'^me/tprefresh/$',views.rower_tp_token_refresh),
|
||||
url(r'^me/c2refresh/$',views.rower_c2_token_refresh),
|
||||
url(r'^me/favoritecharts/$',views.rower_favoritecharts_view),
|
||||
url(r'^me/favoritecharts/user/(?P<userid>\d+)$',views.rower_favoritecharts_view),
|
||||
# url(r'^me/workflowconfig$',views.workout_workflow_config_view),
|
||||
url(r'^me/favoritecharts/user/(?P<userid>\d+)/$',views.rower_favoritecharts_view),
|
||||
# url(r'^me/workflowconfig/$',views.workout_workflow_config_view),
|
||||
url(r'^me/workflowconfig2/$',views.workout_workflow_config2_view),
|
||||
url(r'^me/workflowconfig2/user/(?P<userid>\d+)$',views.workout_workflow_config2_view),
|
||||
url(r'^me/workflowdefault$',views.workflow_default_view),
|
||||
url(r'^me/workflowconfig2/user/(?P<userid>\d+)/$',views.workout_workflow_config2_view),
|
||||
url(r'^me/workflowdefault/$',views.workflow_default_view),
|
||||
url(r'^email/send/$', views.sendmail),
|
||||
url(r'^email/thankyou/$', TemplateView.as_view(template_name='thankyou.html'), name='thankyou'),
|
||||
url(r'^email/$', TemplateView.as_view(template_name='email.html'), name='email'),
|
||||
url(r'^about', TemplateView.as_view(template_name='about_us.html'),name='about'),
|
||||
url(r'^brochure$',TemplateView.as_view(template_name='brochure.html'),
|
||||
url(r'^brochure/$',TemplateView.as_view(template_name='brochure.html'),
|
||||
name='brochure'),
|
||||
url(r'^developers', TemplateView.as_view(template_name='developers.html'),name='about'),
|
||||
# url(r'^compatibility', TemplateView.as_view(template_name='compatibility.html'),name='about'),
|
||||
# url(r'^videos', TemplateView.as_view(template_name='videos.html'),name='videos'),
|
||||
url(r'^analysis/user/(?P<userid>\d+)$', views.analysis_view,name='analysis'),
|
||||
url(r'^laboratory/user/(?P<userid>\d+)$', views.laboratory_view,name='laboratory'),
|
||||
url(r'^analysis/user/(?P<userid>\d+)/$', views.analysis_view,name='analysis'),
|
||||
url(r'^laboratory/user/(?P<userid>\d+)/$', views.laboratory_view,name='laboratory'),
|
||||
url(r'^analysis/$', views.analysis_view,name='analysis'),
|
||||
url(r'^laboratory/$', views.laboratory_view,name='laboratory'),
|
||||
url(r'^promembership', TemplateView.as_view(template_name='promembership.html'),name='promembership'),
|
||||
url(r'^checkout/(?P<planid>\d+)$',views.payment_confirm_view),
|
||||
url(r'^upgradecheckout/(?P<planid>\d+)$',views.upgrade_confirm_view),
|
||||
url(r'^downgradecheckout/(?P<planid>\d+)$',views.downgrade_confirm_view),
|
||||
url(r'^billing$',views.billing_view,name='billing'),
|
||||
url(r'^upgrade$',views.upgrade_view,name='upgrade'),
|
||||
url(r'^downgrade$',views.downgrade_view,name='downgrade'),
|
||||
url(r'^paymentcompleted$',views.payment_completed_view),
|
||||
url(r'^downgradecompleted$',views.downgrade_completed_view),
|
||||
url(r'^paidplans$',views.paidplans_view,name='paidplans'),
|
||||
url(r'^me/cancelsubscriptions$',views.plan_stop_view),
|
||||
url(r'^me/cancelsubscription/(?P<id>[\w\ ]+.*)$',views.plan_tobasic_view),
|
||||
url(r'^checkouts$',views.checkouts_view,name='checkouts'),
|
||||
url(r'^upgradecheckouts$',views.upgrade_checkouts_view,name='upgrade_checkouts'),
|
||||
url(r'^downgradecheckouts$',views.downgrade_checkouts_view,name='downgrade_checkouts'),
|
||||
url(r'^checkout/(?P<planid>\d+)/$',views.payment_confirm_view),
|
||||
url(r'^upgradecheckout/(?P<planid>\d+)/$',views.upgrade_confirm_view),
|
||||
url(r'^downgradecheckout/(?P<planid>\d+)/$',views.downgrade_confirm_view),
|
||||
url(r'^billing/$',views.billing_view,name='billing'),
|
||||
url(r'^upgrade/$',views.upgrade_view,name='upgrade'),
|
||||
url(r'^downgrade/$',views.downgrade_view,name='downgrade'),
|
||||
url(r'^paymentcompleted/$',views.payment_completed_view),
|
||||
url(r'^downgradecompleted/$',views.downgrade_completed_view),
|
||||
url(r'^paidplans/$',views.paidplans_view,name='paidplans'),
|
||||
url(r'^me/cancelsubscriptions/$',views.plan_stop_view),
|
||||
url(r'^me/cancelsubscription/(?P<id>[\w\ ]+.*)/$',views.plan_tobasic_view),
|
||||
url(r'^checkouts/$',views.checkouts_view,name='checkouts'),
|
||||
url(r'^upgradecheckouts/$',views.upgrade_checkouts_view,name='upgrade_checkouts'),
|
||||
url(r'^downgradecheckouts/$',views.downgrade_checkouts_view,name='downgrade_checkouts'),
|
||||
url(r'^planrequired',views.planrequired_view),
|
||||
url(r'^starttrial$',views.start_trial_view),
|
||||
url(r'^startplantrial$',views.start_plantrial_view),
|
||||
url(r'^starttrial/$',views.start_trial_view),
|
||||
url(r'^startplantrial/$',views.start_plantrial_view),
|
||||
# url(r'^planmembership', TemplateView.as_view(template_name='planmembership.html'),name='planmembership'),
|
||||
# url(r'^paypaltest', TemplateView.as_view(template_name='paypaltest.html'),name='paypaltest'),
|
||||
url(r'^legal', TemplateView.as_view(template_name='legal.html'),name='legal'),
|
||||
url(r'^register$',views.rower_register_view),
|
||||
url(r'^register/$',views.rower_register_view),
|
||||
url(r'^register/thankyou/$', TemplateView.as_view(template_name='registerthankyou.html'), name='registerthankyou'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/workflow$',views.workout_workflow_view,
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/workflow/$',views.workout_workflow_view,
|
||||
name='workout_workflow_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>[\w\ ]+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart$',views.workout_flexchart3_view),
|
||||
# url(r'^workout/compare/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/(?P<plottype>[\w\ ]+.*)$',views.workout_comparison_view2),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/flexchart/$',views.workout_flexchart3_view),
|
||||
# url(r'^workout/compare/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/(?P<plottype>[\w\ ]+.*)/$',views.workout_comparison_view2),
|
||||
# url(r'^workout/compare/(?P<id1>\b[0-9A-Fa-f]+\b)/(?P<id2>\b[0-9A-Fa-f]+\b)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/$',views.workout_comparison_view2),
|
||||
url(r'^test\_callback',views.rower_process_testcallback),
|
||||
url(r'^createplan/$',views.rower_create_trainingplan),
|
||||
url(r'^createplan/user/(?P<userid>\d+)/$',views.rower_create_trainingplan),
|
||||
url(r'^deleteplan/(?P<pk>\d+)$',login_required(
|
||||
url(r'^deleteplan/(?P<pk>\d+)/$',login_required(
|
||||
views.TrainingPlanDelete.as_view())),
|
||||
url(r'^deletemicrocycle/(?P<pk>\d+)/$',login_required(
|
||||
views.MicroCycleDelete.as_view())),
|
||||
@@ -480,7 +480,7 @@ urlpatterns = [
|
||||
views.MesoCycleDelete.as_view())),
|
||||
url(r'^deletemacrocycle/(?P<pk>\d+)/$',login_required(
|
||||
views.MacroCycleDelete.as_view())),
|
||||
# url(r'^deleteplan/(?P<id>\d+)$',views.rower_delete_trainingplan),
|
||||
# url(r'^deleteplan/(?P<id>\d+)/$',views.rower_delete_trainingplan),
|
||||
url(r'^plan/(?P<id>\d+)/$',views.rower_trainingplan_view),
|
||||
url(r'^plan/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.rower_trainingplan_view),
|
||||
url(r'^plan/(?P<id>\d+)/micro/(?P<thismicroid>\d+)/$',views.rower_trainingplan_view),
|
||||
@@ -504,13 +504,13 @@ urlpatterns = [
|
||||
views.TrainingMicroCycleUpdate.as_view()),
|
||||
name='microcycle_update_view'),
|
||||
url(r'^deletetarget/(?P<id>\d+)/$',views.rower_delete_trainingtarget),
|
||||
url(r'^editplan/(?P<pk>\d+)$',login_required(
|
||||
url(r'^editplan/(?P<pk>\d+)/$',login_required(
|
||||
views.TrainingPlanUpdate.as_view()),
|
||||
name='trainingplan_update_view'),
|
||||
url(r'^edittarget/(?P<pk>\d+)/$',login_required(
|
||||
views.TrainingTargetUpdate.as_view()),
|
||||
name='trainingtarget_update_view'),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/test\_strokedata$',views.strokedataform),
|
||||
url(r'^workout/(?P<id>\b[0-9A-Fa-f]+\b)/test\_strokedata/$',views.strokedataform),
|
||||
url(r'^sessions/teamcreate/user/(?P<userid>\d+)/$',views.plannedsession_teamcreate_view),
|
||||
url(r'^sessions/teamcreate/team/(?P<teamid>\d+)/user/(?P<userid>\d+)/$',
|
||||
views.plannedsession_teamcreate_view),
|
||||
@@ -520,11 +520,11 @@ urlpatterns = [
|
||||
url(r'^sessions/teamedit/(?P<sessionid>\d+)/$',views.plannedsession_teamedit_view),
|
||||
url(r'^sessions/teamedit/(?P<sessionid>\d+)/user/(?P<userid>\d+)/$',views.plannedsession_teamedit_view),
|
||||
url(r'^sessions/create/$',views.plannedsession_create_view),
|
||||
url(r'^sessions/create/user/(?P<userid>\d+)$',
|
||||
url(r'^sessions/create/user/(?P<userid>\d+)/$',
|
||||
views.plannedsession_create_view),
|
||||
url(r'^sessions/create/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',
|
||||
views.plannedsession_create_view),
|
||||
url(r'^sessions/create/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)$',
|
||||
url(r'^sessions/create/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',
|
||||
views.plannedsession_create_view),
|
||||
url(r'^sessions/multiclone/$',views.plannedsession_multiclone_view),
|
||||
url(r'^sessions/multiclone/user/(?P<userid>\d+)/$',
|
||||
@@ -546,47 +546,47 @@ urlpatterns = [
|
||||
name='plannedsession_view'),
|
||||
url(r'^sessions/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.plannedsession_view,
|
||||
name='plannedsession_view'),
|
||||
url(r'^sessions/(?P<pk>\d+)/deleteconfirm$',login_required(
|
||||
url(r'^sessions/(?P<pk>\d+)/deleteconfirm/$',login_required(
|
||||
views.PlannedSessionDelete.as_view())),
|
||||
url(r'^sessions/(?P<pk>\d+)/delete$',login_required(
|
||||
url(r'^sessions/(?P<pk>\d+)/delete/$',login_required(
|
||||
views.PlannedSessionDelete.as_view()),
|
||||
name='plannedsession_delete_view'),
|
||||
url(r'^sessions/manage/session/(?P<initialsession>\d+)/$',
|
||||
views.plannedsessions_manage_view),
|
||||
url(r'^sessions/manage/session/(?P<initialsession>\d+)/user/(?P<userid>\d+)/$',
|
||||
views.plannedsessions_manage_view),
|
||||
url(r'^sessions/manage/?$',
|
||||
url(r'^sessions/manage/?/$',
|
||||
views.plannedsessions_manage_view),
|
||||
url(r'^sessions/manage/user/(?P<userid>\d+)/$',
|
||||
views.plannedsessions_manage_view),
|
||||
url(r'^sessions/coach/$',views.plannedsessions_coach_view),
|
||||
url(r'^sessions/coach/user/\d+/$',views.plannedsessions_coach_view),
|
||||
url(r'^sessions/print/?$',views.plannedsessions_print_view),
|
||||
url(r'^sessions/print/?/$',views.plannedsessions_print_view),
|
||||
url(r'^sessions/print/user/(?P<userid>\d+)/$',views.plannedsessions_print_view),
|
||||
url(r'^sessions/sendcalendar/$',views.plannedsessions_icsemail_view),
|
||||
url(r'^sessions/sendcalendar/user/(?P<userid>\d+)/$',views.plannedsessions_icsemail_view),
|
||||
url(r'^sessions/$',views.plannedsessions_view),
|
||||
url(r'^sessions/user/(?P<userid>\d+)$',views.plannedsessions_view),
|
||||
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',
|
||||
url(r'^sessions/user/(?P<userid>\d+)/$',views.plannedsessions_view),
|
||||
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',
|
||||
views.plannedsessions_view),
|
||||
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)$',
|
||||
url(r'^sessions/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/user/(?P<userid>\d+)/$',
|
||||
views.plannedsessions_view),
|
||||
url(r'^courses/(?P<id>\d+)/edit$',views.course_edit_view,
|
||||
url(r'^courses/(?P<id>\d+)/edit/$',views.course_edit_view,
|
||||
name='course_edit_view'),
|
||||
url(r'^courses/(?P<id>\d+)/delete$',views.course_delete_view),
|
||||
url(r'^courses/(?P<id>\d+)/emailkml$',views.course_kmlemail_view),
|
||||
url(r'^courses/(?P<id>\d+)/replace$',views.course_replace_view),
|
||||
url(r'^courses/(?P<id>\d+)$',views.course_view),
|
||||
url(r'^courses/(?P<id>\d+)/map$',views.course_map_view),
|
||||
url(r'^courses/(?P<id>\d+)/delete/$',views.course_delete_view),
|
||||
url(r'^courses/(?P<id>\d+)/downloadkml/$',views.course_kmldownload_view),
|
||||
url(r'^courses/(?P<id>\d+)/replace/$',views.course_replace_view),
|
||||
url(r'^courses/(?P<id>\d+)/$',views.course_view),
|
||||
url(r'^courses/(?P<id>\d+)/map/$',views.course_map_view),
|
||||
# URLS to be created
|
||||
url(r'^help$',TemplateView.as_view(template_name='help.html'), name='help'),
|
||||
url(r'^help/$',TemplateView.as_view(template_name='help.html'), name='help'),
|
||||
|
||||
]
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns += [
|
||||
url(r'^testreverse/$',views.test_reverse_view),
|
||||
url(r'^c2listug/(?P<page>\d+)$',views.c2listdebug_view),
|
||||
url(r'^c2listug/(?P<page>\d+)/$',views.c2listdebug_view),
|
||||
url(r'^c2listug/$',views.c2listdebug_view),
|
||||
]
|
||||
|
||||
|
||||
171
rowers/views.py
171
rowers/views.py
@@ -1650,7 +1650,7 @@ def start_trial_view(request):
|
||||
|
||||
if r.protrialexpires is not None:
|
||||
messages.error(request,'You do not qualify for a trial')
|
||||
url = '/rowers/promembership'
|
||||
url = '/rowers/paidplans'
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
r.protrialexpires = datetime.date.today()+datetime.timedelta(13)
|
||||
@@ -1677,7 +1677,7 @@ def start_plantrial_view(request):
|
||||
|
||||
if r.plantrialexpires is not None:
|
||||
messages.error(request,'You do not qualify for a trial')
|
||||
url = '/rowers/promembership'
|
||||
url = '/rowers/paidplans'
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
r.plantrialexpires = datetime.date.today()+datetime.timedelta(13)
|
||||
@@ -1951,7 +1951,12 @@ def plannedsessions_icsemail_view(request,userid=0):
|
||||
|
||||
|
||||
response = HttpResponse(cal.to_ical())
|
||||
response['Content-Disposition'] = 'attachment; filename="training_plan_%s.ics"' % request.user.id
|
||||
response['Content-Disposition'] = 'attachment; filename="training_plan_{u}_{d1}_{d2}.ics"'.format(
|
||||
u = request.user.username,
|
||||
d1 = startdate.strftime("%Y%m%d"),
|
||||
d2 = enddate.strftime("%Y%m%d"),
|
||||
)
|
||||
|
||||
response['Content-Type'] = 'application/octet-stream'
|
||||
|
||||
return response
|
||||
@@ -1985,7 +1990,7 @@ def transactions_view(request):
|
||||
})
|
||||
|
||||
@login_required()
|
||||
def course_kmlemail_view(request,id=0):
|
||||
def course_kmldownload_view(request,id=0):
|
||||
r = getrower(request.user)
|
||||
if r.emailbounced:
|
||||
message = "Please check your email address first. Email to this address bounced."
|
||||
@@ -2003,29 +2008,14 @@ def course_kmlemail_view(request,id=0):
|
||||
|
||||
kmlfilename = 'course_{id}.kml'.format(id=id)
|
||||
|
||||
with codecs.open(kmlfilename,'w','utf-8') as fop:
|
||||
fop.write(kmlstring)
|
||||
|
||||
res = myqueue(queuehigh,handle_sendemailkml,
|
||||
r.user.first_name,
|
||||
r.user.last_name,
|
||||
r.user.email,kmlfilename,
|
||||
emailbounced = r.emailbounced
|
||||
)
|
||||
|
||||
|
||||
successmessage = "The KML file was sent to you per email"
|
||||
messages.info(request,successmessage)
|
||||
url = reverse(course_view,
|
||||
kwargs = {
|
||||
'id':str(id),
|
||||
})
|
||||
|
||||
response = HttpResponseRedirect(url)
|
||||
response = HttpResponse(kmlstring)
|
||||
response['Content-Disposition'] = 'attachment; filename="{filename}"'.format(filename=kmlfilename)
|
||||
response['Content-Type'] = 'application/octet-stream'
|
||||
|
||||
return response
|
||||
|
||||
|
||||
|
||||
# Export workout to GPX and send to user's email address
|
||||
@login_required()
|
||||
def workout_gpxemail_view(request,id=0):
|
||||
@@ -2258,7 +2248,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
try:
|
||||
thetoken = strava_open(request.user)
|
||||
except NoTokenError:
|
||||
return HttpResponseRedirect("/rowers/me/stravaauthorize")
|
||||
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
||||
|
||||
if (r.stravatoken == '') or (r.stravatoken is None):
|
||||
s = "Token doesn't exist. Need to authorize"
|
||||
@@ -3524,7 +3514,7 @@ def planrequired_view(request):
|
||||
|
||||
return render(request,'promembership.html')
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def fitnessmetric_view(request,id=0,mode='rower',
|
||||
@@ -3567,7 +3557,7 @@ def fitnessmetric_view(request,id=0,mode='rower',
|
||||
|
||||
|
||||
# Show the EMpower Oarlock generated Stroke Profile
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership/",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_forcecurve_view(request,id=0,workstrokesonly=False):
|
||||
@@ -3702,7 +3692,7 @@ def workout_histo_view(request,id=0):
|
||||
|
||||
|
||||
# Histogram for a date/time range
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def histo(request,theuser=0,
|
||||
@@ -4024,6 +4014,10 @@ def fitness_metric_view(request,mode='rower',days=42):
|
||||
|
||||
# test if not something already done
|
||||
ms = PowerTimeFitnessMetric.objects.filter(user=request.user)
|
||||
if not ms:
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
max_workout_id = max([m.last_workout for m in ms])
|
||||
last_update_date = max([m.date.strftime('%Y-%m-%d') for m in ms])
|
||||
|
||||
@@ -4817,7 +4811,7 @@ def rankings_view2(request,theuser=0,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_update_cp_view(request,id=0):
|
||||
@@ -4846,7 +4840,7 @@ def workout_update_cp_view(request,id=0):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Show ranking distances including predicted paces
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def otwrankings_view(request,theuser=0,
|
||||
@@ -5251,7 +5245,7 @@ def otwcp_toadmin_view(request,theuser=0,
|
||||
return response
|
||||
|
||||
# Show ranking distances including predicted paces
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def oterankings_view(request,theuser=0,
|
||||
@@ -5696,7 +5690,7 @@ def workout_setprivate_view(request,id,
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Joining workout
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workouts_join_view(request):
|
||||
@@ -5742,7 +5736,7 @@ def workouts_join_view(request):
|
||||
url = reverse(workouts_join_select)
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workouts_join_select(request,
|
||||
@@ -6455,7 +6449,7 @@ def multi_compare_view(request,id=0,userid=0):
|
||||
|
||||
|
||||
# Multi Flex Chart with Grouping
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def user_multiflex_select(request,
|
||||
@@ -6661,7 +6655,7 @@ def user_multiflex_select(request,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def multiflex_data(request,userid=0,
|
||||
@@ -6907,7 +6901,7 @@ def multiflex_data(request,userid=0,
|
||||
})
|
||||
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def multiflex_view(request,userid=0,
|
||||
@@ -7074,7 +7068,7 @@ def multiflex_view(request,userid=0,
|
||||
|
||||
|
||||
# Box plots
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def user_boxplot_select(request,
|
||||
@@ -7282,7 +7276,7 @@ def user_boxplot_select(request,
|
||||
'teams':get_my_teams(request.user),
|
||||
})
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def boxplot_view_data(request,userid=0,
|
||||
@@ -7328,6 +7322,12 @@ def boxplot_view_data(request,userid=0,
|
||||
workouts = []
|
||||
|
||||
|
||||
if not ids:
|
||||
return JSONResponse({
|
||||
"script":'',
|
||||
"div":'No data found'
|
||||
})
|
||||
|
||||
for id in ids:
|
||||
try:
|
||||
workouts.append(Workout.objects.get(id=id))
|
||||
@@ -7352,6 +7352,8 @@ def boxplot_view_data(request,userid=0,
|
||||
# prepare data frame
|
||||
datadf,extracols = dataprep.read_cols_df_sql(ids,fieldlist)
|
||||
|
||||
|
||||
|
||||
datadf = dataprep.clean_df_stats(datadf,workstrokesonly=workstrokesonly)
|
||||
|
||||
datadf = dataprep.filter_df(datadf,'spm',spmmin,
|
||||
@@ -7365,6 +7367,7 @@ def boxplot_view_data(request,userid=0,
|
||||
|
||||
datadf.dropna(axis=0,how='any',inplace=True)
|
||||
|
||||
|
||||
datadf['workoutid'].replace(datemapping,inplace=True)
|
||||
datadf.rename(columns={"workoutid":"date"},inplace=True)
|
||||
datadf = datadf.sort_values(['date'])
|
||||
@@ -7389,7 +7392,7 @@ def boxplot_view_data(request,userid=0,
|
||||
"div":div,
|
||||
})
|
||||
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def boxplot_view(request,userid=0,
|
||||
@@ -7400,6 +7403,8 @@ def boxplot_view(request,userid=0,
|
||||
|
||||
if 'options' in request.session:
|
||||
options = request.session['options']
|
||||
else:
|
||||
options = {}
|
||||
|
||||
try:
|
||||
includereststrokes = options['includereststrokes']
|
||||
@@ -7418,6 +7423,7 @@ def boxplot_view(request,userid=0,
|
||||
if userid==0:
|
||||
userid = request.user.id
|
||||
|
||||
|
||||
if request.method == 'POST' and 'workouts' in request.POST:
|
||||
form = WorkoutMultipleCompareForm(request.POST)
|
||||
chartform = BoxPlotChoiceForm(request.POST)
|
||||
@@ -7438,7 +7444,8 @@ def boxplot_view(request,userid=0,
|
||||
request.session['ids'] = ids
|
||||
|
||||
else:
|
||||
return HttpResponse("Form is not valid")
|
||||
url = reverse(user_boxplot_select,kwargs={'userid':userid})
|
||||
return HttpResponseRedirect(url)
|
||||
elif request.method == 'POST' and 'ids' in request.session:
|
||||
chartform = BoxPlotChoiceForm(request.POST)
|
||||
if chartform.is_valid():
|
||||
@@ -7455,13 +7462,15 @@ def boxplot_view(request,userid=0,
|
||||
|
||||
|
||||
else:
|
||||
return HttpResponse("invalid form")
|
||||
url = reverse(user_boxplot_select,kwargs={'userid':userid})
|
||||
return HttpResponseRedirect(url)
|
||||
else:
|
||||
url = reverse(user_boxplot_select,kwargs={'userid':userid})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
div = get_call()
|
||||
|
||||
|
||||
options['spmmin'] = spmmin
|
||||
options['spmmax'] = spmmax
|
||||
options['workmin'] = workmin
|
||||
@@ -7471,6 +7480,7 @@ def boxplot_view(request,userid=0,
|
||||
options['plotfield'] = plotfield
|
||||
options['rankingonly'] = rankingonly
|
||||
|
||||
|
||||
request.session['options'] = options
|
||||
|
||||
r = getrequestrower(request,userid=userid)
|
||||
@@ -7717,6 +7727,7 @@ def workouts_view(request,message='',successmessage='',
|
||||
g_enddate,
|
||||
stack=stack)
|
||||
|
||||
|
||||
messages.info(request,successmessage)
|
||||
messages.error(request,message)
|
||||
|
||||
@@ -7746,7 +7757,7 @@ def workouts_view(request,message='',successmessage='',
|
||||
|
||||
|
||||
# List of workouts to compare a selected workout to
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_comparison_list(request,id=0,message='',successmessage='',
|
||||
@@ -7833,7 +7844,7 @@ def workout_comparison_list(request,id=0,message='',successmessage='',
|
||||
|
||||
|
||||
# List of workouts to compare a selected workout to
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_fusion_list(request,id=0,message='',successmessage='',
|
||||
@@ -8039,7 +8050,7 @@ def workout_view(request,id=0):
|
||||
|
||||
|
||||
# Resets stroke data to raw data (pace)
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_undo_smoothenpace_view(
|
||||
@@ -8079,7 +8090,7 @@ def workout_undo_smoothenpace_view(
|
||||
|
||||
|
||||
# Data smoothing of pace data
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
|
||||
@@ -8133,7 +8144,7 @@ def workout_smoothenpace_view(request,id=0,message="",successmessage=""):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Process CrewNerd Summary CSV and update summary
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
|
||||
@@ -8211,7 +8222,7 @@ def workout_crewnerd_summary_view(request,id=0,message="",successmessage=""):
|
||||
'id':row.id})
|
||||
|
||||
# Get weather for given location and date/time
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Pro plan or higher",
|
||||
redirect_field_name=None)
|
||||
def workout_downloadwind_view(request,id=0,
|
||||
@@ -8280,7 +8291,7 @@ def workout_downloadwind_view(request,id=0,
|
||||
return response
|
||||
|
||||
# Get weather for given location and date/time
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_downloadmetar_view(request,id=0,
|
||||
airportcode=None,
|
||||
message="",successmessage=""):
|
||||
@@ -8348,7 +8359,7 @@ def workout_downloadmetar_view(request,id=0,
|
||||
|
||||
|
||||
# Show form to update wind data
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_wind_view(request,id=0,message="",successmessage=""):
|
||||
id = encoder.decode_hex(id)
|
||||
row = get_workout(id)
|
||||
@@ -8485,7 +8496,7 @@ def workout_wind_view(request,id=0,message="",successmessage=""):
|
||||
|
||||
|
||||
# Show form to update River stream data (for river dwellers)
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_stream_view(request,id=0,message="",successmessage=""):
|
||||
id = encoder.decode_hex(id)
|
||||
row = get_workout(id)
|
||||
@@ -8572,7 +8583,7 @@ def workout_stream_view(request,id=0,message="",successmessage=""):
|
||||
'the_div':div})
|
||||
|
||||
# Form to set average crew weight and boat type, then run power calcs
|
||||
@user_passes_test(ispromember, login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(ispromember, login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def workout_otwsetpower_view(request,id=0,message="",successmessage=""):
|
||||
id = encoder.decode_hex(id)
|
||||
w = get_workout(id)
|
||||
@@ -8885,7 +8896,7 @@ def instroke_chart(request,id=0,metric=''):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Cumulative stats page
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def cumstats(request,theuser=0,
|
||||
startdate=timezone.now()-datetime.timedelta(days=30),
|
||||
enddate=timezone.now(),
|
||||
@@ -10011,16 +10022,14 @@ def workout_flexchart3_view(request,*args,**kwargs):
|
||||
workstrokesonly = not includereststrokes
|
||||
|
||||
flexaxesform = FlexAxesForm(request,request.POST)
|
||||
print request.POST
|
||||
|
||||
if flexaxesform.is_valid():
|
||||
print 'form valid'
|
||||
cd = flexaxesform.cleaned_data
|
||||
xparam = cd['xaxis']
|
||||
yparam1 = cd['yaxis1']
|
||||
yparam2 = cd['yaxis2']
|
||||
else:
|
||||
print flexaxesform.errors
|
||||
pass
|
||||
|
||||
|
||||
if not promember:
|
||||
@@ -12544,7 +12553,7 @@ def workout_upload_view(request,
|
||||
|
||||
|
||||
# This is the main view for processing uploaded files
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_workout_upload_view(request,message="",
|
||||
successmessage="",
|
||||
uploadoptions={
|
||||
@@ -12954,7 +12963,7 @@ def workout_summary_restore_view(request,id,message="",successmessage=""):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
# Split a workout
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_split_view(request,id=id):
|
||||
id = encoder.decode_hex(id)
|
||||
row = get_workout_permitted(request.user,id)
|
||||
@@ -13046,7 +13055,7 @@ def workout_split_view(request,id=id):
|
||||
|
||||
|
||||
# Fuse two workouts
|
||||
@user_passes_test(ispromember,login_url="/rowers/promembership",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
@user_passes_test(ispromember,login_url="/rowers/paidplans",message="This functionality requires a Pro plan or higher",redirect_field_name=None)
|
||||
def workout_fusion_view(request,id1=0,id2=1):
|
||||
id1 = encoder.decode_hex(id1)
|
||||
id2 = encoder.decode_hex(id2)
|
||||
@@ -14795,7 +14804,7 @@ def rower_teams_view(request,message='',successmessage=''):
|
||||
'myinvites':myinvites,
|
||||
})
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def invitation_revoke_view(request,id):
|
||||
res,text = teams.revoke_invite(request.user,id)
|
||||
if res:
|
||||
@@ -14809,7 +14818,7 @@ def invitation_revoke_view(request,id):
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def manager_member_drop_view(request,teamid,userid,
|
||||
message='',successmessage=''):
|
||||
rower = Rower.objects.get(user__id=userid)
|
||||
@@ -14823,7 +14832,7 @@ def manager_member_drop_view(request,teamid,userid,
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def manager_requests_view(request,code=None,message='',successmessage=''):
|
||||
if code:
|
||||
res,text = teams.process_request_code(request.user,code)
|
||||
@@ -14875,7 +14884,7 @@ def request_revoke_view(request,id=0):
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def request_reject_view(request,id=0):
|
||||
res,text = teams.reject_request(request.user,id)
|
||||
|
||||
@@ -14888,7 +14897,7 @@ def request_reject_view(request,id=0):
|
||||
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def invitation_reject_view(request,id=0):
|
||||
res,text = teams.reject_invitation(request.user,id)
|
||||
|
||||
@@ -14924,7 +14933,7 @@ def rower_invitations_view(request,code=None,message='',successmessage=''):
|
||||
})
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_edit_view(request,id=0):
|
||||
try:
|
||||
t = Team.objects.get(id=id)
|
||||
@@ -14988,7 +14997,7 @@ def team_edit_view(request,id=0):
|
||||
'team':t,
|
||||
})
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_create_view(request):
|
||||
if request.method == 'POST':
|
||||
teamcreateform = TeamForm(request.POST)
|
||||
@@ -15031,7 +15040,7 @@ def team_create_view(request):
|
||||
'breadcrumbs':breadcrumbs,
|
||||
})
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_deleteconfirm_view(request,id):
|
||||
r = getrower(request.user)
|
||||
try:
|
||||
@@ -15067,7 +15076,7 @@ def team_deleteconfirm_view(request,id):
|
||||
'active':'nav-teams',
|
||||
})
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_delete_view(request,id):
|
||||
r = getrower(request.user)
|
||||
try:
|
||||
@@ -15083,7 +15092,7 @@ def team_delete_view(request,id):
|
||||
response = HttpResponseRedirect(url)
|
||||
return response
|
||||
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership",redirect_field_name=None)
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans",redirect_field_name=None)
|
||||
def team_members_stats_view(request,id):
|
||||
r = getrower(request.user)
|
||||
try:
|
||||
@@ -15180,7 +15189,7 @@ def agegrouprecordview(request,sex='male',weightcategory='hwt',
|
||||
})
|
||||
|
||||
# Cloning sessions
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership/",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_multiclone_view(
|
||||
@@ -15310,7 +15319,7 @@ def plannedsession_multiclone_view(
|
||||
)
|
||||
|
||||
# Individual user creates training for himself
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership/",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_create_view(request,
|
||||
@@ -15447,7 +15456,7 @@ def plannedsession_create_view(request,
|
||||
'timeperiod':timeperiod,
|
||||
})
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership/",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_multicreate_view(request,
|
||||
@@ -15560,7 +15569,7 @@ def plannedsession_multicreate_view(request,
|
||||
return render(request,'plannedsession_multicreate.html',context)
|
||||
|
||||
# Manager creates sessions for entire team
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership/",
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans/",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_teamcreate_view(request,
|
||||
teamid=0,userid=0):
|
||||
@@ -15727,7 +15736,7 @@ def plannedsession_teamcreate_view(request,
|
||||
})
|
||||
|
||||
# Manager edits sessions for entire team
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/promembership/",
|
||||
@user_passes_test(iscoachmember,login_url="/rowers/paidplans/",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_teamedit_view(request,
|
||||
sessionid=0,userid=0):
|
||||
@@ -15883,7 +15892,7 @@ def plannedsession_teamedit_view(request,
|
||||
'plannedsessions':sps,
|
||||
})
|
||||
|
||||
#@user_passes_test(iscoachmember,login_url="/rowers/promembership/",
|
||||
#@user_passes_test(iscoachmember,login_url="/rowers/paidplans/",
|
||||
# redirect_field_name=None)
|
||||
@login_required()
|
||||
def plannedsessions_coach_view(request,
|
||||
@@ -16332,7 +16341,7 @@ def plannedsessions_manage_view(request,userid=0,
|
||||
|
||||
# Clone an existing planned session
|
||||
# need clarity on cloning behavior time shift
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership/",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_clone_view(request,id=0,userid=0):
|
||||
@@ -16393,7 +16402,7 @@ def plannedsession_clone_view(request,id=0,userid=0):
|
||||
|
||||
|
||||
# Edit an existing planned session
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership/",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans/",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def plannedsession_edit_view(request,id=0,userid=0):
|
||||
@@ -18432,7 +18441,7 @@ def virtualevent_submit_result_view(request,id=0,workoutid=0):
|
||||
'w_form':w_form,
|
||||
})
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def rower_create_trainingplan(request,userid=0):
|
||||
@@ -18536,7 +18545,7 @@ def rower_create_trainingplan(request,userid=0):
|
||||
'targetform':targetform,
|
||||
})
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def rower_delete_trainingtarget(request,id=0):
|
||||
@@ -18556,7 +18565,7 @@ def rower_delete_trainingtarget(request,id=0):
|
||||
return HttpResponseRedirect(url)
|
||||
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def rower_delete_trainingplan(request,id=0):
|
||||
@@ -18869,7 +18878,7 @@ class MacroCycleDelete(DeleteView):
|
||||
return obj
|
||||
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def rower_trainingplan_view(request,
|
||||
@@ -19388,7 +19397,7 @@ def allsundays(startdate,enddate):
|
||||
yield d
|
||||
d += timedelta(days=7)
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def planmesocyclebyweek(request,id=0,userid=0):
|
||||
@@ -19449,7 +19458,7 @@ def allmonths(startdate,enddate):
|
||||
yield d
|
||||
d = datetime.date(d.year+(d.month / 12),((d.month % 12) + 1),1)
|
||||
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/promembership",
|
||||
@user_passes_test(hasplannedsessions,login_url="/rowers/paidplans",
|
||||
message="This functionality requires a Coach or Self-Coach plan",
|
||||
redirect_field_name=None)
|
||||
def planmacrocyclebymonth(request,id=0,userid=0):
|
||||
|
||||
@@ -96,3 +96,4 @@ EMAIL_USE_TLS = CFG['email_use_tls']
|
||||
DEFAULT_FROM_EMAIL = 'info@rowsandall.com'
|
||||
|
||||
SETTINGS_NAME = 'rowsandall_app.settings_dev'
|
||||
|
||||
|
||||
@@ -57,7 +57,7 @@ urlpatterns += [
|
||||
url(r'^admin/', admin.site.urls),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
url(r'^$',rootview),
|
||||
url(r'^getblogs$',rowersviews.get_blog_posts),
|
||||
url(r'^getblogs/$',rowersviews.get_blog_posts),
|
||||
url(r'^login/',auth_views.login, name='login'),
|
||||
url(r'^logout/$',auth_views.logout,
|
||||
{'next_page': '/'},
|
||||
|
||||
@@ -236,7 +236,7 @@
|
||||
{% if user.rower.planexpires|date_dif|ddays < 4 %}
|
||||
<li class="grid_4">
|
||||
<p class="successmessage">
|
||||
You have {{ user.rower.planexpires|date_dif|ddays }} days left of your one year subscription. Please renew on or before {{ user.rower.planexpires }} or your plan will be reset to Basic. Click <a href="/rowers/promembership">here</a> to renew your membership.</p>
|
||||
You have {{ user.rower.planexpires|date_dif|ddays }} days left of your one year subscription. Please renew on or before {{ user.rower.planexpires }} or your plan will be reset to Basic. Click <a href="/rowers/paidplans">here</a> to renew your membership.</p>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
@@ -252,7 +252,7 @@
|
||||
{% if user.rower.rowerplan == 'basic' %}
|
||||
<li class="grid_4">
|
||||
<p class="successmessage">
|
||||
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/promembership">upgrade now?</a>
|
||||
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans">upgrade now?</a>
|
||||
</p>
|
||||
</li>
|
||||
{% endif %}
|
||||
@@ -375,7 +375,7 @@
|
||||
<h1>Paid Plans</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/rowers/promembership">Paid Plans</a>
|
||||
<a href="/rowers/paidplans">Paid Plans</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -254,7 +254,7 @@
|
||||
{% if user.rower.rowerplan == 'basic' %}
|
||||
<li class="grid_5">
|
||||
<p class="successmessage">
|
||||
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/promembership">upgrade now?</a>
|
||||
{{ user.rower.protrialexpires|date_dif|ddays }} days left of your Pro trial - Would you like to <a href="/rowers/paidplans">upgrade now?</a>
|
||||
</p>
|
||||
</li>
|
||||
{% endif %}
|
||||
@@ -347,7 +347,7 @@
|
||||
<h1>Paid Plans</h1>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/rowers/promembership">Paid Plans</a>
|
||||
<a href="/rowers/paidplans">Paid Plans</a>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
Reference in New Issue
Block a user