Merge branch 'release/v9.07'
This commit is contained in:
@@ -13,6 +13,11 @@
|
||||
/htmlcov/
|
||||
.coverage
|
||||
|
||||
# pytest stuff
|
||||
/.pytest_cache/
|
||||
pytest.ini
|
||||
conftest.py
|
||||
|
||||
# CSV files
|
||||
/media/
|
||||
|
||||
|
||||
+3
-3
@@ -30,7 +30,7 @@ app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
|
||||
|
||||
database_url = 'sqlite:///db.sqlite3'
|
||||
|
||||
@app.task(bind=True)
|
||||
def debug_task(self):
|
||||
print('Request: {0!r}'.format(self.request))
|
||||
#@app.task(bind=True)
|
||||
#def debug_task(self):
|
||||
# print('Request: {0!r}'.format(self.request))
|
||||
|
||||
|
||||
+4
-2
@@ -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,
|
||||
|
||||
@@ -9,8 +9,8 @@ from rowers.tasks import (
|
||||
)
|
||||
from django_mailbox.models import Message, MessageAttachment,Mailbox
|
||||
|
||||
workoutmailbox = Mailbox.objects.get(name='workouts')
|
||||
failedmailbox = Mailbox.objects.get(name='Failed')
|
||||
#workoutmailbox = Mailbox.objects.get(name='workouts')
|
||||
#failedmailbox = Mailbox.objects.get(name='Failed')
|
||||
|
||||
|
||||
from rowers.models import User, Rower, RowerForm
|
||||
|
||||
@@ -98,7 +98,7 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False):
|
||||
imagename=imagename
|
||||
)
|
||||
try:
|
||||
if workoutid:
|
||||
if workoutid and not testing:
|
||||
if rower.getemailnotifications and not rower.emailbounced:
|
||||
email_sent = send_confirm(
|
||||
rower.user, title, link,
|
||||
@@ -196,9 +196,11 @@ class Command(BaseCommand):
|
||||
rowers = []
|
||||
for rower in rowers:
|
||||
if extension == 'zip':
|
||||
try:
|
||||
zip_file = zipfile.ZipFile(attachment.document)
|
||||
for id,filename in enumerate(zip_file.namelist()):
|
||||
datafile = zip_file.extract(filename, path='media/')
|
||||
datafile = zip_file.extract(
|
||||
filename, path='media/')
|
||||
if id>0:
|
||||
title = name+' ('+str(id+1)+')'
|
||||
else:
|
||||
@@ -208,6 +210,9 @@ class Command(BaseCommand):
|
||||
rower, datafile, title, uploadoptions,
|
||||
testing=testing
|
||||
)
|
||||
except:
|
||||
print "Bad ZIP file"
|
||||
print attachment.document.name
|
||||
else:
|
||||
# move attachment and make workout
|
||||
if testing:
|
||||
|
||||
@@ -568,6 +568,8 @@ class PaidPlan(models.Model):
|
||||
choices=paymenttypes,
|
||||
)
|
||||
|
||||
active = models.BooleanField(default=True)
|
||||
|
||||
clubsize = models.IntegerField(default=0)
|
||||
|
||||
def __unicode__(self):
|
||||
|
||||
+21
-21
@@ -10,30 +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:
|
||||
try:
|
||||
print 'Could not set plan for ',r.user.username
|
||||
except:
|
||||
pass
|
||||
# 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 != '':
|
||||
|
||||
+4
-4
@@ -6,10 +6,10 @@ from rows import format_pace_tick, format_pace, format_time, format_time_tick
|
||||
|
||||
|
||||
# Formatting the distance tick marks
|
||||
def format_dist_tick(x,pos=None):
|
||||
km = x/1000.
|
||||
template='%6.3f'
|
||||
return template % (km)
|
||||
#def format_dist_tick(x,pos=None):
|
||||
# km = x/1000.
|
||||
# template='%6.3f'
|
||||
# return template % (km)
|
||||
|
||||
|
||||
# Utility to select reasonable y axis range
|
||||
|
||||
@@ -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%">
|
||||
|
||||
@@ -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 %}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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 }}
|
||||
|
||||
@@ -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/>
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
</div>
|
||||
</div>
|
||||
{% 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 }}
|
||||
|
||||
@@ -493,20 +493,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 ws[0].id
|
||||
@@ -518,19 +523,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:
|
||||
|
||||
+14
-14
@@ -1,21 +1,21 @@
|
||||
pkg_mox = None
|
||||
|
||||
|
||||
def setUpPackage():
|
||||
global pkg_mox
|
||||
import urllib
|
||||
import urllib2
|
||||
import mox
|
||||
import requests
|
||||
pkg_mox = mox.Mox()
|
||||
pkg_mox.StubOutWithMock(requests.api.sessions.Session, 'send')
|
||||
pkg_mox.StubOutWithMock(urllib.URLopener, 'open')
|
||||
pkg_mox.StubOutWithMock(urllib2.OpenerDirector, 'open')
|
||||
pkg_mox.ReplayAll()
|
||||
# def setUpPackage():
|
||||
# global pkg_mox
|
||||
# import urllib
|
||||
# import urllib2
|
||||
# import mox
|
||||
# import requests
|
||||
# pkg_mox = mox.Mox()
|
||||
# pkg_mox.StubOutWithMock(requests.api.sessions.Session, 'send')
|
||||
# pkg_mox.StubOutWithMock(urllib.URLopener, 'open')
|
||||
# pkg_mox.StubOutWithMock(urllib2.OpenerDirector, 'open')
|
||||
# pkg_mox.ReplayAll()
|
||||
|
||||
|
||||
def tearDownPackage():
|
||||
pkg_mox.VerifyAll()
|
||||
pkg_mox.UnsetStubs()
|
||||
#def tearDownPackage():
|
||||
# pkg_mox.VerifyAll()
|
||||
# pkg_mox.UnsetStubs()
|
||||
|
||||
from tests import *
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
#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()
|
||||
|
||||
class AjaxTests(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)
|
||||
|
||||
|
||||
self.c = Client()
|
||||
|
||||
def test_toggle_ranking(self):
|
||||
response = self.c.get(
|
||||
'/rowers/workout/1/toggle-ranking/',
|
||||
**{'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'})
|
||||
|
||||
jsondata = json.loads(response.json())
|
||||
self.assertIn('result',jsondata)
|
||||
@@ -0,0 +1,513 @@
|
||||
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 rowingdata import rowingdata, figure
|
||||
|
||||
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()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
def mocked_sqlalchemy(*args, **kwargs):
|
||||
# return object with method
|
||||
|
||||
class MockEngine:
|
||||
def connect(self):
|
||||
return MockConnection()
|
||||
|
||||
def dispose(self):
|
||||
return True
|
||||
|
||||
def raw_connection(self):
|
||||
return True
|
||||
|
||||
class MockConnection:
|
||||
def begin(self):
|
||||
return True
|
||||
|
||||
def execute(self):
|
||||
return True
|
||||
|
||||
def execute(self):
|
||||
return True
|
||||
|
||||
def close(self):
|
||||
return True
|
||||
|
||||
def __exit__(self, *args, **kwargs):
|
||||
return True
|
||||
|
||||
def __enter__(self, *args, **kwargs):
|
||||
return True
|
||||
|
||||
return MockEngine()
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class DjangoTestCase(TestCase, MockTestCase):
|
||||
def _pre_setup(self):
|
||||
MockTestCase.setUp(self)
|
||||
TestCase._pre_setup(self)
|
||||
self.client = Client()
|
||||
|
||||
def _post_teardown(self):
|
||||
TestCase._post_teardown(self)
|
||||
MockTestCase.tearDown(self)
|
||||
# delete_strokedata(1)
|
||||
|
||||
def mocked_tcx_parser(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_strokedata.csv')
|
||||
|
||||
return rowingdata(df=df)
|
||||
|
||||
def mocked_polar_notifications(*args, **kwargs):
|
||||
return []
|
||||
|
||||
|
||||
class mocked_canvas():
|
||||
def print_figure(*args, **kwargs):
|
||||
return True
|
||||
|
||||
import pandas as pd
|
||||
def mocked_read_df_sql(id):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_strokedata.csv')
|
||||
|
||||
return df
|
||||
|
||||
|
||||
def mocked_getsmallrowdata_db(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/colsfromdb.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_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):
|
||||
super(mocked_rowingdata).__init__(*args, **kwargs)
|
||||
|
||||
def get_metersplot_erg(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_timeplot_erg(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_piechart(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_timeplot_otwempower(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_timeplot_otw(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_metersplot_otwempower(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_metersplot_erg2(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_timeplot_erg2(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_time_otwpower(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
def get_power_piechart(self, title):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
|
||||
# to be done add polar mocks (for email processing)
|
||||
def mocked_requests(*args, **kwargs):
|
||||
with open('rowers/tests/testdata/c2jsonworkoutdata.txt','r') as infile:
|
||||
c2workoutdata = json.load(infile)
|
||||
|
||||
with open('rowers/tests/testdata/c2jsonstrokedata.txt','r') as infile:
|
||||
c2strokedata = json.load(infile)
|
||||
|
||||
polar_json = {
|
||||
'available-user-data': []
|
||||
}
|
||||
|
||||
c2workoutlist = json.load(open('rowers/tests/testdata/c2workoutlist.txt'))
|
||||
|
||||
c2uploadjson = {
|
||||
"data": {
|
||||
"id": 339,
|
||||
"user_id": 1,
|
||||
"date": "2015-08-05 13:15:41",
|
||||
"timezone": "Europe/London",
|
||||
"date_utc": "2015-08-05 12:15:41",
|
||||
"distance": 5649,
|
||||
"type": "rower",
|
||||
"time": 8649,
|
||||
"time_formatted": "14:24.9",
|
||||
"workout_type": "JustRow",
|
||||
"source": "ErgData",
|
||||
"weight_class": "H",
|
||||
"verified": True,
|
||||
"ranked": False
|
||||
}
|
||||
}
|
||||
|
||||
stravaworkoutlist = json.load(open('rowers/tests/testdata/stravaworkoutlist.txt'))
|
||||
sporttracksworkoutlist = json.load(open('rowers/tests/testdata/sporttracksworkouts.txt'))
|
||||
|
||||
rkworkoutlistjson = json.load(open('rowers/tests/testdata/rkworkoutslist.txt','r'))
|
||||
uaworkoutlistjson = json.load(open('rowers/tests/testdata/uaworkoutlist.txt','r'))
|
||||
|
||||
stravasummaryjson = json.load(open('rowers/tests/testdata/stravaworkoutsummary.txt','r'))
|
||||
|
||||
stravatimejson = json.load(open('rowers/tests/testdata/stravatimetestdata.txt','r'))
|
||||
stravavelojson = json.load(open('rowers/tests/testdata/stravavelotestdata.txt','r'))
|
||||
|
||||
stravapowerjson = json.load(open('rowers/tests/testdata/stravapowertestdata.txt','r'))
|
||||
|
||||
stravadistancejson = json.load(open('rowers/tests/testdata/stravadistancetestdata.txt','r'))
|
||||
stravalatlongjson = json.load(open('rowers/tests/testdata/stravalatlongtestdata.txt','r'))
|
||||
stravahrjson = json.load(open('rowers/tests/testdata/stravahrtestdata.txt','r'))
|
||||
stravaspmjson = json.load(open('rowers/tests/testdata/stravaspmtestdata.txt','r'))
|
||||
|
||||
uapostworkoutjson = json.load(open('rowers/tests/testdata/uapostworkoutresponse.txt','r'))
|
||||
|
||||
tpuploadresponse = json.load(open('rowers/tests/testdata/tpuploadresponse.txt','r'))
|
||||
|
||||
stravastreamjson = {
|
||||
'time':stravatimejson,
|
||||
'velocity_smooth':stravavelojson,
|
||||
'distance':stravadistancejson,
|
||||
'latlng':stravalatlongjson,
|
||||
'heartrate':stravahrjson,
|
||||
'cadence':stravaspmjson,
|
||||
'power':stravapowerjson,
|
||||
}
|
||||
|
||||
ststrokesjson = json.load(open('rowers/tests/testdata/sporttracksstrokedata.txt','r'))
|
||||
|
||||
rkstrokesjson = json.load(open('rowers/tests/testdata/rkstrokes.txt','r'))
|
||||
|
||||
uastrokesjson = json.load(open('rowers/tests/testdata/uastrokes.txt','r'))
|
||||
uauserjson = json.load(open('rowers/tests/testdata/uauser.txt','r'))
|
||||
|
||||
class MockResponse:
|
||||
def __init__(self, json_data, status_code):
|
||||
self.json_data = json_data
|
||||
self.status_code = status_code
|
||||
|
||||
def json(self):
|
||||
return self.json_data
|
||||
|
||||
|
||||
class MockHeaderResponse:
|
||||
def __init__(self, header_data, status_code):
|
||||
self.headers = header_data
|
||||
self.status_code = status_code
|
||||
|
||||
class MockSession:
|
||||
def send(self,prepped):
|
||||
# prepped.url
|
||||
# prepped.body (post data)
|
||||
# prepped.headers
|
||||
# prepped.method
|
||||
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
if not args:
|
||||
return MockSession()
|
||||
|
||||
polartester = re.compile('.*?polaraccesslink\.com')
|
||||
c2tester = re.compile('.*?log\.concept2\.com')
|
||||
stravatester = re.compile('.*?strava\.com')
|
||||
sttester = re.compile('.*?sporttracks\.mobi')
|
||||
rktester = re.compile('.*?runkeeper\.com')
|
||||
uatester = re.compile('.*?mapmyfitness\.com')
|
||||
tptester = re.compile('.*?trainingpeaks\.com')
|
||||
|
||||
c2importregex = '.*?concept2.com\/api\/users\/me\/results\/\d+'
|
||||
c2importtester = re.compile(c2importregex)
|
||||
|
||||
c2uploadregex = '.*?concept2.com\/api\/users\/\d+\/results$'
|
||||
c2uploadtester = re.compile(c2uploadregex)
|
||||
|
||||
c2strokesregex = '.*?concept2.com\/api\/users\/me\/results\/\d+\/strokes'
|
||||
c2strokestester = re.compile(c2strokesregex)
|
||||
|
||||
c2workoutlistregex = '.*?concept2\.com\/api\/users\/me\/results\?page=\d'
|
||||
c2workoutlisttester = re.compile(c2workoutlistregex)
|
||||
|
||||
stravaworkoutlistregex = '.*?strava\.com\/api\/v3\/athlete\/activities'
|
||||
stravaworkoutlisttester = re.compile(stravaworkoutlistregex)
|
||||
|
||||
stravastreamregex = '.*?strava\.com\/api\/v3\/activities\/\d+\/streams\/(\w.*?)\?'
|
||||
stravastreamtester = re.compile(stravastreamregex)
|
||||
|
||||
stravasummaryregex = '.*?strava\.com\/api\/v3\/activities\/\d+$'
|
||||
stravasummarytester = re.compile(stravasummaryregex)
|
||||
|
||||
stuploadregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities.json$'
|
||||
stuploadtester = re.compile(stuploadregex)
|
||||
|
||||
stworkoutlistregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities$'
|
||||
stworkoutlisttester = re.compile(stworkoutlistregex)
|
||||
|
||||
ststrokesregex = '.*?sporttracks\.mobi\/api\/v2\/fitnessActivities/\d+$'
|
||||
ststrokestester = re.compile(ststrokesregex)
|
||||
|
||||
rkuploadregex = '.*?api\.runkeeper\.com\/fitnessActivities$'
|
||||
rkuploadtester = re.compile(rkuploadregex)
|
||||
rkuserregex = '.*?api\.runkeeper\.com\/user$'
|
||||
rkusertester = re.compile(rkuserregex)
|
||||
rkstrokesregex = '.*?api\.runkeeper\.com\/fitnessActivities/\d+$'
|
||||
rkstrokestester = re.compile(rkstrokesregex)
|
||||
|
||||
uaapiregex = '.*?api\.ua\.com'
|
||||
uaapitester = re.compile(uaapiregex)
|
||||
|
||||
uauploadregex = '.*?api\.ua\.com\/v7.1\/workout\/$'
|
||||
uauploadtester = re.compile(uauploadregex)
|
||||
|
||||
uastrokesregex = '.*?api\.ua\.com\/v7.1\/workout\/\d+'
|
||||
uastrokestester = re.compile(uastrokesregex)
|
||||
|
||||
ualistregex = '.*?api\.ua\.com\/v7.1\/workout\/\?user'
|
||||
ualisttester = re.compile(ualistregex)
|
||||
|
||||
uauserregex = '.*?api\.ua\.com\/v7.1\/user\/self\/'
|
||||
uausertester = re.compile(uauserregex)
|
||||
|
||||
tpuploadregex = '.*?trainingpeaks\.com\/v1\/file'
|
||||
tpuploadtester = re.compile(tpuploadregex)
|
||||
|
||||
if polartester.match(args[0]):
|
||||
json_data = polar_json
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
if tptester.match(args[0]):
|
||||
if 'token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
elif tpuploadtester.match(args[0]):
|
||||
return MockResponse(tpuploadresponse,200)
|
||||
|
||||
if uaapitester.match(args[0]):
|
||||
if 'access_token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
elif uauploadtester.match(args[0]):
|
||||
if 'data' in kwargs:
|
||||
return MockResponse(uapostworkoutjson,200)
|
||||
elif uastrokestester.match(args[0]):
|
||||
return MockResponse(uastrokesjson,200)
|
||||
elif ualisttester.match(args[0]):
|
||||
return MockResponse(uaworkoutlistjson,200)
|
||||
elif uausertester.match(args[0]):
|
||||
return MockResponse(uauserjson,200)
|
||||
|
||||
|
||||
if uatester.match(args[0]):
|
||||
if 'access_token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
if rktester.match(args[0]):
|
||||
if 'token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
elif rkuploadtester.match(args[0]):
|
||||
if 'data' in kwargs:
|
||||
# post
|
||||
header_data = {
|
||||
'Location': '/fitnessActivities/12'
|
||||
}
|
||||
return MockHeaderResponse(header_data,200)
|
||||
else:
|
||||
json_data = rkworkoutlistjson
|
||||
return MockResponse(json_data,200)
|
||||
elif rkusertester.match(args[0]):
|
||||
json_data = {
|
||||
"userID": 1234567890,
|
||||
"profile": "/profile",
|
||||
"settings": "/settings",
|
||||
"fitness_activities": "/fitnessActivities",
|
||||
"strength_training_activities": "/strengthTrainingActivities",
|
||||
"background_activities": "/backgroundActivities",
|
||||
"sleep": "/sleep",
|
||||
"nutrition": "/nutrition",
|
||||
"weight": "/weight",
|
||||
"general_measurements": "/generalMeasurements",
|
||||
"diabetes": "/diabetes",
|
||||
"records": "/records",
|
||||
"team": "/team"
|
||||
}
|
||||
return MockResponse(json_data, 200)
|
||||
elif rkstrokestester.match(args[0]):
|
||||
return MockResponse(rkstrokesjson,200)
|
||||
|
||||
if sttester.match(args[0]):
|
||||
if 'oauth2/token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
if ststrokestester.match(args[0]):
|
||||
return MockResponse(ststrokesjson,200)
|
||||
if stuploadtester.match(args[0]):
|
||||
json_data = {
|
||||
"uris": [
|
||||
"https://api.sporttracks.mobi/api/v2/fitnessActivities/123456.json"
|
||||
]
|
||||
}
|
||||
return MockResponse(json_data, 200)
|
||||
if stworkoutlisttester.match(args[0]):
|
||||
return MockResponse(sporttracksworkoutlist,200)
|
||||
|
||||
|
||||
if stravatester.match(args[0]):
|
||||
if stravaworkoutlisttester.match(args[0]):
|
||||
return MockResponse(stravaworkoutlist,200)
|
||||
if stravastreamtester.match(args[0]):
|
||||
metric = stravastreamtester.match(args[0]).group(1)
|
||||
json_data = stravastreamjson[metric]
|
||||
return MockResponse(json_data,200)
|
||||
elif stravasummarytester.match(args[0]):
|
||||
return MockResponse(stravasummaryjson,200)
|
||||
elif 'token' in args[0]:
|
||||
json_data = {
|
||||
"token_type": "Bearer",
|
||||
"access_token": "987654321234567898765432123456789",
|
||||
"refresh_token": "1234567898765432112345678987654321",
|
||||
"expires_at": 1531385304
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
if c2tester.match(args[0]):
|
||||
if c2uploadtester.match(args[0]):
|
||||
return MockResponse(c2uploadjson,201)
|
||||
if c2strokestester.match(args[0]):
|
||||
return MockResponse(c2strokedata,200)
|
||||
elif c2importtester.match(args[0]):
|
||||
return MockResponse(c2workoutdata,200)
|
||||
elif c2workoutlisttester.match(args[0]):
|
||||
return MockResponse(c2workoutlist,200)
|
||||
elif 'access_token' in args[0]:
|
||||
json_data = {
|
||||
'access_token': 'TA3n1vrNjuQJWw0TdCDHnjSmrjIPULhTlejMIWqq',
|
||||
'expires_in': 604800,
|
||||
'refresh_token': 'jHJhFzCfOOKB8oyiayubhLAlxaMkG3ruC1E8YxaR'
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
elif 'users/me' in args[0]:
|
||||
json_data = {
|
||||
'data': {
|
||||
'username': 'john',
|
||||
'id': 1234,
|
||||
}
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
elif 'results' in args[0]:
|
||||
json_data = {
|
||||
'data': {
|
||||
'id': 1223,
|
||||
}
|
||||
}
|
||||
else:
|
||||
return MockResponse(c2workoutdata,200)
|
||||
|
||||
return MockResponse(None,404)
|
||||
@@ -0,0 +1,47 @@
|
||||
#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
|
||||
import datetime
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from rowers.models import User,Rower
|
||||
|
||||
@pytest.mark.django_db
|
||||
class AdminTests(TestCase):
|
||||
def setUp(self):
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
r = Rower.objects.create(user=u)
|
||||
my_admin = User.objects.create_superuser('myuser',
|
||||
'myemail@test.com',
|
||||
'apensstaart')
|
||||
|
||||
self.c = Client()
|
||||
self.c.login(username='myuser',password='apensstaart')
|
||||
|
||||
def test_admin(self):
|
||||
response = self.c.get('/admin',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
response = self.c.get('/admin/auth/user/',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
response = self.c.get('/admin/auth/user/77/change/',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -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, 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)
|
||||
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 django.contrib.sessions.middleware import SessionMiddleware
|
||||
|
||||
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
|
||||
|
||||
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 ModelObjectsTest(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_compare(self, mocked_sqlalchemy,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
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)
|
||||
|
||||
# request = self.factory.post('/rowers/multi-compare/')
|
||||
# request.user = self.u
|
||||
# request.POST = form_data
|
||||
|
||||
# SessionMiddleware().process_request(request)
|
||||
|
||||
# request.session['ids'] = []
|
||||
|
||||
# response = multi_compare_view(request)
|
||||
|
||||
# self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.post('/rowers/multi-compare/',form_data)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
@@ -0,0 +1,820 @@
|
||||
#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, modify_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
|
||||
|
||||
import rowers
|
||||
|
||||
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()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
@pytest.mark.django_db
|
||||
class C2Objects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
self.r.c2token = '12'
|
||||
self.r.c2refreshtoken = 'ab'
|
||||
self.r.tokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||
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.c2stuff.Session', side_effect=mocked_requests)
|
||||
def test_c2_callback(self, mock_Session):
|
||||
response = self.c.get('/call_back?code=dsdoij232s',follow=True)
|
||||
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.c2stuff.Session', side_effect=mocked_requests)
|
||||
def test_c2_token_refresh(self, mock_Session):
|
||||
response = self.c.get('/rowers/me/c2refresh/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
def test_c2_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/c2uploadw/')
|
||||
|
||||
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.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
def test_c2_list(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/c2list',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_c2_import(self, mock_get, mocked_sqlalchemy):
|
||||
|
||||
response = self.c.get('/rowers/workout/c2import/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_strokedata(self, mocked_sqlalchemy):
|
||||
with open('rowers/tests/testdata/c2stroketestdata.txt','r') as infile:
|
||||
res = json.load(infile)
|
||||
|
||||
strokedata = pd.DataFrame.from_dict(res['data'])
|
||||
|
||||
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
||||
res = json.load(infile)
|
||||
|
||||
data = res['data']
|
||||
|
||||
from rowers.views import add_workout_from_strokedata
|
||||
|
||||
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_strokedatanohr(self, mocked_sqlalchemy):
|
||||
with open('rowers/tests/testdata/c2strokedatanohr.txt','r') as infile:
|
||||
res = json.load(infile)
|
||||
|
||||
strokedata = pd.DataFrame.from_dict(res['data'])
|
||||
|
||||
with open('rowers/tests/testdata/c2testdata.txt','r') as infile:
|
||||
res = json.load(infile)
|
||||
|
||||
data = res['data']
|
||||
|
||||
from rowers.views import add_workout_from_strokedata
|
||||
|
||||
|
||||
res = add_workout_from_strokedata(self.u,1,data,strokedata,source='c2')
|
||||
|
||||
class C2ObjectsTokenExpired(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
self.r.c2token = '12'
|
||||
self.r.c2refreshtoken = 'ab'
|
||||
self.r.tokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
||||
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.c2stuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.c2stuff.Session',side_effect=mocked_requests)
|
||||
def test_c2_list(self, mock_get, mock_post, mock_Session):
|
||||
response = self.c.get('/rowers/workout/c2list',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.c2stuff.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_c2_import(self, mock_get, mocked_sqlalchemy):
|
||||
|
||||
response = self.c.get('/rowers/workout/c2import/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class StravaObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
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):
|
||||
response = self.c.get('/rowers/workout/stravaimport/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.utils.requests.get', side_effect=mocked_requests)
|
||||
@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/2/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
|
||||
class STObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
self.r.sporttrackstoken = '12'
|
||||
self.r.sporttracksrefreshtoken = '12'
|
||||
self.r.sporttrackstokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||
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.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
||||
def test_sporttracks_callback(self, mock_post):
|
||||
response = self.c.get('/sporttracks_callback?code=dsdoij232s',follow=True)
|
||||
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
||||
def test_sporttracks_token_refresh(self, mock_post):
|
||||
response = self.c.get('/rowers/me/sporttracksrefresh/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.sporttracksstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.sporttracksstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_sporttracks_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/sporttracksuploadw/')
|
||||
|
||||
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.sporttracksstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_sporttracks_list(self, mock_get):
|
||||
response = self.c.get('/rowers/workout/sporttracksimport',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.imports.requests.get', side_effect=mocked_requests)
|
||||
def test_sporttracks_import(self, mock_get):
|
||||
|
||||
response = self.c.get('/rowers/workout/sporttracksimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_strokedata(self, mocked_sqlalchemy):
|
||||
with open('rowers/tests/testdata/sporttrackstestdata.txt','r') as infile:
|
||||
data = json.load(infile)
|
||||
|
||||
from rowers.sporttracksstuff import add_workout_from_data
|
||||
|
||||
res = add_workout_from_data(self.u,1,data,data)
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_strokedatanohr(self, mocked_sqlalchemy):
|
||||
with open('rowers/tests/testdata/sporttrackstestnohr.txt','r') as infile:
|
||||
data = json.load(infile)
|
||||
|
||||
from rowers.sporttracksstuff import add_workout_from_data
|
||||
|
||||
|
||||
|
||||
res = add_workout_from_data(self.u,1,data,data)
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class RunKeeperObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
self.r.runkeepertoken = '12'
|
||||
|
||||
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.runkeeperstuff.requests.post', side_effect=mocked_requests)
|
||||
def test_runkeeper_callback(self, mock_post):
|
||||
response = self.c.get('/runkeeper_callback?code=dsdoij232s',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.runkeeperstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.runkeeperstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_runkeeper_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/runkeeperuploadw/')
|
||||
|
||||
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.runkeeperstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_runkeeper_list(self, mock_get):
|
||||
response = self.c.get('/rowers/workout/runkeeperimport',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.imports.requests.get', side_effect=mocked_requests)
|
||||
def test_runkeeper_import(self, mock_get):
|
||||
|
||||
response = self.c.get('/rowers/workout/runkeeperimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class UAObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
self.r.underarmourtoken = '12'
|
||||
self.r.underarmourrefreshtoken = '12'
|
||||
self.r.underarmourtokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||
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.imports.requests.post', side_effect=mocked_requests)
|
||||
def test_underarmour_callback(self, mock_post):
|
||||
response = self.c.get('/underarmour_callback?code=dsdoij232s',follow=True)
|
||||
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.underarmourstuff.requests.post', side_effect=mocked_requests)
|
||||
def test_underarmour_token_refresh(self, mock_post):
|
||||
response = self.c.get('/rowers/me/underarmourrefresh/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.underarmourstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.underarmourstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_underarmour_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/underarmouruploadw/')
|
||||
|
||||
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.underarmourstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_underarmour_list(self, mock_get):
|
||||
response = self.c.get('/rowers/workout/underarmourimport',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.imports.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
def test_underarmour_import(self, mock_get, mocked_sqlalchemy):
|
||||
|
||||
response = self.c.get('/rowers/workout/underarmourimport/12/',follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/workout/2/edit/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class TPObjects(DjangoTestCase):
|
||||
def setUp(self):
|
||||
self.c = Client()
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.u.first_name = 'John'
|
||||
self.u.last_name = 'Sander'
|
||||
self.u.save()
|
||||
self.r = Rower.objects.create(user=self.u,gdproptin=True,
|
||||
gdproptindate=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
self.r.tptoken = '12'
|
||||
self.r.tprefreshtoken = '12'
|
||||
self.r.tptokenexpirydate = datetime.datetime.now()+datetime.timedelta(days=1)
|
||||
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.imports.requests.post', side_effect=mocked_requests)
|
||||
def test_tp_callback(self, mock_post):
|
||||
response = self.c.get('/tp_callback?code=dsdoij232s',follow=True)
|
||||
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
||||
def test_tp_token_refresh(self, mock_post):
|
||||
response = self.c.get('/rowers/me/tprefresh/',follow=True)
|
||||
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
|
||||
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.tpstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_tp_upload(self, mock_get, mock_post):
|
||||
response = self.c.get('/rowers/workout/1/tpuploadw/')
|
||||
|
||||
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)
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class AutoExportTests(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()
|
||||
)
|
||||
|
||||
r.c2_auto_export = True
|
||||
r.sporttracks_auto_export = True
|
||||
r.mapmyfitness_auto_export = True
|
||||
r.trainingpeaks_auto_export = True
|
||||
|
||||
r.save()
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||
workoutsbox.save()
|
||||
failbox = Mailbox.objects.create(name='Failed')
|
||||
failbox.save()
|
||||
|
||||
filename = 'testdata.csv'
|
||||
|
||||
m = Message(mailbox=workoutsbox,
|
||||
from_header = u.email,
|
||||
subject = filename,
|
||||
body="""
|
||||
---
|
||||
workouttype: water
|
||||
boattype: 2x
|
||||
...
|
||||
""")
|
||||
m.save()
|
||||
a2 = 'media/mailbox_attachments/'+filename
|
||||
copyfile('rowers/tests/testdata/'+filename,a2)
|
||||
a = MessageAttachment(message=m,document=a2[6:])
|
||||
a.save()
|
||||
|
||||
def tearDown(self):
|
||||
for filename in os.listdir('media/mailbox_attachments'):
|
||||
path = os.path.join('media/mailbox_attachments/',filename)
|
||||
if not os.path.isdir(path):
|
||||
try:
|
||||
os.remove(path)
|
||||
except WindowsError:
|
||||
pass
|
||||
|
||||
@patch('rowers.tpstuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.tpstuff.requests.get', side_effect=mocked_requests)
|
||||
def test_emailprocessing(self, mock_post, mock_get):
|
||||
out = StringIO()
|
||||
call_command('processemail', stdout=out, testing=True)
|
||||
self.assertIn('Successfully processed email attachments',out.getvalue())
|
||||
@@ -0,0 +1,48 @@
|
||||
from django.test import TestCase
|
||||
from rowers.models import *
|
||||
|
||||
class FormTests(TestCase):
|
||||
def setUp(self):
|
||||
self.u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
r = Rower.objects.create(user=self.u)
|
||||
|
||||
|
||||
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.u.save()
|
||||
|
||||
self.r = Rower.objects.create(user=self.u)
|
||||
|
||||
def create_team(self):
|
||||
return Team.objects.create(
|
||||
name = 'test team',
|
||||
manager = self.u,
|
||||
)
|
||||
|
||||
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')
|
||||
@@ -0,0 +1,301 @@
|
||||
#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 URLTests(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'
|
||||
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)
|
||||
|
||||
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),
|
||||
}
|
||||
|
||||
urlstotest = [
|
||||
'/rowers/400/',
|
||||
'/rowers/403/',
|
||||
'/rowers/404/',
|
||||
'/rowers/500/',
|
||||
'/rowers/502/',
|
||||
'/rowers/1/list-workouts/',
|
||||
'/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/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/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/email/',
|
||||
'/rowers/email/thankyou/',
|
||||
'/rowers/fitness-progress/',
|
||||
'/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/user/1/',
|
||||
'/rowers/flexalldata/',
|
||||
'/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/jobs-status/',
|
||||
'/rowers/laboratory/',
|
||||
'/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/user/1/',
|
||||
'/rowers/list-workouts/ranking/',
|
||||
'/rowers/list-workouts/user/1/',
|
||||
'/rowers/me/calcdps/',
|
||||
'/rowers/me/edit/',
|
||||
'/rowers/me/edit/user/1/',
|
||||
'/rowers/me/exportsettings/',
|
||||
'/rowers/me/exportsettings/user/1/',
|
||||
'/rowers/me/favoritecharts/',
|
||||
'/rowers/me/favoritecharts/user/1/',
|
||||
'/rowers/me/invitation/',
|
||||
'/rowers/me/preferences/',
|
||||
'/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/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-bests2/',
|
||||
'/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/user/1/',
|
||||
'/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/register/thankyou/',
|
||||
'/rowers/sessions/',
|
||||
'/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/manage/',
|
||||
'/rowers/sessions/manage/user/1/',
|
||||
'/rowers/sessions/multiclone/',
|
||||
'/rowers/sessions/multiclone/user/1/',
|
||||
'/rowers/sessions/multicreate/',
|
||||
'/rowers/sessions/multicreate/user/1/',
|
||||
'/rowers/sessions/print/',
|
||||
'/rowers/sessions/print/user/1/',
|
||||
'/rowers/sessions/teamcreate/',
|
||||
'/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/1/',
|
||||
'/rowers/workout/1/adddistanceplot/',
|
||||
'/rowers/workout/1/adddistanceplot2/',
|
||||
'/rowers/workout/1/addotwpowerplot/',
|
||||
'/rowers/workout/1/addpiechart/',
|
||||
'/rowers/workout/1/addpowerpiechart/',
|
||||
'/rowers/workout/1/addstatic/',
|
||||
'/rowers/workout/1/addstatic/3/',
|
||||
'/rowers/workout/1/addtimeplot/',
|
||||
'/rowers/workout/1/addtimeplot2/',
|
||||
'/rowers/workout/1/comment/',
|
||||
'/rowers/workout/1/darkskywind/',
|
||||
'/rowers/workout/1/data/',
|
||||
'/rowers/workout/1/edit/',
|
||||
'/rowers/workout/1/editintervals/',
|
||||
'/rowers/workout/1/flexchart/',
|
||||
'/rowers/workout/1/forcecurve/',
|
||||
'/rowers/workout/1/get-testscript/',
|
||||
'/rowers/workout/1/get-thumbnails/',
|
||||
'/rowers/workout/1/histo/',
|
||||
'/rowers/workout/1/image/',
|
||||
'/rowers/workout/1/instroke/',
|
||||
'/rowers/workout/1/interactiveotwplot/',
|
||||
'/rowers/workout/1/map/',
|
||||
'/rowers/workout/1/otwsetpower/',
|
||||
'/rowers/workout/1/recalcsummary/',
|
||||
'/rowers/workout/1/restore/',
|
||||
'/rowers/workout/1/smoothenpace/',
|
||||
'/rowers/workout/1/split/',
|
||||
'/rowers/workout/1/stats/',
|
||||
'/rowers/workout/1/stream/',
|
||||
'/rowers/workout/1/task/',
|
||||
'/rowers/workout/1/test_strokedata/',
|
||||
'/rowers/workout/1/toggle-ranking/',
|
||||
'/rowers/workout/1/undosmoothenpace/',
|
||||
'/rowers/workout/1/unsubscribe/',
|
||||
'/rowers/workout/1/updatecp/',
|
||||
'/rowers/workout/1/view/',
|
||||
'/rowers/workout/1/wind/',
|
||||
'/rowers/workout/1/workflow/',
|
||||
'/rowers/workout/compare/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/fusion/1/',
|
||||
'/rowers/workout/fusion/1/2016-01-01/2016-12-31/',
|
||||
'/rowers/workout/upload/',
|
||||
'/rowers/workout/upload/team/',
|
||||
'/rowers/workouts-join/',
|
||||
'/rowers/workouts-join-select/',
|
||||
'/rowers/workouts-join-select/2016-01-01/2016-12-31/',
|
||||
]
|
||||
|
||||
# urlstotest = ['/rowers/createplan/user/1/']
|
||||
|
||||
lijst = []
|
||||
for url in urlstotest:
|
||||
lijst.append(
|
||||
(url,200)
|
||||
)
|
||||
|
||||
@parameterized.expand(lijst)
|
||||
@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)
|
||||
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
#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
|
||||
import datetime
|
||||
from django.utils import timezone
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
import rowers.dataprep as dataprep
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
|
||||
from rowers.models import User,Rower, Workout
|
||||
|
||||
class UserMiddleWareTest(TestCase):
|
||||
def setUp(self):
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
self.r = Rower.objects.create(user=u)
|
||||
|
||||
self.c = Client()
|
||||
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
|
||||
)
|
||||
|
||||
|
||||
def test_middleware(self):
|
||||
response = self.c.get('/rowers/list-workouts',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
class UserTestsNoRower(TestCase):
|
||||
def setUp(self):
|
||||
u = User.objects.create_user('john',
|
||||
'sander@ds.ds',
|
||||
'koeinsloot')
|
||||
|
||||
self.c = Client()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
|
||||
|
||||
def test_user(self):
|
||||
response = self.c.get('/rowers/list-workouts',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@@ -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 redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from rowers.tests.test_imports import mocked_requests
|
||||
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import mocked_sqlalchemy
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class UploadTests(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(),
|
||||
getemailnotifications = False,
|
||||
)
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||
workoutsbox.save()
|
||||
failbox = Mailbox.objects.create(name='Failed')
|
||||
failbox.save()
|
||||
m = Message(mailbox=workoutsbox,
|
||||
from_header = u.email,
|
||||
subject = "3x(5min/2min)/r2 \r2",
|
||||
body = """
|
||||
workout run
|
||||
""")
|
||||
m.save()
|
||||
a2 = 'media/mailbox_attachments/colin2.csv'
|
||||
copyfile('rowers/tests/testdata/emails/colin.csv',a2)
|
||||
a = MessageAttachment(message=m,document=a2[6:])
|
||||
a.save()
|
||||
|
||||
def tearDown(self):
|
||||
for filename in os.listdir('media/mailbox_attachments'):
|
||||
path = os.path.join('media/mailbox_attachments/',filename)
|
||||
if not os.path.isdir(path):
|
||||
try:
|
||||
os.remove(path)
|
||||
except (IOError,WindowsError):
|
||||
pass
|
||||
|
||||
@patch('requests.get', side_effect=mocked_requests)
|
||||
def test_email_workouttype(self, mock_get):
|
||||
out = StringIO()
|
||||
call_command('processemail', stdout=out, testing=True)
|
||||
w = Workout.objects.get(id=1)
|
||||
self.assertEqual(w.workouttype,'Run')
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class EmailTests(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()
|
||||
)
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
workoutsbox = Mailbox.objects.create(name='workouts')
|
||||
workoutsbox.save()
|
||||
failbox = Mailbox.objects.create(name='Failed')
|
||||
failbox.save()
|
||||
|
||||
for filename in os.listdir(u'rowers/tests/testdata/emails'):
|
||||
m = Message(mailbox=workoutsbox,
|
||||
from_header = u.email,
|
||||
subject = filename,
|
||||
body="""
|
||||
---
|
||||
workouttype: water
|
||||
boattype: 4x
|
||||
...
|
||||
""")
|
||||
m.save()
|
||||
a2 = 'media/mailbox_attachments/'+filename
|
||||
copyfile(u'rowers/tests/testdata/emails/'+filename,a2)
|
||||
a = MessageAttachment(message=m,document=a2[6:])
|
||||
a.save()
|
||||
|
||||
m = Message(mailbox=workoutsbox,
|
||||
from_header = u.email,
|
||||
subject = "3x(5min/2min)/r2 \r2",
|
||||
body = """
|
||||
workout water
|
||||
""")
|
||||
m.save()
|
||||
a2 = 'media/mailbox_attachments/colin2.csv'
|
||||
copyfile('rowers/tests/testdata/emails/colin.csv',a2)
|
||||
a = MessageAttachment(message=m,document=a2[6:])
|
||||
a.save()
|
||||
|
||||
|
||||
def tearDown(self):
|
||||
for filename in os.listdir('media/mailbox_attachments'):
|
||||
path = os.path.join('media/mailbox_attachments/',filename)
|
||||
if not os.path.isdir(path):
|
||||
try:
|
||||
os.remove(path)
|
||||
except (IOError,WindowsError):
|
||||
pass
|
||||
|
||||
@patch('requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.polarstuff.get_polar_notifications')
|
||||
def test_emailprocessing(
|
||||
self, mock_get, mocked_sqlalchemy,mocked_polar_notifications):
|
||||
out = StringIO()
|
||||
call_command('processemail', stdout=out,testing=True)
|
||||
self.assertIn('Successfully processed email attachments',out.getvalue())
|
||||
|
||||
Vendored
+1399
File diff suppressed because it is too large
Load Diff
+192
@@ -0,0 +1,192 @@
|
||||
,id,time,hr,pace,spm,cumdist,ftime,fpace,driveenergy,power,averageforce,drivelength,peakforce,forceratio,distance,drivespeed,workoutid,equivergpower,ergpace,fergpace,fnowindpace,hr_an,hr_at,hr_bottom,hr_max,hr_tr,hr_ut1,hr_ut2,nowindpace,x_right,workoutstate,catch,finish,peakforceangle,wash,slip,rhythm,effectiveangle,totalangle,efficiency,distanceperstroke,velo
|
||||
0,39799136,0.0,126.976190476,267517.544209,1.33333333333,5.4,05:50.0,04:27.5,88.1806760867,19.35721935,102.30906,0.826870748299,209.06634,0.499922562048,5.4,0.85119047619,3252,50.0,191293.118277,03:11.2,04:27.5,0,0,0,0,0,127,0,267517.544209,3.5326e+11,4,0.0,0.0,0.0,0.0,0.0,37.7952755906,0.0,0.0,94.4426720529,84.1066333294,1.86903629621
|
||||
1,39799137,3240.00000954,127.095238095,230263.518558,15.5714285714,13.1,00:03.2,03:50.2,220.103927167,25.6355755264,188.604528,1.21267573696,299.810028,0.600977358387,13.1,0.8736913205,3252,50.0,191293.118277,03:11.2,03:50.2,0,0,0,0,0,127,0,230263.518558,6500000000.0,4,0.0,0.0,0.0,0.0,0.0,44.6202531646,0.0,0.0,111.827743719,8.36695937183,2.17142517031
|
||||
2,39799138,6150.00009537,127.880952381,201258.643579,21.4285714286,21.0,00:06.1,03:21.2,273.846587402,44.6485827564,195.276858,1.36636621315,310.485756,0.641492073477,21.0,1.29492362983,3252,50.0,191293.118277,03:11.2,03:21.2,0,0,0,0,0,128,0,201258.643579,9020000000.0,4,0.0,0.0,0.0,0.0,0.0,37.7224199288,0.0,0.0,96.1605065241,6.95622297311,2.48436534754
|
||||
3,39799139,9269.99998093,129.0,180582.4977,21.9047619048,30.3,00:09.2,03:00.5,278.525981193,64.2054260988,201.059544,1.37036281179,322.49595,0.643049698939,30.3,1.38929798724,3252,50.0,191293.118277,03:11.2,03:00.5,0,0,0,0,0,129,0,180582.4977,12420000000.0,4,0.0,0.0,0.0,0.0,0.0,34.1549295775,0.0,0.0,92.5698041753,7.58415258861,2.76881761171
|
||||
4,39799140,12150.0000954,129.952380952,168216.324384,20.380952381,39.0,00:12.1,02:48.2,271.853383897,73.72570625,206.84223,1.32583900227,323.830416,0.627589324063,39.0,1.40372670807,3252,50.0,191293.118277,03:11.2,02:48.2,0,0,0,0,0,130,0,168216.324384,15020000000.0,4,0.0,0.0,0.0,0.0,0.0,33.9483394834,0.0,0.0,99.7343324777,8.75041481387,2.97236312725
|
||||
5,39799141,15150.0000954,130.761904762,163348.980307,20.2380952381,48.2,00:15.1,02:43.3,271.598579567,80.0701191136,201.949188,1.29342403628,323.385594,0.628837587302,48.2,1.40838509317,3252,50.0,191293.118277,03:11.2,02:43.3,0,0,0,0,0,131,0,163348.980307,18130000000.0,4,0.0,0.0,0.0,0.0,0.0,32.7402135231,0.0,0.0,100.287842053,9.07476090999,3.06093125932
|
||||
6,39799142,18150.0000954,131.380952381,161595.916202,20.4285714286,57.6,00:18.1,02:41.5,272.398664053,82.9313928352,221.521356,1.28757369615,354.967956,0.633692860915,57.6,1.4380952381,3252,50.0,191293.118277,03:11.2,02:41.5,0,0,0,0,0,131,0,161595.916202,21140000000.0,4,0.0,0.0,0.0,0.0,0.0,32.1428571429,0.0,0.0,100.013342349,9.08767686119,3.09413759798
|
||||
7,39799143,20910.0000858,131.761904762,160946.930227,20.3333333333,66.4,00:20.9,02:40.9,269.06750204,86.6028089332,214.404204,1.29693877551,334.950966,0.632028077529,66.4,1.50830564784,3252,50.0,191293.118277,03:11.2,02:40.9,0,0,0,0,0,132,0,160946.930227,23710000000.0,4,0.0,0.0,0.0,0.0,0.0,31.1594202899,0.0,0.0,96.9366423557,9.16705794878,3.10661408264
|
||||
8,39799144,23819.9999332,131.857142857,160556.046845,20.1904761905,75.5,00:23.8,02:40.5,301.07501704,85.9423518548,215.293848,1.31319727891,337.619898,0.630773850875,75.5,1.48376623377,3252,50.0,191293.118277,03:11.2,02:40.5,0,0,0,0,0,132,0,160556.046845,26730000000.0,4,0.0,0.0,0.0,0.0,0.0,32.1167883212,0.0,0.0,98.396762766,9.25439487206,3.11417732203
|
||||
9,39799145,26940.0000572,132.047619048,156621.552107,20.7619047619,85.1,00:26.9,02:36.6,346.52959188,87.8502695392,234.866016,1.34163265306,381.657276,0.623563414808,85.1,1.50240770465,3252,50.0,191293.118277,03:11.2,02:36.6,0,0,0,0,0,132,0,156621.552107,29930000000.0,4,0.0,0.0,0.0,0.0,0.0,32.962962963,0.0,0.0,103.69799887,9.22576815896,3.19240866453
|
||||
10,39799146,29640.0001049,132.285714286,150480.356059,21.0952380952,95.0,00:29.6,02:30.4,395.87381738,99.6207143932,324.72006,1.37176870748,532.007112,0.612977608416,95.0,1.60465116279,3252,50.0,191293.118277,03:11.2,02:30.4,0,0,0,0,0,132,0,150480.356059,32470000000.0,4,0.0,0.0,0.0,0.0,0.0,32.5757575758,0.0,0.0,103.104818509,9.45054845301,3.32269282911
|
||||
11,39799147,32369.9998856,132.952380952,143847.653479,21.1904761905,105.0,00:32.3,02:23.8,441.03471892,126.436932947,314.044332,1.39544217687,521.331384,0.594869267431,105.0,1.70731707317,3252,50.0,191293.118277,03:11.2,02:23.8,0,0,0,0,0,133,0,143847.653479,35110000000.0,4,0.0,0.0,0.0,0.0,0.0,31.5384615385,0.0,0.0,93.0005991502,9.84187300133,3.47589959174
|
||||
12,39799148,35190.0000572,133.904761905,138421.986347,21.2857142857,115.3,00:35.1,02:18.4,462.78370054,134.706308388,312.709866,1.40442176871,529.783002,0.585113064034,115.3,1.773960217,3252,50.0,191293.118277,03:11.2,02:18.4,0,0,0,0,0,134,0,138421.986347,38010000000.0,4,0.0,0.0,0.0,0.0,0.0,30.0380228137,0.0,0.0,97.9636321096,10.1818794134,3.61214293477
|
||||
13,39799149,38009.9999905,134.904761905,135418.044204,21.1904761905,125.8,00:38.0,02:15.4,462.60068806,138.97288125,338.06472,1.40095238095,608.961318,0.572328332569,125.8,1.7967032967,3252,50.0,191293.118277,03:11.2,02:15.4,0,0,0,0,0,135,0,135418.044204,40820000000.0,4,0.0,0.0,0.0,0.0,0.0,30.0,0.0,0.0,101.416442286,10.4545176782,3.69227013238
|
||||
14,39799150,40890.0001049,136.047619048,134197.799472,21.3333333333,136.6,00:40.8,02:14.1,467.18302038,146.360682773,335.395788,1.39530612245,576.04449,0.573372604334,136.6,1.8107606679,3252,50.0,191293.118277,03:11.2,02:14.1,0,0,0,0,0,136,0,134197.799472,43770000000.0,4,0.0,0.0,0.0,0.0,0.0,29.8449612403,0.0,0.0,98.9480942562,10.4789348673,3.72584350838
|
||||
15,39799151,43680.0000668,137.428571429,133465.452616,21.5238095238,147.2,00:43.6,02:13.4,462.1348051,149.79272233,342.068118,1.38816326531,601.844166,0.577043192957,147.2,1.77838827839,3252,50.0,191293.118277,03:11.2,02:13.4,0,0,0,0,0,137,0,133465.452616,46480000000.0,4,0.0,0.0,0.0,0.0,0.0,29.8850574713,0.0,0.0,98.2812654729,10.4431917205,3.74628782355
|
||||
16,39799152,46470.0000286,138.619047619,133276.640695,21.7619047619,157.6,00:46.4,02:13.2,463.22873436,152.311202593,319.382196,1.37918367347,535.120866,0.577917524111,157.6,1.84380952381,3252,50.0,191293.118277,03:11.2,02:13.2,0,0,0,0,0,139,0,133276.640695,49260000000.0,4,0.0,0.0,0.0,0.0,0.0,28.8461538462,0.0,0.0,97.0675536464,10.3435665207,3.75159515871
|
||||
17,39799153,49200.0000477,139.714285714,133039.90291,21.7142857143,167.8,00:49.2,02:13.0,461.2763289,145.54018967,332.726856,1.37448979592,587.609862,0.573139687516,167.8,1.82857142857,3252,50.0,191293.118277,03:11.2,02:13.0,0,0,0,0,0,140,0,133039.90291,51900000000.0,4,0.0,0.0,0.0,0.0,0.0,29.8804780876,0.0,0.0,102.126712018,10.3846959983,3.75827093273
|
||||
18,39799154,51960.0000381,140.380952381,133170.997419,21.2857142857,178.5,00:51.9,02:13.1,461.2964518,149.554325469,360.30582,1.37319727891,644.102256,0.573214309195,178.5,1.8007518797,3252,50.0,191293.118277,03:11.2,02:13.1,0,0,0,0,0,140,0,133170.997419,54760000000.0,4,0.0,0.0,0.0,0.0,0.0,29.0076335878,0.0,0.0,99.0923455439,10.5833552385,3.75457126319
|
||||
19,39799155,54660.0000858,140.80952381,133152.931686,21.2380952381,188.5,00:54.6,02:13.1,467.16277644,154.735851561,320.716662,1.37183673469,551.134458,0.566265126248,188.5,1.83619047619,3252,50.0,191293.118277,03:11.2,02:13.1,0,0,0,0,0,141,0,133152.931686,57340000000.0,4,0.0,0.0,0.0,0.0,0.0,28.7356321839,0.0,0.0,95.8131009692,10.6085238675,3.75508067055
|
||||
20,39799156,57539.9999619,141.19047619,132699.130953,21.4761904762,199.3,00:57.5,02:12.6,460.85166006,147.538156497,338.06472,1.37285714286,587.16504,0.580181755545,199.3,1.78478664193,3252,50.0,191293.118277,03:11.2,02:12.6,0,0,0,0,0,141,0,132699.130953,60400000000.0,4,0.0,0.0,0.0,0.0,0.0,29.8449612403,0.0,0.0,101.521834232,10.5267892646,3.76792218917
|
||||
21,39799157,60269.9999809,141.714285714,132964.959531,21.5714285714,209.4,01:00.2,02:12.9,451.775748,150.748843213,337.619898,1.37,588.054684,0.586801841858,209.4,1.84555984556,3252,50.0,191293.118277,03:11.2,02:12.9,0,0,0,0,0,142,0,132964.959531,62950000000.0,4,0.0,0.0,0.0,0.0,0.0,29.718875502,0.0,0.0,98.7648569306,10.4593607348,3.76038921655
|
||||
22,39799158,62849.9999046,142.238095238,133493.269817,21.8571428571,219.4,01:02.8,02:13.4,456.8960426,150.868643612,327.833814,1.36394557823,537.344976,0.590718880399,219.4,1.82285714286,3252,50.0,191293.118277,03:11.2,02:13.4,0,0,0,0,0,142,0,133493.269817,65500000000.0,4,0.0,0.0,0.0,0.0,0.0,30.0,0.0,0.0,97.5193832126,10.2817844037,3.74550717565
|
||||
23,39799159,65730.0000191,143.142857143,133423.241182,22.1428571429,230.2,01:05.7,02:13.4,450.13396144,148.010908576,332.726856,1.3562585034,574.265202,0.587126683943,230.2,1.80761904762,3252,50.0,191293.118277,03:11.2,02:13.4,0,0,0,0,0,143,0,133423.241182,68620000000.0,4,0.0,0.0,0.0,0.0,0.0,28.9575289575,0.0,0.0,99.5588474118,10.1544430916,3.7474730457
|
||||
24,39799160,68400.0000954,143.952380952,133559.338288,22.3333333333,240.2,01:08.4,02:13.5,451.23542544,147.06641215,336.730254,1.34823129252,572.485914,0.581344675244,240.2,1.8,3252,50.0,191293.118277,03:11.2,02:13.5,0,0,0,0,0,144,0,133559.338288,71060000000.0,4,0.0,0.0,0.0,0.0,0.0,30.487804878,0.0,0.0,99.8922443414,10.0575788957,3.74365436675
|
||||
25,39799161,71039.9999619,144.714285714,133228.128188,22.7619047619,250.1,01:11.0,02:13.2,448.59990048,150.0313724,332.726856,1.34,596.951124,0.572068554427,250.1,1.83170254403,3252,50.0,191293.118277,03:11.2,02:13.2,0,0,0,0,0,145,0,133228.128188,73670000000.0,4,0.0,0.0,0.0,0.0,0.0,29.9180327869,0.0,0.0,98.650248521,9.89274299446,3.75296123123
|
||||
26,39799162,73500.0,145.142857143,132852.649371,22.9047619048,259.6,01:13.5,02:12.8,447.82781658,151.46859775,340.733652,1.33578231293,588.054684,0.573409353633,259.6,1.85515873016,3252,50.0,191293.118277,03:11.2,02:12.8,0,0,0,0,0,145,0,132852.649371,75990000000.0,4,0.0,0.0,0.0,0.0,0.0,29.6296296296,0.0,0.0,98.5450423905,9.85882717413,3.76356815139
|
||||
27,39799163,76349.9999046,144.952380952,132705.854989,22.6666666667,270.3,01:16.3,02:12.7,445.93296564,152.311202593,325.609704,1.33557823129,566.258406,0.568538870911,270.3,1.82974559687,3252,50.0,191293.118277,03:11.2,02:12.7,0,0,0,0,0,145,0,132705.854989,79190000000.0,4,0.0,0.0,0.0,0.0,0.0,28.8537549407,0.0,0.0,98.3254503049,9.97340631186,3.76773127337
|
||||
28,39799164,79079.9999237,144.714285714,133013.725151,22.4761904762,280.6,01:19.0,02:13.0,446.46711516,149.43522195,341.623296,1.33843537415,600.954522,0.574029662749,280.6,1.80694980695,3252,50.0,191293.118277,03:11.2,02:13.0,0,0,0,0,0,145,0,133013.725151,81820000000.0,4,0.0,0.0,0.0,0.0,0.0,29.0196078431,0.0,0.0,99.5235141066,10.0346468847,3.75901057903
|
||||
29,39799165,81750.0,144.666666667,133278.99447,22.3333333333,290.7,01:21.7,02:13.2,453.9702032,149.79272233,332.282034,1.33891156463,593.392548,0.562905554475,290.7,1.83953033268,3252,50.0,191293.118277,03:11.2,02:13.2,0,0,0,0,0,144,0,133278.99447,84420000000.0,4,0.0,0.0,0.0,0.0,0.0,29.5546558704,0.0,0.0,98.6943311289,10.0787343679,3.75152890362
|
||||
30,39799166,84450.0000477,144.714285714,132845.542123,22.3333333333,300.8,01:24.4,02:12.8,461.67512544,149.316181683,341.623296,1.34027210884,594.727014,0.561184618018,300.8,1.83561643836,3252,50.0,191293.118277,03:11.2,02:12.8,0,0,0,0,0,145,0,132845.542123,87140000000.0,4,0.0,0.0,0.0,0.0,0.0,29.0836653386,0.0,0.0,99.9816299192,10.1116195592,3.76376950261
|
||||
31,39799167,87180.0000668,144.761904762,132433.757101,22.1428571429,311.1,01:27.1,02:12.4,462.93860148,152.070140328,357.636888,1.34319727891,661.450314,0.558028598825,311.1,1.80888030888,3252,50.0,191293.118277,03:11.2,02:12.4,0,0,0,0,0,145,0,132433.757101,89860000000.0,4,0.0,0.0,0.0,0.0,0.0,29.6,0.0,0.0,99.0895822785,10.2303124168,3.77547243954
|
||||
32,39799168,89789.9999619,145.142857143,132296.93032,21.8571428571,321.2,01:29.7,02:12.2,463.39797854,156.571128627,336.730254,1.34659863946,588.499506,0.560523315593,321.2,1.87301587302,3252,50.0,191293.118277,03:11.2,02:12.2,0,0,0,0,0,145,0,132296.93032,92460000000.0,4,0.0,0.0,0.0,0.0,0.0,29.0322580645,0.0,0.0,96.5399478842,10.374760898,3.77937718428
|
||||
33,39799169,92670.0000763,145.333333333,132417.814657,21.5714285714,331.9,01:32.6,02:12.4,459.09860748,150.150792431,340.28883,1.35204081633,612.075072,0.565722937216,331.9,1.83011583012,3252,50.0,191293.118277,03:11.2,02:12.4,0,0,0,0,0,145,0,132417.814657,95510000000.0,4,0.0,0.0,0.0,0.0,0.0,29.1338582677,0.0,0.0,100.39247635,10.502578376,3.77592698757
|
||||
34,39799170,95339.9999142,145.571428571,132644.156173,21.7142857143,342.0,01:35.3,02:12.6,457.32419134,150.988507466,334.950966,1.35741496599,579.158244,0.570439059313,342.0,1.83204633205,3252,50.0,191293.118277,03:11.2,02:12.6,0,0,0,0,0,146,0,132644.156173,98030000000.0,4,0.0,0.0,0.0,0.0,0.0,29.718875502,0.0,0.0,99.3252778037,10.4156789656,3.76948381613
|
||||
35,39799171,98069.9999332,146.0,132824.170064,21.8571428571,352.4,01:38.0,02:12.8,465.83169956,150.868643612,341.178474,1.35972789116,592.058082,0.573613897901,352.4,1.83783783784,3252,50.0,191293.118277,03:11.2,02:12.8,0,0,0,0,0,146,0,132824.170064,1.008e+11,4,0.0,0.0,0.0,0.0,0.0,29.1338582677,0.0,0.0,99.0005769733,10.3335787375,3.76437511153
|
||||
36,39799172,100859.999895,146.428571429,132399.04606,22.0952380952,363.0,01:40.8,02:12.3,469.36640042,153.399135658,346.96116,1.36340136054,621.416334,0.570446901224,363.0,1.84362934363,3252,50.0,191293.118277,03:11.2,02:12.3,0,0,0,0,0,146,0,132399.04606,1.0364e+11,4,0.0,0.0,0.0,0.0,0.0,28.5714285714,0.0,0.0,98.3083854908,10.255048364,3.77646225467
|
||||
37,39799173,103619.999886,146.666666667,132245.976211,22.0952380952,373.4,01:43.6,02:12.2,468.9419434,152.4318292,347.405982,1.36897959184,592.502904,0.567916935654,373.4,1.84555984556,3252,50.0,191293.118277,03:11.2,02:12.2,0,147,0,0,0,0,0,132245.976211,1.0637e+11,4,0.0,0.0,0.0,0.0,0.0,28.90625,0.0,0.0,99.2761628163,10.266918205,3.78083337072
|
||||
38,39799174,106380.000114,146.857142857,132500.471593,21.8571428571,383.9,01:46.3,02:12.5,470.1816956,152.914972515,337.619898,1.37258503401,619.192224,0.565878523172,383.9,1.80827067669,3252,50.0,191293.118277,03:11.2,02:12.5,0,147,0,0,0,0,0,132500.471593,1.0915e+11,4,0.0,0.0,0.0,0.0,0.0,29.4573643411,0.0,0.0,98.3933531887,10.3588236563,3.7735714748
|
||||
39,39799175,109230.000019,147.142857143,132775.418655,21.7142857143,394.6,01:49.2,02:12.7,466.5370299,151.46859775,334.061322,1.37394557823,574.265202,0.565880568251,394.6,1.83619047619,3252,50.0,191293.118277,03:11.2,02:12.7,0,147,0,0,0,0,0,132775.418655,1.121e+11,4,0.0,0.0,0.0,0.0,0.0,28.1954887218,0.0,0.0,98.7171028208,10.4053819703,3.76575728448
|
||||
40,39799176,111960.000038,147.333333333,132878.01379,21.7619047619,405.0,01:51.9,02:12.8,468.16105384,148.603267434,350.519736,1.37340136054,627.643842,0.56601972006,405.0,1.8045112782,3252,50.0,191293.118277,03:11.2,02:12.8,0,147,0,0,0,0,0,132878.01379,1.1469e+11,4,0.0,0.0,0.0,0.0,0.0,29.6875,0.0,0.0,100.38765333,10.3745966648,3.7628497427
|
||||
41,39799177,114690.000057,147.666666667,133014.526935,21.5714285714,415.3,01:54.6,02:13.0,461.97357982,151.82933255,334.061322,1.37108843537,586.275396,0.572604512571,415.3,1.85135135135,3252,50.0,191293.118277,03:11.2,02:13.0,0,148,0,0,0,0,0,133014.526935,1.1741e+11,4,0.0,0.0,0.0,0.0,0.0,29.2490118577,0.0,0.0,97.9524129494,10.4554630901,3.7589879205
|
||||
42,39799178,117630.000114,147.857142857,133297.852527,21.5714285714,426.0,01:57.6,02:13.2,467.13796324,150.509432707,343.402584,1.36891156463,590.723616,0.576219283059,426.0,1.85135135135,3252,50.0,191293.118277,03:11.2,02:13.2,0,148,0,0,0,0,0,133297.852527,1.2046e+11,4,0.0,0.0,0.0,0.0,0.0,28.0303030303,0.0,0.0,98.182676506,10.4332399244,3.75099816329
|
||||
43,39799179,120329.999924,148.142857143,133012.600446,21.7619047619,436.5,02:00.3,02:13.0,468.43324254,149.316181683,326.054526,1.37163265306,572.485914,0.574708892977,436.5,1.78107606679,3252,50.0,191293.118277,03:11.2,02:13.0,0,148,0,0,0,0,0,133012.600446,1.2316e+11,4,0.0,0.0,0.0,0.0,0.0,29.5019157088,0.0,0.0,99.605384492,10.3640992963,3.75904236383
|
||||
44,39799180,123150.000095,148.238095238,132741.318404,21.7142857143,446.9,02:03.1,02:12.7,473.53595608,148.603267434,365.643684,1.37421768707,627.19902,0.56297996655,446.9,1.85328185328,3252,50.0,191293.118277,03:11.2,02:12.7,0,148,0,0,0,0,0,132741.318404,1.2586e+11,4,0.0,0.0,0.0,0.0,0.0,29.1338582677,0.0,0.0,100.698106743,10.408055035,3.76672467933
|
||||
45,39799181,125670.000076,148.714285714,132116.286996,21.9523809524,456.9,02:05.6,02:12.1,480.02140032,156.448327748,339.399186,1.37891156463,636.985104,0.552002776041,456.9,1.84380952381,3252,50.0,191293.118277,03:11.2,02:12.1,0,149,0,0,0,0,0,132116.286996,1.2827e+11,4,0.0,0.0,0.0,0.0,0.0,29.4117647059,0.0,0.0,97.0125766755,10.3438750147,3.78454474744
|
||||
46,39799182,128490.00001,149.285714286,131446.06373,22.0476190476,467.6,02:08.4,02:11.4,480.97186692,155.223848632,342.068118,1.38394557823,624.97491,0.553015355989,467.6,1.86486486486,3252,50.0,191293.118277,03:11.2,02:11.4,0,149,0,0,0,0,0,131446.06373,1.3133e+11,4,0.0,0.0,0.0,0.0,0.0,29.2490118577,0.0,0.0,99.2811596511,10.3517070508,3.80384155913
|
||||
47,39799183,131369.999886,149.761904762,131579.319767,21.5714285714,478.5,02:11.3,02:11.5,468.43309124,155.590518989,351.854202,1.38789115646,628.978308,0.551216571488,478.5,1.80333951763,3252,50.0,191293.118277,03:11.2,02:11.5,0,150,0,0,0,0,0,131579.319767,1.3423e+11,4,0.0,0.0,0.0,0.0,0.0,28.624535316,0.0,0.0,98.7465666185,10.5695065097,3.79998924517
|
||||
48,39799184,134190.000057,150.047619048,132379.219894,21.380952381,489.0,02:14.1,02:12.3,470.22868938,154.370525725,329.16828,1.38278911565,575.599668,0.565640526729,489.0,1.84761904762,3252,50.0,191293.118277,03:11.2,02:12.3,0,150,0,0,0,0,0,132379.219894,1.3698e+11,4,0.0,0.0,0.0,0.0,0.0,28.9575289575,0.0,0.0,97.7336703229,10.5992318221,3.77702784771
|
||||
49,39799185,136799.999952,150.047619048,132686.986271,21.380952381,499.1,02:16.8,02:12.6,472.07330872,148.366134605,337.619898,1.37421768707,615.633648,0.55548126898,499.1,1.78849721707,3252,50.0,191293.118277,03:11.2,02:12.6,0,150,0,0,0,0,0,132686.986271,1.3944e+11,4,0.0,0.0,0.0,0.0,0.0,29.5019157088,0.0,0.0,100.983000825,10.5746469908,3.7682670626
|
||||
50,39799186,139710.000038,149.666666667,132806.105783,21.5714285714,510.0,02:19.7,02:12.8,463.49638406,150.748843213,351.854202,1.35707482993,620.971512,0.552332697655,510.0,1.82818532819,3252,50.0,191293.118277,03:11.2,02:12.8,0,150,0,0,0,0,0,132806.105783,1.4262e+11,4,0.0,0.0,0.0,0.0,0.0,28.6821705426,0.0,0.0,99.1196886936,10.47187152,3.7648871417
|
||||
51,39799187,142319.999933,149.428571429,132924.920461,21.9523809524,519.9,02:22.3,02:12.9,467.38403756,152.79409112,351.40938,1.34034013605,670.791576,0.553274143388,519.9,1.86706349206,3252,50.0,191293.118277,03:11.2,02:12.9,0,149,0,0,0,0,0,132924.920461,1.4491e+11,4,0.0,0.0,0.0,0.0,0.0,28.125,0.0,0.0,97.5309057756,10.2809492407,3.76152190474
|
||||
52,39799188,145200.000048,149.0,132760.275263,22.0952380952,530.6,02:25.2,02:12.7,452.0791045,151.2284256,329.16828,1.33054421769,567.592872,0.55928136473,530.6,1.81604696673,3252,50.0,191293.118277,03:11.2,02:12.7,0,149,0,0,0,0,0,132760.275263,1.4807e+11,4,0.0,0.0,0.0,0.0,0.0,28.6274509804,0.0,0.0,98.9077177669,10.2271452662,3.76618682818
|
||||
53,39799189,147869.999886,148.666666667,133445.996984,22.0,540.8,02:27.8,02:13.4,441.90542016,147.774406503,347.405982,1.33142857143,610.740606,0.57052466683,540.8,1.81996086106,3252,50.0,191293.118277,03:11.2,02:13.4,0,149,0,0,0,0,0,133445.996984,1.5058e+11,4,0.0,0.0,0.0,0.0,0.0,28.9682539683,0.0,0.0,99.6671795686,10.2186382092,3.74683401003
|
||||
54,39799190,150569.999933,148.285714286,133974.160675,22.0,550.8,02:30.5,02:13.9,439.90544598,148.8406528,310.930578,1.33653061224,547.575882,0.579100196408,550.8,1.81081081081,3252,50.0,191293.118277,03:11.2,02:13.9,0,148,0,0,0,0,0,133974.160675,1.5324e+11,4,0.0,0.0,0.0,0.0,0.0,29.8387096774,0.0,0.0,97.7875000321,10.1783534733,3.73206294022
|
||||
55,39799191,153210.000038,147.714285714,133996.497711,22.0,560.8,02:33.2,02:13.9,447.03488354,144.373384534,338.06472,1.34952380952,574.265202,0.563329080487,560.8,1.8,3252,50.0,191293.118277,03:11.2,02:13.9,0,148,0,0,0,0,0,133996.497711,1.5589e+11,4,0.0,0.0,0.0,0.0,0.0,30.1204819277,0.0,0.0,100.762878325,10.1766567555,3.73144081033
|
||||
56,39799192,155910.000086,147.238095238,133634.43276,22.0,571.0,02:35.9,02:13.6,445.222945,149.078290838,333.171678,1.35891156463,610.295784,0.562404477497,571.0,1.80761904762,3252,50.0,191293.118277,03:11.2,02:13.6,0,147,0,0,0,0,0,133634.43276,1.586e+11,4,0.0,0.0,0.0,0.0,0.0,30.0,0.0,0.0,98.3781192719,10.2042290708,3.74155065931
|
||||
57,39799193,158460.000038,147.047619048,133400.917518,21.9047619048,580.7,02:38.4,02:13.4,456.42734546,150.270275814,330.502746,1.36496598639,607.18203,0.554919999296,580.7,1.82666666667,3252,50.0,191293.118277,03:11.2,02:13.4,0,147,0,0,0,0,0,133400.917518,1.6102e+11,4,0.0,0.0,0.0,0.0,0.0,30.0,0.0,0.0,98.1111826798,10.2665352149,3.74810015781
|
||||
58,39799194,161250.0,146.904761905,132778.406555,22.0476190476,591.2,02:41.2,02:12.7,447.8955082,150.748843213,325.164882,1.36598639456,564.034296,0.554629386616,591.2,1.81904761905,3252,50.0,191293.118277,03:11.2,02:12.7,0,147,0,0,0,0,0,132778.406555,1.6404e+11,4,0.0,0.0,0.0,0.0,0.0,30.2419354839,0.0,0.0,99.1817344353,10.247834569,3.76567254399
|
||||
59,39799195,163950.000048,147.0,132807.06861,22.4285714286,601.4,02:43.9,02:12.8,451.54855592,150.270275814,338.954364,1.36346938776,613.85436,0.570959970779,601.4,1.79511278195,3252,50.0,191293.118277,03:11.2,02:12.8,0,147,0,0,0,0,0,132807.06861,1.6664e+11,4,0.0,0.0,0.0,0.0,0.0,30.4,0.0,0.0,99.4331936049,10.0715995905,3.76485984694
|
||||
60,39799196,166619.999886,147.0,132572.347555,22.619047619,611.4,02:46.6,02:12.5,457.20073054,153.277999204,324.72006,1.35414965986,551.134458,0.586617053679,611.4,1.85518590998,3252,50.0,191293.118277,03:11.2,02:12.5,0,147,0,0,0,0,0,132572.347555,1.6927e+11,4,0.0,0.0,0.0,0.0,0.0,29.5546558704,0.0,0.0,98.0007459534,10.0044678542,3.77152557995
|
||||
61,39799197,169380.000114,146.904761905,132377.004331,22.5238095238,621.8,02:49.3,02:12.3,462.75156442,151.108434789,352.743846,1.34925170068,590.278794,0.589285589269,621.8,1.82432432432,3252,50.0,191293.118277,03:11.2,02:12.3,0,147,0,0,0,0,0,132377.004331,1.7212e+11,4,0.0,0.0,0.0,0.0,0.0,29.0196078431,0.0,0.0,99.8485335066,10.0615956434,3.77709106295
|
||||
62,39799198,172049.999952,147.047619048,132122.128079,22.4761904762,632.1,02:52.0,02:12.1,470.00379706,154.8577548,350.519736,1.34394557823,582.71682,0.595205660521,632.1,1.85912698413,3252,50.0,191293.118277,03:11.2,02:12.1,0,147,0,0,0,0,0,132122.128079,1.7475e+11,4,0.0,0.0,0.0,0.0,0.0,28.6852589641,0.0,0.0,97.9960127045,10.1023634884,3.78437743374
|
||||
63,39799199,174720.000029,147.333333333,131614.148435,22.380952381,642.3,02:54.7,02:11.6,480.06373406,154.127294899,349.18527,1.34401360544,607.626852,0.589862706687,642.3,1.82239382239,3252,50.0,191293.118277,03:11.2,02:11.6,0,147,0,0,0,0,0,131614.148435,1.7739e+11,4,0.0,0.0,0.0,0.0,0.0,29.718875502,0.0,0.0,99.6049114541,10.1845094001,3.79898366511
|
||||
64,39799200,177299.999952,147.571428571,130772.700382,22.6666666667,652.0,02:57.3,02:10.7,480.81046008,157.3092836,366.088506,1.34333333333,620.52669,0.586295170744,652.0,1.8893360161,3252,50.0,191293.118277,03:11.2,02:10.7,0,148,0,0,0,0,0,130772.700382,1.798e+11,4,0.0,0.0,0.0,0.0,0.0,28.8617886179,0.0,0.0,99.486102197,10.120838737,3.82342796731
|
||||
65,39799201,180180.000067,148.0,130148.629,22.9047619048,662.7,03:00.1,02:10.1,485.54760256,162.163914945,357.636888,1.34693877551,607.18203,0.583353561525,662.7,1.87301587302,3252,50.0,191293.118277,03:11.2,02:10.1,0,148,0,0,0,0,0,130148.629,1.8297e+11,4,0.0,0.0,0.0,0.0,0.0,29.0322580645,0.0,0.0,97.9027816141,10.063658141,3.84176156016
|
||||
66,39799202,182670.000076,148.428571429,129649.404112,22.7619047619,673.1,03:02.6,02:09.6,489.00093428,162.541430374,362.52993,1.34544217687,621.861156,0.587668878441,673.1,1.8893360161,3252,50.0,191293.118277,03:11.2,02:09.6,0,148,0,0,0,0,0,129649.404112,1.8535e+11,4,0.0,0.0,0.0,0.0,0.0,28.5140562249,0.0,0.0,98.8080644551,10.1658132625,3.85655455513
|
||||
67,39799203,185430.000067,148.571428571,129434.345963,22.2380952381,683.6,03:05.4,02:09.4,483.88687324,162.793432547,360.30582,1.34448979592,622.305978,0.579260719162,683.6,1.87698412698,3252,50.0,191293.118277,03:11.2,02:09.4,0,149,0,0,0,0,0,129434.345963,1.8813e+11,4,0.0,0.0,0.0,0.0,0.0,28.8,0.0,0.0,99.1476815574,10.4225535544,3.86296230944
|
||||
68,39799204,188039.999962,149.0,129521.611571,22.1904761905,693.8,03:08.0,02:09.5,488.07812532,162.163914945,366.088506,1.33972789116,626.754198,0.574143842725,693.8,1.88329979879,3252,50.0,191293.118277,03:11.2,02:09.5,0,149,0,0,0,0,0,129521.611571,1.9069e+11,4,0.0,0.0,0.0,0.0,0.0,28.6290322581,0.0,0.0,99.3315255298,10.4378822505,3.86035962599
|
||||
69,39799205,190589.999914,149.333333333,129450.495129,22.0952380952,703.8,03:10.5,02:09.4,485.5135298,163.930665884,355.412778,1.33823129252,634.316172,0.577472776375,703.8,1.85714285714,3252,50.0,191293.118277,03:11.2,02:09.4,0,149,0,0,0,0,0,129450.495129,1.9313e+11,4,0.0,0.0,0.0,0.0,0.0,28.9156626506,0.0,0.0,98.4230215789,10.4886321163,3.8624803984
|
||||
70,39799206,193410.000086,149.714285714,129612.827283,22.4761904762,714.7,03:13.4,02:09.6,476.80902898,162.163914945,371.42637,1.33734693878,640.988502,0.575938050313,714.7,1.93581780538,3252,50.0,191293.118277,03:11.2,02:09.6,0,150,0,0,0,0,0,129612.827283,1.9624e+11,4,0.0,0.0,0.0,0.0,0.0,27.380952381,0.0,0.0,99.1219578243,10.2979449696,3.85764287749
|
||||
71,39799207,196079.999924,150.285714286,130078.623324,22.4761904762,724.9,03:16.0,02:10.0,475.99809124,162.415526871,346.516338,1.34476190476,588.944328,0.570178181642,724.9,1.84344422701,3252,50.0,191293.118277,03:11.2,02:10.0,0,150,0,0,0,0,0,130078.623324,1.9874e+11,4,0.0,0.0,0.0,0.0,0.0,29.5546558704,0.0,0.0,97.9090199034,10.2610692564,3.84382911828
|
||||
72,39799208,198779.999971,150.857142857,130276.140264,22.619047619,735.2,03:18.7,02:10.2,482.79696856,158.792546326,344.73705,1.35265306122,619.637046,0.57022048833,735.2,1.85127201566,3252,50.0,191293.118277,03:11.2,02:10.2,0,151,0,0,0,0,0,130276.140264,2.0146e+11,4,0.0,0.0,0.0,0.0,0.0,29.3172690763,0.0,0.0,99.6880916192,10.1808035361,3.83800133306
|
||||
73,39799209,201450.000048,150.904761905,130062.562971,22.4761904762,745.4,03:21.4,02:10.0,482.64500284,158.420860413,367.422972,1.35972789116,657.891738,0.565853991617,745.4,1.86692759295,3252,50.0,191293.118277,03:11.2,02:10.0,0,151,0,0,0,0,0,130062.562971,2.041e+11,4,0.0,0.0,0.0,0.0,0.0,29.5546558704,0.0,0.0,100.41503713,10.2623363112,3.84430376103
|
||||
74,39799210,204150.000095,150.761904762,129931.8979,22.380952381,756.0,03:24.1,02:09.9,486.11307118,164.310917277,362.52993,1.36333333333,631.64724,0.564496229892,756.0,1.89484126984,3252,50.0,191293.118277,03:11.2,02:09.9,0,151,0,0,0,0,0,129931.8979,2.0687e+11,4,0.0,0.0,0.0,0.0,0.0,28.4584980237,0.0,0.0,97.1078363282,10.3163699875,3.84816975723
|
||||
75,39799211,206789.999962,150.333333333,129650.504848,22.3333333333,766.3,03:26.7,02:09.6,488.3475301,163.171923972,346.516338,1.36959183673,607.626852,0.568695078615,766.3,1.87084148728,3252,50.0,191293.118277,03:11.2,02:09.6,0,150,0,0,0,0,0,129650.504848,2.0946e+11,4,0.0,0.0,0.0,0.0,0.0,29.435483871,0.0,0.0,98.4237648367,10.3608048705,3.8565218129
|
||||
76,39799212,209430.000067,150.047619048,129513.21174,22.3333333333,776.5,03:29.4,02:09.5,483.68482722,160.909752581,349.630092,1.37387755102,621.416334,0.56235824624,776.5,1.85328185328,3252,50.0,191293.118277,03:11.2,02:09.5,0,150,0,0,0,0,0,129513.21174,2.1206e+11,4,0.0,0.0,0.0,0.0,0.0,30.2040816327,0.0,0.0,100.125213958,10.3717880519,3.86060999709
|
||||
77,39799213,212069.999933,149.904761905,129546.612475,22.2857142857,786.9,03:32.0,02:09.5,484.31314586,162.91953125,361.640286,1.3762585034,648.105654,0.558736076474,786.9,1.92261904762,3252,50.0,191293.118277,03:11.2,02:09.5,0,150,0,0,0,0,0,129546.612475,2.1474e+11,4,0.0,0.0,0.0,0.0,0.0,29.1497975709,0.0,0.0,98.813597128,10.3912701416,3.85961462402
|
||||
78,39799214,214740.00001,150.0,129255.687853,22.7142857143,797.2,03:34.7,02:09.2,495.94269932,164.564744602,354.078312,1.37952380952,640.54368,0.564905581725,797.2,1.85907335907,3252,50.0,191293.118277,03:11.2,02:09.2,0,150,0,0,0,0,0,129255.687853,2.174e+11,4,0.0,0.0,0.0,0.0,0.0,29.95951417,0.0,0.0,98.4877588075,10.2181554941,3.86830172276
|
||||
79,39799215,217440.000057,150.0,128834.383844,22.6666666667,807.8,03:37.4,02:08.8,505.17584234,165.582667981,359.416176,1.3762585034,618.747402,0.573836119165,807.8,1.85328185328,3252,50.0,191293.118277,03:11.2,02:08.8,0,150,0,0,0,0,0,128834.383844,2.2014e+11,4,0.0,0.0,0.0,0.0,0.0,29.4820717131,0.0,0.0,98.8457074571,10.2731070098,3.88095153703
|
||||
80,39799216,220140.000105,149.904761905,128443.049826,22.5714285714,818.2,03:40.1,02:08.4,498.49600786,166.0932,378.543522,1.3662585034,646.771188,0.575927300163,818.2,1.96734693878,3252,50.0,191293.118277,03:11.2,02:08.4,0,150,0,0,0,0,0,128443.049826,2.2282e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,99.4453234055,10.3478851199,3.89277583084
|
||||
81,39799217,222690.000057,150.047619048,128455.953168,22.8571428571,828.4,03:42.6,02:08.4,505.13326652,167.888324643,373.65048,1.35843537415,653.88834,0.573408655065,828.4,1.85518590998,3252,50.0,191293.118277,03:11.2,02:08.4,0,150,0,0,0,0,0,128455.953168,2.2526e+11,4,0.0,0.0,0.0,0.0,0.0,28.6274509804,0.0,0.0,98.3523725736,10.2175101086,3.89238480327
|
||||
82,39799218,225480.000019,150.238095238,128266.252205,22.6666666667,839.2,03:45.4,02:08.2,509.2093793,169.049136108,354.523134,1.34931972789,640.54368,0.559644362835,839.2,1.86706349206,3252,50.0,191293.118277,03:11.2,02:08.2,0,150,0,0,0,0,0,128266.252205,2.2827e+11,4,0.0,0.0,0.0,0.0,0.0,28.9156626506,0.0,0.0,98.111038479,10.318609837,3.89814149399
|
||||
83,39799219,228119.999886,150.714285714,127899.526566,22.5238095238,849.6,03:48.1,02:07.8,505.09202214,165.582667981,395.001936,1.34285714286,705.932514,0.556293456915,849.6,1.98109243697,3252,50.0,191293.118277,03:11.2,02:07.8,0,151,0,0,0,0,0,127899.526566,2.3077e+11,4,0.0,0.0,0.0,0.0,0.0,27.6422764228,0.0,0.0,101.029070581,10.4138297132,3.90931861457
|
||||
84,39799220,230789.999962,151.285714286,127694.761218,22.3333333333,860.1,03:50.7,02:07.6,507.87618422,171.778477875,380.767632,1.34761904762,688.139634,0.559973575253,860.1,1.89134808853,3252,50.0,191293.118277,03:11.2,02:07.6,0,151,0,0,0,0,0,127694.761218,2.3344e+11,4,0.0,0.0,0.0,0.0,0.0,28.5140562249,0.0,0.0,97.8543312318,10.5194885779,3.91558741512
|
||||
85,39799221,233369.999886,151.761904762,127607.773874,22.1904761905,870.3,03:53.3,02:07.6,504.33697462,171.778477875,364.309218,1.34979591837,627.19902,0.577271613127,870.3,1.875,3252,50.0,191293.118277,03:11.2,02:07.6,0,152,0,0,0,0,0,127607.773874,2.3595e+11,4,0.0,0.0,0.0,0.0,0.0,28.8,0.0,0.0,98.0545829537,10.5944276703,3.91825658281
|
||||
86,39799222,236160.000086,151.952380952,127739.601229,22.1904761905,881.1,03:56.1,02:07.7,493.34893316,168.6616064,367.422972,1.34544217687,632.536884,0.586842804464,881.1,1.88293650794,3252,50.0,191293.118277,03:11.2,02:07.7,0,152,0,0,0,0,0,127739.601229,2.3894e+11,4,0.0,0.0,0.0,0.0,0.0,28.8,0.0,0.0,99.5577662158,10.5834942138,3.91421293937
|
||||
87,39799223,238890.000105,152.0,128505.455385,22.3333333333,891.7,03:58.8,02:08.5,490.76887478,166.860963965,362.52993,1.34027210884,596.06148,0.587689763157,891.7,1.91020408163,3252,50.0,191293.118277,03:11.2,02:08.5,0,152,0,0,0,0,0,128505.455385,2.4163e+11,4,0.0,0.0,0.0,0.0,0.0,27.4509803922,0.0,0.0,98.8436106307,10.4531249515,3.89088539861
|
||||
88,39799224,241559.999943,151.952380952,129358.03767,22.380952381,902.1,04:01.5,02:09.3,494.78014038,163.677491155,378.0987,1.3374829932,660.56067,0.58515412607,902.1,1.9,3252,50.0,191293.118277,03:11.2,02:09.3,0,152,0,0,0,0,0,129358.03767,2.4423e+11,4,0.0,0.0,0.0,0.0,0.0,27.4509803922,0.0,0.0,98.786779712,10.3621356358,3.86524107049
|
||||
89,39799225,244470.000029,152.380952381,129936.460364,22.0952380952,913.1,04:04.4,02:09.9,486.94870108,161.160065867,359.416176,1.34183673469,633.426528,0.575341883987,913.1,1.8893360161,3252,50.0,191293.118277,03:11.2,02:09.9,0,152,0,0,0,0,0,129936.460364,2.4735e+11,4,0.0,0.0,0.0,0.0,0.0,27.519379845,0.0,0.0,98.9959693609,10.4494044003,3.8480346363
|
||||
90,39799226,247259.99999,152.904761905,130664.59819,21.5714285714,923.9,04:07.2,02:10.6,487.4082597,157.802673571,365.198862,1.35659863946,622.305978,0.567196893235,923.9,1.86105675147,3252,50.0,191293.118277,03:11.2,02:10.6,0,153,0,0,0,0,0,130664.59819,2.5006e+11,4,0.0,0.0,0.0,0.0,0.0,27.969348659,0.0,0.0,99.4214002682,10.6434986683,3.82659118788
|
||||
91,39799227,250079.999924,153.666666667,131151.327866,21.3333333333,934.6,04:10.0,02:11.1,485.51861348,158.297094122,339.844008,1.36782312925,610.295784,0.576619566674,934.6,1.82476190476,3252,50.0,191293.118277,03:11.2,02:11.1,0,154,0,0,0,0,0,131151.327866,2.5291e+11,4,0.0,0.0,0.0,0.0,0.0,28.4090909091,0.0,0.0,98.0114977086,10.7223466425,3.81238991732
|
||||
92,39799228,252900.000095,154.285714286,131618.222937,21.0476190476,945.4,04:12.9,02:11.6,475.58301482,153.884319702,362.52993,1.3680952381,615.188826,0.592352808406,945.4,1.88258317025,3252,50.0,191293.118277,03:11.2,02:11.6,0,154,0,0,0,0,0,131618.222937,2.5572e+11,4,0.0,0.0,0.0,0.0,0.0,27.7566539924,0.0,0.0,99.752917618,10.829346687,3.79886606006
|
||||
93,39799229,255690.000057,154.80952381,132270.744011,20.9047619048,956.0,04:15.6,02:12.2,476.33364438,154.49223704,350.964558,1.36156462585,579.603066,0.5943440039,956.0,1.83783783784,3252,50.0,191293.118277,03:11.2,02:12.2,0,155,0,0,0,0,0,132270.744011,2.5849e+11,4,0.0,0.0,0.0,0.0,0.0,28.3524904215,0.0,0.0,97.8971375061,10.8495626707,3.78012540669
|
||||
94,39799230,258569.999933,155.285714286,132463.992308,21.0,966.7,04:18.5,02:12.4,483.659197,151.709024051,333.171678,1.35401360544,546.241416,0.595762918594,966.7,1.7980952381,3252,50.0,191293.118277,03:11.2,02:12.4,0,155,0,0,0,0,0,132463.992308,2.614e+11,4,0.0,0.0,0.0,0.0,0.0,28.4090909091,0.0,0.0,99.2574491048,10.7846019411,3.77461067939
|
||||
95,39799231,261329.999924,155.761904762,132090.300118,21.0,977.4,04:21.3,02:12.0,481.98781616,150.389822568,380.32281,1.34789115646,681.912126,0.571103232794,977.4,1.875,3252,50.0,191293.118277,03:11.2,02:12.0,0,156,0,0,0,0,0,132090.300118,2.6413e+11,4,0.0,0.0,0.0,0.0,0.0,27.5862068966,0.0,0.0,100.980337209,10.8151122928,3.78528930249
|
||||
96,39799232,264150.000095,155.952380952,131898.866612,21.0,988.1,04:24.1,02:11.8,482.59095848,157.062974746,357.636888,1.35081632653,636.985104,0.558185758971,988.1,1.85127201566,3252,50.0,191293.118277,03:11.2,02:11.8,0,156,0,0,0,0,0,131898.866612,2.6697e+11,4,0.0,0.0,0.0,0.0,0.0,27.7566539924,0.0,0.0,97.1115832126,10.8308089771,3.79078314198
|
||||
97,39799233,266970.000029,156.095238095,131929.48876,21.0952380952,998.8,04:26.9,02:11.9,482.413998,155.223848632,350.074914,1.35741496599,650.329764,0.562355052214,998.8,1.82818532819,3252,50.0,191293.118277,03:11.2,02:11.9,0,156,0,0,0,0,0,131929.48876,2.6979e+11,4,0.0,0.0,0.0,0.0,0.0,28.1368821293,0.0,0.0,98.1937754828,10.7794088307,3.78990326349
|
||||
98,39799234,269880.000114,156.0,132543.540936,20.8571428571,1009.6,04:29.8,02:12.5,465.7281801,151.2284256,338.06472,1.36204081633,567.14805,0.580949267827,1009.6,1.82285714286,3252,50.0,191293.118277,03:11.2,02:12.5,0,156,0,0,0,0,0,132543.540936,2.7276e+11,4,0.0,0.0,0.0,0.0,0.0,27.9850746269,0.0,0.0,99.3937113439,10.8519521526,3.77234527211
|
||||
99,39799235,272789.999962,156.095238095,133744.221874,20.8095238095,1020.6,04:32.7,02:13.7,466.41831992,147.420125978,347.405982,1.36789115646,583.161642,0.57806732818,1020.6,1.82476190476,3252,50.0,191293.118277,03:11.2,02:13.7,0,156,0,0,0,0,0,133744.221874,2.7573e+11,4,0.0,0.0,0.0,0.0,0.0,27.2727272727,0.0,0.0,99.2398687646,10.7791392933,3.73847926283
|
||||
100,39799236,275730.000019,155.952380952,134547.664928,20.5238095238,1031.5,04:35.7,02:14.5,473.61435974,145.189490569,338.509542,1.37292517007,591.61326,0.57139299945,1031.5,1.77551020408,3252,50.0,191293.118277,03:11.2,02:14.5,0,156,0,0,0,0,0,134547.664928,2.7864e+11,4,0.0,0.0,0.0,0.0,0.0,28.3088235294,0.0,0.0,98.9701817819,10.8639338939,3.7161551653
|
||||
101,39799237,278670.000076,155.666666667,134591.850827,20.5238095238,1042.5,04:38.6,02:14.5,480.52150734,144.489783388,349.18527,1.37204081633,657.446916,0.553762484655,1042.5,1.83428571429,3252,50.0,191293.118277,03:11.2,02:14.5,0,156,0,0,0,0,0,134591.850827,2.8163e+11,4,0.0,0.0,0.0,0.0,0.0,27.2727272727,0.0,0.0,99.3515411645,10.8603673133,3.71493516828
|
||||
102,39799238,281549.999952,155.333333333,134423.247406,20.4761904762,1053.3,04:41.5,02:14.4,472.94803454,144.606244787,356.747244,1.36782312925,633.87135,0.563911081988,1053.3,1.82857142857,3252,50.0,191293.118277,03:11.2,02:14.4,0,155,0,0,0,0,0,134423.247406,2.8444e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,99.6455359429,10.8992775233,3.71959471034
|
||||
103,39799239,284460.000038,155.047619048,134984.759451,20.380952381,1064.1,04:44.4,02:14.9,468.36794146,147.302158424,344.73705,1.35897959184,590.723616,0.58176866823,1064.1,1.76252319109,3252,50.0,191293.118277,03:11.2,02:14.9,0,155,0,0,0,0,0,134984.759451,2.8736e+11,4,0.0,0.0,0.0,0.0,0.0,28.3088235294,0.0,0.0,96.6061384746,10.9046578503,3.70412187296
|
||||
104,39799240,287490.00001,154.904761905,135735.508722,20.3333333333,1075.3,04:47.4,02:15.7,468.37251072,142.288881459,330.502746,1.34503401361,531.117468,0.602317043727,1075.3,1.79428571429,3252,50.0,191293.118277,03:11.2,02:15.7,0,155,0,0,0,0,0,135735.508722,2.9054e+11,4,0.0,0.0,0.0,0.0,0.0,26.6903914591,0.0,0.0,98.3595773926,10.8697410866,3.68363447936
|
||||
105,39799241,290430.000067,155.0,135982.562299,20.4285714286,1086.1,04:50.4,02:15.9,469.90348516,135.932254618,356.747244,1.33870748299,605.847564,0.602943727733,1086.1,1.78285714286,3252,50.0,191293.118277,03:11.2,02:15.9,0,155,0,0,0,0,0,135982.562299,2.9336e+11,4,0.0,0.0,0.0,0.0,0.0,26.4084507042,0.0,0.0,102.399034847,10.7994101869,3.67694203982
|
||||
106,39799242,293519.999981,155.0,136032.213736,20.2380952381,1097.5,04:53.5,02:16.0,476.17202572,140.910419686,370.981548,1.34136054422,621.416334,0.591585810569,1097.5,1.80308880309,3252,50.0,191293.118277,03:11.2,02:16.0,0,155,0,0,0,0,0,136032.213736,2.9661e+11,4,0.0,0.0,0.0,0.0,0.0,26.4285714286,0.0,0.0,98.673296846,10.8970728364,3.67559996467
|
||||
107,39799243,296460.000038,155.0,135481.330839,20.2857142857,1108.5,04:56.4,02:15.4,482.15046366,145.657214744,346.96116,1.34870748299,598.730412,0.581032083517,1108.5,1.80380952381,3252,50.0,191293.118277,03:11.2,02:15.4,0,155,0,0,0,0,0,135481.330839,2.9942e+11,4,0.0,0.0,0.0,0.0,0.0,27.1739130435,0.0,0.0,96.6268186374,10.9156976115,3.69054538292
|
||||
108,39799244,299339.999914,155.0,134935.69799,20.0476190476,1119.2,04:59.3,02:14.9,476.637364,142.63489588,347.405982,1.35278911565,609.850962,0.577901402085,1119.2,1.80952380952,3252,50.0,191293.118277,03:11.2,02:14.9,0,155,0,0,0,0,0,134935.69799,3.022e+11,4,0.0,0.0,0.0,0.0,0.0,27.1739130435,0.0,0.0,99.8761229337,11.0900012149,3.70546865988
|
||||
109,39799245,302460.000038,155.0,135043.604152,20.0476190476,1130.6,05:02.4,02:15.0,468.32061482,142.63489588,353.63349,1.34972789116,602.288988,0.576596521567,1130.6,1.78007518797,3252,50.0,191293.118277,03:11.2,02:15.0,0,155,0,0,0,0,0,135043.604152,3.0557e+11,4,0.0,0.0,0.0,0.0,0.0,27.0462633452,0.0,0.0,99.636897092,11.0811397846,3.70250781692
|
||||
110,39799246,305400.000095,155.095238095,135598.957647,20.2857142857,1141.3,05:05.4,02:15.5,466.61609928,142.63489588,350.074914,1.34136054422,615.188826,0.57950500723,1141.3,1.80694980695,3252,50.0,191293.118277,03:11.2,02:15.5,0,155,0,0,0,0,0,135598.957647,3.0828e+11,4,0.0,0.0,0.0,0.0,0.0,27.4074074074,0.0,0.0,98.4176977661,10.9062286695,3.68734397873
|
||||
111,39799247,308339.999914,154.952380952,135967.371232,20.2380952381,1152.4,05:08.3,02:15.9,467.18544118,142.288881459,342.51294,1.3368707483,584.496108,0.574952299315,1152.4,1.80115830116,3252,50.0,191293.118277,03:11.2,02:15.9,0,155,0,0,0,0,0,135967.371232,3.1135e+11,4,0.0,0.0,0.0,0.0,0.0,26.334519573,0.0,0.0,97.8572429727,10.9022696236,3.67735284921
|
||||
112,39799248,311309.999943,154.761904762,135961.143967,20.3333333333,1163.3,05:11.3,02:15.9,472.28473534,138.4064164,350.519736,1.33816326531,616.968114,0.565898195666,1163.3,1.81081081081,3252,50.0,191293.118277,03:11.2,02:15.9,0,155,0,0,0,0,0,135961.143967,3.1427e+11,4,0.0,0.0,0.0,0.0,0.0,26.714801444,0.0,0.0,100.616079279,10.8517021335,3.67752127858
|
||||
113,39799249,314099.999905,154.380952381,135472.697606,20.4761904762,1173.8,05:14.1,02:15.4,476.19886634,140.6815452,361.195464,1.34476190476,652.553874,0.567410171149,1173.8,1.79428571429,3252,50.0,191293.118277,03:11.2,02:15.4,0,154,0,0,0,0,0,135472.697606,3.169e+11,4,0.0,0.0,0.0,0.0,0.0,26.9784172662,0.0,0.0,100.063474348,10.8148453892,3.69078056934
|
||||
114,39799250,317039.999962,153.571428571,135069.827373,20.5714285714,1184.8,05:17.0,02:15.0,476.06675118,146.125942348,356.302422,1.34918367347,628.533486,0.568519165753,1184.8,1.8,3252,50.0,191293.118277,03:11.2,02:15.0,0,154,0,0,0,0,0,135069.827373,3.1997e+11,4,0.0,0.0,0.0,0.0,0.0,27.6752767528,0.0,0.0,97.199870211,10.7968845574,3.7017889911
|
||||
115,39799251,320039.999962,153.047619048,134758.406653,20.9523809524,1195.8,05:20.0,02:14.7,466.5308266,146.008666317,338.509542,1.35210884354,581.827176,0.566821772936,1195.8,1.82818532819,3252,50.0,191293.118277,03:11.2,02:14.7,0,153,0,0,0,0,0,134758.406653,3.2304e+11,4,0.0,0.0,0.0,0.0,0.0,27.4074074074,0.0,0.0,97.9539172087,10.6250750315,3.7103436618
|
||||
116,39799252,322980.000019,152.666666667,135247.376024,21.0952380952,1206.6,05:22.9,02:15.2,450.82037928,141.368913101,338.06472,1.35523809524,596.06148,0.563176694837,1206.6,1.77819548872,3252,50.0,191293.118277,03:11.2,02:15.2,0,152,0,0,0,0,0,135247.376024,3.2589e+11,4,0.0,0.0,0.0,0.0,0.0,27.9411764706,0.0,0.0,100.075456865,10.514968482,3.69692939485
|
||||
117,39799253,325950.000048,152.380952381,136052.446984,21.0,1217.3,05:25.9,02:16.0,459.2995944,141.02494996,331.39239,1.35605442177,616.523292,0.556395600922,1217.3,1.78759398496,3252,50.0,191293.118277,03:11.2,02:16.0,0,153,0,0,0,0,0,136052.446984,3.2886e+11,4,0.0,0.0,0.0,0.0,0.0,28.0442804428,0.0,0.0,98.549180766,10.5001524062,3.67505334217
|
||||
118,39799254,328710.000038,152.142857143,135654.45421,21.0952380952,1227.8,05:28.7,02:15.6,465.51163954,139.654676675,333.171678,1.35632653061,600.064878,0.553329814852,1227.8,1.78759398496,3252,50.0,191293.118277,03:11.2,02:15.6,0,152,0,0,0,0,0,135654.45421,3.3157e+11,4,0.0,0.0,0.0,0.0,0.0,28.4644194757,0.0,0.0,100.394607355,10.4834146762,3.68583547744
|
||||
119,39799255,331589.999914,151.80952381,135173.649715,20.8571428571,1238.7,05:31.5,02:15.1,464.95415956,142.519495485,373.205658,1.35496598639,667.233,0.543275865074,1238.7,1.82625482625,3252,50.0,191293.118277,03:11.2,02:15.1,0,152,0,0,0,0,0,135173.649715,3.3447e+11,4,0.0,0.0,0.0,0.0,0.0,27.6119402985,0.0,0.0,99.4300477765,10.6408029036,3.69894577127
|
||||
120,39799256,334500.0,151.333333333,135112.064898,20.7142857143,1249.5,05:34.5,02:15.1,466.40188874,148.721928541,328.278636,1.34945578231,595.616658,0.54902713476,1249.5,1.82818532819,3252,50.0,191293.118277,03:11.2,02:15.1,0,151,0,0,0,0,0,135112.064898,3.3743e+11,4,0.0,0.0,0.0,0.0,0.0,27.2058823529,0.0,0.0,95.4136790238,10.7190713365,3.70063177094
|
||||
121,39799257,337410.000086,150.904761905,134933.599238,20.7619047619,1260.1,05:37.4,02:14.9,464.5347257,140.795951439,336.730254,1.34741496599,648.105654,0.556663049463,1260.1,1.77255639098,3252,50.0,191293.118277,03:11.2,02:14.9,0,151,0,0,0,0,0,134933.599238,3.4029e+11,4,0.0,0.0,0.0,0.0,0.0,28.0442804428,0.0,0.0,101.185332369,10.7086310348,3.70552629458
|
||||
122,39799258,340319.999933,150.619047619,135170.211574,20.6666666667,1270.9,05:40.3,02:15.1,459.90080008,141.25419665,351.40938,1.35034013605,594.727014,0.561725982989,1270.9,1.79238095238,3252,50.0,191293.118277,03:11.2,02:15.1,0,151,0,0,0,0,0,135170.211574,3.4322e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,100.328357903,10.73914797,3.69903985633
|
||||
123,39799259,343230.000019,150.666666667,135602.343052,20.4285714286,1281.8,05:43.2,02:15.6,464.98638646,144.72276875,345.181872,1.35442176871,592.502904,0.569723096921,1281.8,1.85909980431,3252,50.0,191293.118277,03:11.2,02:15.6,0,150,0,0,0,0,0,135602.343052,3.4615e+11,4,0.0,0.0,0.0,0.0,0.0,26.7399267399,0.0,0.0,96.99058988,10.8296909587,3.68725192165
|
||||
124,39799260,346200.000048,150.714285714,135536.874693,20.4761904762,1292.7,05:46.2,02:15.5,467.51112956,142.173667796,342.068118,1.35965986395,613.85436,0.585593542607,1292.7,1.79323308271,3252,50.0,191293.118277,03:11.2,02:15.5,0,151,0,0,0,0,0,135536.874693,3.4917e+11,4,0.0,0.0,0.0,0.0,0.0,27.5362318841,0.0,0.0,98.8727185455,10.8097245298,3.68903297447
|
||||
125,39799261,349079.999924,150.761904762,135425.973283,20.4761904762,1303.4,05:49.0,02:15.4,466.74228348,140.910419686,331.837212,1.36217687075,572.485914,0.575030221445,1303.4,1.74542124542,3252,50.0,191293.118277,03:11.2,02:15.4,0,151,0,0,0,0,0,135425.973283,3.5198e+11,4,0.0,0.0,0.0,0.0,0.0,28.5714285714,0.0,0.0,100.004384112,10.8185766995,3.69205395302
|
||||
126,39799262,351990.00001,151.142857143,135481.539224,20.4285714286,1314.3,05:51.9,02:15.4,471.5936272,141.25419665,358.08171,1.36081632653,597.840768,0.576985128294,1314.3,1.78947368421,3252,50.0,191293.118277,03:11.2,02:15.4,0,151,0,0,0,0,0,135481.539224,3.5489e+11,4,0.0,0.0,0.0,0.0,0.0,27.9411764706,0.0,0.0,99.6383021711,10.8393473897,3.69053970648
|
||||
127,39799263,354960.000038,151.333333333,135051.927441,20.7619047619,1325.2,05:54.9,02:15.0,474.18336878,146.008666317,345.181872,1.35802721088,623.640444,0.572062929127,1325.2,1.83590733591,3252,50.0,191293.118277,03:11.2,02:15.0,0,151,0,0,0,0,0,135051.927441,3.5792e+11,4,0.0,0.0,0.0,0.0,0.0,26.714801444,0.0,0.0,97.3166274991,10.699248473,3.70227963033
|
||||
128,39799264,357869.999886,151.666666667,134819.049813,20.619047619,1336.1,05:57.8,02:14.8,467.4154777,142.865883521,348.295626,1.36115646259,608.071674,0.564547005389,1336.1,1.81333333333,3252,50.0,191293.118277,03:11.2,02:14.8,0,152,0,0,0,0,0,134819.049813,3.6078e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,99.9736911607,10.7919864439,3.70867470652
|
||||
129,39799265,360779.999971,151.952380952,135272.90821,20.5238095238,1346.9,06:00.7,02:15.2,455.47560794,144.373384534,335.84061,1.36503401361,610.740606,0.563426030056,1346.9,1.76437847866,3252,50.0,191293.118277,03:11.2,02:15.2,0,152,0,0,0,0,0,135272.90821,3.637e+11,4,0.0,0.0,0.0,0.0,0.0,28.0,0.0,0.0,97.937367391,10.8056887126,3.69623161517
|
||||
130,39799266,363690.000057,152.0,135946.220926,20.380952381,1357.4,06:03.6,02:15.9,458.91508058,141.25419665,320.716662,1.36170068027,550.244814,0.574332484059,1357.4,1.80639097744,3252,50.0,191293.118277,03:11.2,02:15.9,0,152,0,0,0,0,0,135946.220926,3.6655e+11,4,0.0,0.0,0.0,0.0,0.0,28.5714285714,0.0,0.0,98.6200609246,10.8275361154,3.67792496617
|
||||
131,39799267,366539.999962,152.142857143,135707.336479,20.5238095238,1368.1,06:06.5,02:15.7,453.16259406,138.18026217,342.51294,1.35258503401,590.278794,0.573720093413,1368.1,1.80952380952,3252,50.0,191293.118277,03:11.2,02:15.7,0,152,0,0,0,0,0,135707.336479,3.6945e+11,4,0.0,0.0,0.0,0.0,0.0,27.6752767528,0.0,0.0,101.34726938,10.7710973871,3.68439918557
|
||||
132,39799268,369450.000048,152.285714286,135871.183186,20.619047619,1379.0,06:09.4,02:15.8,455.26642056,141.943427083,352.299024,1.34517006803,610.295784,0.584665452957,1379.0,1.73283858998,3252,50.0,191293.118277,03:11.2,02:15.8,0,152,0,0,0,0,0,135871.183186,3.7236e+11,4,0.0,0.0,0.0,0.0,0.0,28.5185185185,0.0,0.0,98.3038859372,10.7084175161,3.67995617816
|
||||
133,39799269,372329.999924,152.333333333,135911.92446,20.7619047619,1389.5,06:12.3,02:15.9,454.40304224,144.72276875,323.385594,1.33952380952,565.813584,0.57809127753,1389.5,1.85714285714,3252,50.0,191293.118277,03:11.2,02:15.9,0,153,0,0,0,0,0,135911.92446,3.7519e+11,4,0.0,0.0,0.0,0.0,0.0,26.8656716418,0.0,0.0,96.3293202928,10.6315478511,3.67885306595
|
||||
134,39799270,375150.000095,152.380952381,136089.743077,20.5238095238,1399.9,06:15.1,02:16.0,446.34779998,137.615954692,339.399186,1.34727891156,568.927338,0.575237962562,1399.9,1.80380952381,3252,50.0,191293.118277,03:11.2,02:16.0,0,152,0,0,0,0,0,136089.743077,3.7798e+11,4,0.0,0.0,0.0,0.0,0.0,27.6752767528,0.0,0.0,100.907413543,10.7408310451,3.67404617493
|
||||
135,39799271,378089.999914,152.095238095,136630.270895,20.3333333333,1410.7,06:18.0,02:16.6,457.51715936,138.4064164,330.947568,1.36482993197,595.171836,0.572597794735,1410.7,1.74175824176,3252,50.0,191293.118277,03:11.2,02:16.6,0,152,0,0,0,0,0,136630.270895,3.8102e+11,4,0.0,0.0,0.0,0.0,0.0,28.1588447653,0.0,0.0,99.1450490667,10.7985574969,3.65951115171
|
||||
136,39799272,381150.000095,151.476190476,136418.047659,20.1904761905,1422.0,06:21.1,02:16.4,470.8275953,139.199899252,334.950966,1.37551020408,584.051286,0.576811197542,1422.0,1.76556776557,3252,50.0,191293.118277,03:11.2,02:16.4,0,152,0,0,0,0,0,136418.047659,3.8423e+11,4,0.0,0.0,0.0,0.0,0.0,28.1588447653,0.0,0.0,99.0406846396,10.8918803787,3.66520419093
|
||||
137,39799273,384029.999971,151.476190476,135619.718841,20.0952380952,1432.8,06:24.0,02:15.6,468.96106772,141.02494996,359.860998,1.37557823129,624.085266,0.570099974688,1432.8,1.84761904762,3252,50.0,191293.118277,03:11.2,02:15.6,0,151,0,0,0,0,0,135619.718841,3.8691e+11,4,0.0,0.0,0.0,0.0,0.0,27.8810408922,0.0,0.0,99.495530275,11.0079198513,3.68677950576
|
||||
138,39799274,387000.0,151.238095238,135248.659164,20.380952381,1443.6,06:27.0,02:15.2,471.66113726,145.657214744,335.395788,1.36843537415,569.37216,0.579103403429,1443.6,1.81904761905,3252,50.0,191293.118277,03:11.2,02:15.2,0,151,0,0,0,0,0,135248.659164,3.8992e+11,4,0.0,0.0,0.0,0.0,0.0,27.5735294118,0.0,0.0,97.1263656849,10.883380478,3.69689432109
|
||||
139,39799275,389880.000114,151.285714286,135020.184383,20.619047619,1454.4,06:29.8,02:15.0,474.42741568,142.750358554,339.844008,1.35217687075,611.63025,0.576122113145,1454.4,1.75139146568,3252,50.0,191293.118277,03:11.2,02:15.0,0,152,0,0,0,0,0,135020.184383,3.928e+11,4,0.0,0.0,0.0,0.0,0.0,28.3088235294,0.0,0.0,99.6081207115,10.7759100213,3.70315003112
|
||||
140,39799276,392789.999962,151.523809524,134604.605094,20.8095238095,1465.1,06:32.7,02:14.6,468.0654625,143.328606672,358.971354,1.33258503401,607.626852,0.574599185498,1465.1,1.85912698413,3252,50.0,191293.118277,03:11.2,02:14.6,0,151,0,0,0,0,0,134604.605094,3.9566e+11,4,0.0,0.0,0.0,0.0,0.0,26.8656716418,0.0,0.0,100.127969837,10.7102397889,3.71458316489
|
||||
141,39799277,395640.000105,151.857142857,134531.510854,20.9523809524,1475.9,06:35.6,02:14.5,467.13629894,145.3063276,364.75404,1.3274829932,641.878146,0.575502759115,1475.9,1.81409001957,3252,50.0,191293.118277,03:11.2,02:14.5,0,152,0,0,0,0,0,134531.510854,3.9851e+11,4,0.0,0.0,0.0,0.0,0.0,27.4436090226,0.0,0.0,98.9262300291,10.6429948844,3.71660138822
|
||||
142,39799278,398490.00001,152.095238095,134717.801846,21.0476190476,1486.6,06:38.4,02:14.7,465.17181974,148.129254179,339.844008,1.32952380952,587.16504,0.580404599147,1486.6,1.80626223092,3252,50.0,191293.118277,03:11.2,02:14.7,0,152,0,0,0,0,0,134717.801846,4.0137e+11,4,0.0,0.0,0.0,0.0,0.0,27.037037037,0.0,0.0,96.6389592792,10.5801857438,3.71146198313
|
||||
143,39799279,401430.000067,152.80952381,135058.857384,20.5714285714,1497.4,06:41.4,02:15.0,459.83634628,142.519495485,334.061322,1.33897959184,574.710024,0.572980352813,1497.4,1.82432432432,3252,50.0,191293.118277,03:11.2,02:15.0,0,153,0,0,0,0,0,135058.857384,4.0436e+11,4,0.0,0.0,0.0,0.0,0.0,27.1062271062,0.0,0.0,99.6837929441,10.797761521,3.70208966435
|
||||
144,39799280,404369.999886,153.380952381,135382.877147,20.4761904762,1508.2,06:44.3,02:15.3,462.27917556,139.427164349,353.63349,1.35387755102,619.192224,0.57310518315,1508.2,1.77819548872,3252,50.0,191293.118277,03:11.2,02:15.3,0,153,0,0,0,0,0,135382.877147,4.0729e+11,4,0.0,0.0,0.0,0.0,0.0,27.8388278388,0.0,0.0,101.164800904,10.8220205535,3.69322923651
|
||||
145,39799281,407309.999943,153.714285714,135730.342589,20.2380952381,1519.2,06:47.3,02:15.7,467.68470092,143.676303949,341.178474,1.36503401361,601.399344,0.577255450082,1519.2,1.77179962894,3252,50.0,191293.118277,03:11.2,02:15.7,0,154,0,0,0,0,0,135730.342589,4.1027e+11,4,0.0,0.0,0.0,0.0,0.0,27.8985507246,0.0,0.0,97.4208829178,10.9213084776,3.68377468489
|
||||
146,39799282,410279.999971,153.619047619,135519.060217,20.2857142857,1530.0,06:50.2,02:15.5,473.7156097,143.328606672,343.402584,1.36544217687,591.61326,0.578325132737,1530.0,1.85135135135,3252,50.0,191293.118277,03:11.2,02:15.5,0,154,0,0,0,0,0,135519.060217,4.1321e+11,4,0.0,0.0,0.0,0.0,0.0,27.0072992701,0.0,0.0,98.1146867082,10.9126586111,3.68951791136
|
||||
147,39799283,413160.000086,153.428571429,135030.376252,20.7142857143,1540.9,06:53.1,02:15.0,470.76256656,141.25419665,338.954364,1.36789115646,567.14805,0.582445358297,1540.9,1.77365491651,3252,50.0,191293.118277,03:11.2,02:15.0,0,153,0,0,0,0,0,135030.376252,4.1609e+11,4,0.0,0.0,0.0,0.0,0.0,28.2051282051,0.0,0.0,100.640376183,10.7255559991,3.7028705235
|
||||
148,39799284,415950.000048,153.142857143,135084.603998,20.7619047619,1551.3,06:55.9,02:15.0,463.76388246,143.328606672,357.192066,1.36448979592,628.088664,0.583689111117,1551.3,1.81523809524,3252,50.0,191293.118277,03:11.2,02:15.0,0,153,0,0,0,0,0,135084.603998,4.1871e+11,4,0.0,0.0,0.0,0.0,0.0,27.6752767528,0.0,0.0,99.0643976896,10.6966603571,3.70138406006
|
||||
149,39799285,419039.999962,152.857142857,135426.313714,20.4285714286,1562.6,06:59.0,02:15.4,464.7047869,145.89145305,331.39239,1.36265306122,568.927338,0.579244873232,1562.6,1.79887218045,3252,50.0,191293.118277,03:11.2,02:15.4,0,153,0,0,0,0,0,135426.313714,4.221e+11,4,0.0,0.0,0.0,0.0,0.0,27.5362318841,0.0,0.0,96.58930096,10.8437675682,3.69204467202
|
||||
150,39799286,421950.000048,152.666666667,135393.051047,20.4761904762,1573.3,07:01.9,02:15.3,469.49915104,140.910419686,329.613102,1.36176870748,571.151448,0.571828605124,1573.3,1.78571428571,3252,50.0,191293.118277,03:11.2,02:15.3,0,153,0,0,0,0,0,135393.051047,4.2488e+11,4,0.0,0.0,0.0,0.0,0.0,27.7372262774,0.0,0.0,100.077353187,10.8212073496,3.69295171453
|
||||
151,39799287,424890.000105,152.333333333,135335.644206,20.4761904762,1584.2,07:04.8,02:15.3,463.31385574,139.199899252,360.750642,1.35925170068,631.64724,0.574232861636,1584.2,1.79323308271,3252,50.0,191293.118277,03:11.2,02:15.3,0,152,0,0,0,0,0,135335.644206,4.2782e+11,4,0.0,0.0,0.0,0.0,0.0,27.7372262774,0.0,0.0,101.4360992,10.8257975027,3.69451819536
|
||||
152,39799288,427650.000095,152.047619048,135640.381081,20.4285714286,1594.6,07:07.6,02:15.6,462.32556414,145.3063276,345.626694,1.35578231293,609.850962,0.574948423137,1594.6,1.80761904762,3252,50.0,191293.118277,03:11.2,02:15.6,0,152,0,0,0,0,0,135640.381081,4.3043e+11,4,0.0,0.0,0.0,0.0,0.0,27.4725274725,0.0,0.0,96.5198223331,10.8266539568,3.68621789483
|
||||
153,39799289,430769.999981,151.904761905,135755.601608,20.6666666667,1606.0,07:10.7,02:15.7,463.34272378,143.328606672,325.164882,1.35476190476,558.696432,0.57418260892,1606.0,1.77819548872,3252,50.0,191293.118277,03:11.2,02:15.7,0,152,0,0,0,0,0,135755.601608,4.3388e+11,4,0.0,0.0,0.0,0.0,0.0,27.4368231047,0.0,0.0,97.6027129202,10.6928398242,3.68308927277
|
||||
154,39799290,433500.0,152.095238095,135778.261376,20.8571428571,1616.2,07:13.5,02:15.7,455.75194226,137.728693043,337.175076,1.35047619048,582.271998,0.570176939833,1616.2,1.80380952381,3252,50.0,191293.118277,03:11.2,02:15.7,0,152,0,0,0,0,0,135778.261376,4.3627e+11,4,0.0,0.0,0.0,0.0,0.0,27.1739130435,0.0,0.0,101.520298996,10.5934201087,3.68247460922
|
||||
155,39799291,436559.999943,151.857142857,136008.019233,20.6666666667,1627.4,07:16.5,02:16.0,462.31796888,139.882436364,356.302422,1.34870748299,638.764392,0.569221632348,1627.4,1.8,3252,50.0,191293.118277,03:11.2,02:16.0,0,152,0,0,0,0,0,136008.019233,4.3958e+11,4,0.0,0.0,0.0,0.0,0.0,27.5735294118,0.0,0.0,99.4514934249,10.6729949558,3.67625381812
|
||||
156,39799292,439440.000057,151.80952381,135665.72469,20.5238095238,1638.0,07:19.4,02:15.6,473.08898562,144.024563085,341.623296,1.34448979592,608.071674,0.567993168719,1638.0,1.76691729323,3252,50.0,191293.118277,03:11.2,02:15.6,0,152,0,0,0,0,0,135665.72469,4.4228e+11,4,0.0,0.0,0.0,0.0,0.0,27.8388278388,0.0,0.0,97.3242489105,10.7744011297,3.68552927531
|
||||
157,39799293,442440.000057,151.619047619,135182.475263,20.3333333333,1649.2,07:22.4,02:15.1,469.43076344,142.750358554,350.964558,1.34108843537,604.068276,0.56991134906,1649.2,1.8166023166,3252,50.0,191293.118277,03:11.2,02:15.1,0,151,0,0,0,0,0,135182.475263,4.4549e+11,4,0.0,0.0,0.0,0.0,0.0,26.8115942029,0.0,0.0,99.2498030347,10.9142093544,3.69870428121
|
||||
158,39799294,445380.000114,151.380952381,135350.796391,20.0952380952,1660.2,07:25.3,02:15.3,461.95330562,142.519495485,352.743846,1.34394557823,612.519894,0.577038136948,1660.2,1.80888030888,3252,50.0,191293.118277,03:11.2,02:15.3,0,152,0,0,0,0,0,135350.796391,4.4833e+11,4,0.0,0.0,0.0,0.0,0.0,26.8115942029,0.0,0.0,99.0401573532,11.0297909954,3.69410460323
|
||||
159,39799295,448259.99999,151.285714286,135812.873651,20.2380952381,1670.8,07:28.2,02:15.8,459.0357272,141.483691644,332.726856,1.35428571429,584.496108,0.573893979377,1670.8,1.77819548872,3252,50.0,191293.118277,03:11.2,02:15.8,0,151,0,0,0,0,0,135812.873651,4.5114e+11,4,0.0,0.0,0.0,0.0,0.0,28.4644194757,0.0,0.0,98.750395978,10.9146717931,3.68153612069
|
||||
160,39799296,451140.000105,151.095238095,136053.741379,20.6666666667,1681.4,07:31.1,02:16.0,454.00415492,140.224539997,332.726856,1.36387755102,579.603066,0.565565878403,1681.4,1.79887218045,3252,50.0,191293.118277,03:11.2,02:16.0,0,151,0,0,0,0,0,136053.741379,4.5402e+11,4,0.0,0.0,0.0,0.0,0.0,28.0442804428,0.0,0.0,99.1088765411,10.669408195,3.67501837828
|
||||
161,39799297,454049.999952,150.571428571,136050.158308,20.9523809524,1692.1,07:34.0,02:16.0,460.1101085,140.224539997,331.39239,1.36965986395,598.730412,0.557429377781,1692.1,1.76373626374,3252,50.0,191293.118277,03:11.2,02:16.0,0,151,0,0,0,0,0,136050.158308,4.5695e+11,4,0.0,0.0,0.0,0.0,0.0,28.7822878229,0.0,0.0,99.1167072582,10.5241934271,3.67511516501
|
||||
162,39799298,456839.999914,150.333333333,135508.685793,21.1904761905,1702.5,07:36.8,02:15.5,467.22011914,141.25419665,342.957762,1.36659863946,616.523292,0.560940991906,1702.5,1.79511278195,3252,50.0,191293.118277,03:11.2,02:15.5,0,150,0,0,0,0,0,135508.685793,4.5964e+11,4,0.0,0.0,0.0,0.0,0.0,28.2527881041,0.0,0.0,99.5784322917,10.4475246645,3.68980037756
|
||||
163,39799299,459839.999914,150.047619048,135121.507637,20.8571428571,1713.7,07:39.8,02:15.1,468.19403724,143.90841425,354.078312,1.35707482993,636.540282,0.562610728352,1713.7,1.80761904762,3252,50.0,191293.118277,03:11.2,02:15.1,0,150,0,0,0,0,0,135121.507637,4.6283e+11,4,0.0,0.0,0.0,0.0,0.0,27.8810408922,0.0,0.0,98.5844481751,10.6449090862,3.70037315852
|
||||
164,39799300,462750.0,149.904761905,135122.935,20.7142857143,1724.4,07:42.7,02:15.1,460.93820366,145.657214744,337.175076,1.34870748299,573.82038,0.566754084449,1724.4,1.82432432432,3252,50.0,191293.118277,03:11.2,02:15.1,0,150,0,0,0,0,0,135122.935,4.6566e+11,4,0.0,0.0,0.0,0.0,0.0,27.2058823529,0.0,0.0,97.397729605,10.7182090299,3.70033406986
|
||||
165,39799301,465690.000057,149.904761905,135409.984588,20.7619047619,1735.1,07:45.6,02:15.4,460.1344678,141.02494996,338.509542,1.34823129252,604.95792,0.574200782538,1735.1,1.76879699248,3252,50.0,191293.118277,03:11.2,02:15.4,0,150,0,0,0,0,0,135409.984588,4.6859e+11,4,0.0,0.0,0.0,0.0,0.0,28.0442804428,0.0,0.0,99.958567598,10.6709570408,3.69248989667
|
||||
166,39799302,468539.999962,150.142857143,135705.405237,20.4761904762,1745.6,07:48.5,02:15.7,451.04914488,140.338698368,329.16828,1.35238095238,580.937532,0.569293296429,1745.6,1.77819548872,3252,50.0,191293.118277,03:11.2,02:15.7,0,150,0,0,0,0,0,135705.405237,4.7139e+11,4,0.0,0.0,0.0,0.0,0.0,28.679245283,0.0,0.0,99.7927892396,10.7963000922,3.68445161877
|
||||
167,39799303,471390.000105,150.285714286,136086.491159,20.7142857143,1756.3,07:51.3,02:16.0,446.03839148,141.02494996,346.516338,1.35891156463,593.392548,0.56601285805,1756.3,1.83976833977,3252,50.0,191293.118277,03:11.2,02:16.0,0,150,0,0,0,0,0,136086.491159,4.7428e+11,4,0.0,0.0,0.0,0.0,0.0,27.4074074074,0.0,0.0,98.4752383869,10.642319085,3.67413396981
|
||||
168,39799304,474059.999943,150.333333333,136277.633993,20.9523809524,1766.2,07:54.0,02:16.2,440.85237216,141.483691644,308.706468,1.36414965986,565.368762,0.5702633677,1766.2,1.74908424908,3252,50.0,191293.118277,03:11.2,02:16.2,0,151,0,0,0,0,0,136277.633993,4.7673e+11,4,0.0,0.0,0.0,0.0,0.0,28.4671532847,0.0,0.0,97.7435046018,10.5066263617,3.66898063425
|
||||
169,39799305,477059.999943,150.285714286,136497.120011,21.1904761905,1777.1,07:57.0,02:16.4,442.06706908,137.728693043,319.827018,1.36027210884,551.134458,0.560617166152,1777.1,1.79323308271,3252,50.0,191293.118277,03:11.2,02:16.4,0,150,0,0,0,0,0,136497.120011,4.8006e+11,4,0.0,0.0,0.0,0.0,0.0,28.5714285714,0.0,0.0,99.9247691213,10.3718696553,3.66308094969
|
||||
170,39799306,479880.000114,150.238095238,136580.031401,21.4285714286,1787.5,07:59.8,02:16.5,432.87365744,137.728693043,330.057924,1.35183673469,588.499506,0.562084297404,1787.5,1.78195488722,3252,50.0,191293.118277,03:11.2,02:16.5,0,150,0,0,0,0,0,136580.031401,4.8271e+11,4,0.0,0.0,0.0,0.0,0.0,29.1187739464,0.0,0.0,99.7429005188,10.2504003377,3.66085726348
|
||||
171,39799307,482609.999895,149.857142857,136811.69351,21.4761904762,1797.7,08:02.6,02:16.8,449.45807408,139.76852559,336.730254,1.34448979592,614.744004,0.574192025951,1797.7,1.80888030888,3252,50.0,191293.118277,03:11.2,02:16.8,0,150,0,0,0,0,0,136811.69351,4.8534e+11,4,0.0,0.0,0.0,0.0,0.0,28.5714285714,0.0,0.0,97.7887746272,10.2103537446,3.65465836415
|
||||
172,39799308,485579.999924,149.666666667,136176.08526,21.3333333333,1808.4,08:05.5,02:16.1,450.0774055,140.224539997,318.492552,1.34136054422,534.231222,0.567041996588,1808.4,1.78857142857,3252,50.0,191293.118277,03:11.2,02:16.1,0,150,0,0,0,0,0,136176.08526,4.8854e+11,4,0.0,0.0,0.0,0.0,0.0,28.1954887218,0.0,0.0,98.841991041,10.3267030868,3.67171665307
|
||||
173,39799309,488279.999971,149.428571429,135744.803044,21.4285714286,1818.4,08:08.2,02:15.7,446.29018494,138.4064164,356.302422,1.34741496599,620.081868,0.570033589223,1818.4,1.79619047619,3252,50.0,191293.118277,03:11.2,02:15.7,0,149,0,0,0,0,0,135744.803044,4.9094e+11,4,0.0,0.0,0.0,0.0,0.0,28.1954887218,0.0,0.0,101.097911766,10.31347034,3.68338226429
|
||||
174,39799310,491069.999933,149.0,135655.993062,21.2380952381,1828.9,08:11.0,02:15.6,452.80389202,145.657214744,319.827018,1.35897959184,586.275396,0.57254419599,1828.9,1.78383458647,3252,50.0,191293.118277,03:11.2,02:15.6,0,149,0,0,0,0,0,135655.993062,4.9388e+11,4,0.0,0.0,0.0,0.0,0.0,29.2307692308,0.0,0.0,96.2540669287,10.4127803124,3.68579366613
|
||||
175,39799311,494039.999962,148.666666667,135300.864262,21.2857142857,1839.9,08:14.0,02:15.3,457.61477812,141.713435077,326.054526,1.36326530612,563.144652,0.568145934555,1839.9,1.80263157895,3252,50.0,191293.118277,03:11.2,02:15.3,0,149,0,0,0,0,0,135300.864262,4.9705e+11,4,0.0,0.0,0.0,0.0,0.0,28.2527881041,0.0,0.0,99.7138091099,10.4167551393,3.69546789466
|
||||
176,39799312,496890.000105,148.285714286,134976.811268,21.2380952381,1850.5,08:16.8,02:14.9,450.62353798,141.483691644,347.850804,1.36238095238,599.620056,0.571160947145,1850.5,1.82285714286,3252,50.0,191293.118277,03:11.2,02:14.9,0,148,0,0,0,0,0,134976.811268,4.9972e+11,4,0.0,0.0,0.0,0.0,0.0,28.4090909091,0.0,0.0,100.596800752,10.4651757627,3.7043399922
|
||||
177,39799313,499769.999981,147.619047619,135463.633431,20.8571428571,1861.2,08:19.7,02:15.4,456.67402498,144.839355293,330.502746,1.3587755102,574.710024,0.579918778356,1861.2,1.75510204082,3252,50.0,191293.118277,03:11.2,02:15.4,0,148,0,0,0,0,0,135463.633431,5.0265e+11,4,0.0,0.0,0.0,0.0,0.0,28.7313432836,0.0,0.0,97.2105277427,10.6180243948,3.69102752773
|
||||
178,39799314,502710.000038,147.19047619,135766.017193,20.5714285714,1871.9,08:22.7,02:15.7,451.3696588,142.519495485,330.947568,1.3568707483,584.496108,0.576471579536,1871.9,1.83204633205,3252,50.0,191293.118277,03:11.2,02:15.7,0,147,0,0,0,0,0,135766.017193,5.0564e+11,4,0.0,0.0,0.0,0.0,0.0,27.1062271062,0.0,0.0,98.1342334945,10.74151959,3.68280671656
|
||||
179,39799315,505680.000067,147.428571429,136042.640233,20.4761904762,1882.6,08:25.6,02:16.0,459.4732868,138.519585991,334.506144,1.36469387755,568.482516,0.575279416416,1882.6,1.81904761905,3252,50.0,191293.118277,03:11.2,02:16.0,0,147,0,0,0,0,0,136042.640233,5.0859e+11,4,0.0,0.0,0.0,0.0,0.0,27.6752767528,0.0,0.0,100.353310532,10.7695372316,3.67531826158
|
||||
180,39799316,508500.0,147.80952381,135635.192846,20.3333333333,1893.3,08:28.5,02:15.6,468.43714608,139.5408896,335.395788,1.37870748299,590.278794,0.567668322861,1893.3,1.74321880651,3252,50.0,191293.118277,03:11.2,02:15.6,0,148,0,0,0,0,0,135635.192846,5.1138e+11,4,0.0,0.0,0.0,0.0,0.0,29.3680297398,0.0,0.0,100.519284677,10.8777803541,3.68635889778
|
||||
181,39799317,511410.000086,148.571428571,135228.054118,20.2380952381,1904.3,08:31.4,02:15.2,469.18608108,144.373384534,358.971354,1.38632653061,637.874748,0.568806989976,1904.3,1.80705009276,3252,50.0,191293.118277,03:11.2,02:15.2,0,149,0,0,0,0,0,135228.054118,5.1434e+11,4,0.0,0.0,0.0,0.0,0.0,28.0,0.0,0.0,98.0348549052,10.9618743747,3.6974576264
|
||||
182,39799318,514440.000057,149.333333333,135091.590969,20.2857142857,1915.4,08:34.4,02:15.0,472.29378308,148.129254179,322.051128,1.38857142857,586.720218,0.558225432086,1915.4,1.80705009276,3252,50.0,191293.118277,03:11.2,02:15.0,0,149,0,0,0,0,0,135091.590969,5.1746e+11,4,0.0,0.0,0.0,0.0,0.0,27.4021352313,0.0,0.0,95.8389967843,10.9471894499,3.70119262355
|
||||
183,39799319,517410.000086,150.142857143,135165.185389,20.1428571429,1926.2,08:37.4,02:15.1,470.79285682,139.313500906,336.285432,1.38523809524,580.49271,0.552451093149,1926.2,1.81578947368,3252,50.0,191293.118277,03:11.2,02:15.1,0,150,0,0,0,0,0,135165.185389,5.2034e+11,4,0.0,0.0,0.0,0.0,0.0,27.8388278388,0.0,0.0,101.737322801,11.0188263186,3.69917740697
|
||||
184,39799320,520380.000114,150.857142857,135528.874331,19.9047619048,1937.3,08:40.3,02:15.5,462.43652756,140.338698368,350.519736,1.38006802721,656.557272,0.549901547877,1937.3,1.79220779221,3252,50.0,191293.118277,03:11.2,02:15.5,0,151,0,0,0,0,0,135528.874331,5.2335e+11,4,0.0,0.0,0.0,0.0,0.0,28.0,0.0,0.0,100.183247751,11.1207079741,3.68925074061
|
||||
185,39799321,523170.000076,151.761904762,135908.232418,19.9047619048,1947.8,08:43.1,02:15.9,469.9886368,144.1407744,335.84061,1.37489795918,609.850962,0.56103077658,1947.8,1.7866419295,3252,50.0,191293.118277,03:11.2,02:15.9,0,152,0,0,0,0,0,135908.232418,5.26e+11,4,0.0,0.0,0.0,0.0,0.0,28.0,0.0,0.0,96.726149754,11.0896669516,3.67895300457
|
||||
186,39799322,526230.000019,152.380952381,135536.044927,20.0476190476,1959.1,08:46.2,02:15.5,464.41203653,141.943427083,332.726856,1.37003401361,576.489312,0.578327192904,1959.1,1.80639097744,3252,50.0,191293.118277,03:11.2,02:15.5,0,152,0,0,0,0,0,135536.044927,5.293e+11,4,0.0,0.0,0.0,0.0,0.0,27.6363636364,0.0,0.0,99.0349148838,11.0408788706,3.68905555914
|
||||
187,39799323,529140.000105,152.666666667,135676.953847,20.3333333333,1969.8,08:49.1,02:15.6,463.23852347,140.11044355,347.850804,1.36343537415,569.37216,0.593066463629,1969.8,1.79135338346,3252,50.0,191293.118277,03:11.2,02:15.6,0,153,0,0,0,0,0,135676.953847,5.3203e+11,4,0.0,0.0,0.0,0.0,0.0,28.0442804428,0.0,0.0,100.018257266,10.8744322026,3.68522424644
|
||||
188,39799324,532049.999952,152.904761905,135784.677306,20.7380952381,1980.6,08:52.0,02:15.7,471.712087535,142.63489588,340.28883,1.35807823129,561.365364,0.594141310259,1980.6,1.78665413534,3252,50.0,191293.118277,03:11.2,02:15.7,0,153,0,0,0,0,0,135784.677306,5.3497e+11,4,0.0,0.0,0.0,0.0,0.0,27.8388278388,0.0,0.0,98.0144170752,10.6537285142,3.68230060946
|
||||
189,39799325,534960.000038,153.261904762,135356.212775,21.0238095238,1991.4,08:54.9,02:15.3,480.500726285,142.63489588,356.302422,1.35675170068,632.536884,0.591064693856,1991.4,1.81047619048,3252,50.0,191293.118277,03:11.2,02:15.3,0,153,0,0,0,0,0,135356.212775,5.3786e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,98.9481483694,10.5422096122,3.69395678078
|
||||
190,39799326,537240.00001,153.904761905,134031.309351,21.0238095238,2000.0,08:57.2,02:14.0,485.32090977,146.713264566,356.302422,1.36183673469,595.616658,0.587622263206,2000.0,1.81523809524,3252,50.0,191293.118277,03:11.2,02:14.0,0,154,0,0,0,0,0,134031.309351,5.3946e+11,4,0.0,0.0,0.0,0.0,0.0,27.7777777778,0.0,0.0,99.0786049127,10.6464196634,3.7304716519
|
||||
|
BIN
Binary file not shown.
BIN
Binary file not shown.
+322
-1387
File diff suppressed because it is too large
Load Diff
+201
-201
@@ -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>\d+)/strokedata$',views.strokedatajson),
|
||||
url(r'^api/workouts/(?P<id>\d+)/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>\d+)/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>\d+)/team/(?P<teamid>\d+)/$',views.team_comparison_select),
|
||||
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/workout/(?P<id>\d+)/(?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+)/$',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>\d+)/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>\d+)/$',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>\d+)/get-thumbnails$',views.get_thumbnails),
|
||||
url(r'^workout/(?P<id>\d+)/toggle-ranking$',views.workout_toggle_ranking),
|
||||
url(r'^workout/(?P<id>\d+)/get-testscript$',views.get_testscript),
|
||||
url(r'^graph/(?P<pk>\d+)/delete/$',views.GraphDelete.as_view(),name='graph_delete'),
|
||||
url(r'^workout/(?P<id>\d+)/get-thumbnails/$',views.get_thumbnails),
|
||||
url(r'^workout/(?P<id>\d+)/toggle-ranking/$',views.workout_toggle_ranking),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/histo$',views.workout_histo_view),
|
||||
url(r'^workout/(?P<id>\d+)/task$',views.workout_test_task_view),
|
||||
url(r'^workout/(?P<id>\d+)/forcecurve$',views.workout_forcecurve_view),
|
||||
url(r'^workout/(?P<id>\d+)/unsubscribe$',views.workout_unsubscribe_view),
|
||||
# url(r'^workout/(?P<id>\d+)/export$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\d+)/comment$',views.workout_comment_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailtcx$',views.workout_tcxemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailgpx$',views.workout_gpxemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailcsv$',views.workout_csvemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/histo/$',views.workout_histo_view),
|
||||
url(r'^workout/(?P<id>\d+)/task/$',views.workout_test_task_view),
|
||||
url(r'^workout/(?P<id>\d+)/forcecurve/$',views.workout_forcecurve_view),
|
||||
url(r'^workout/(?P<id>\d+)/unsubscribe/$',views.workout_unsubscribe_view),
|
||||
# url(r'^workout/(?P<id>\d+)/export/$',views.workout_export_view),
|
||||
url(r'^workout/(?P<id>\d+)/comment/$',views.workout_comment_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailtcx/$',views.workout_tcxemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailgpx/$',views.workout_gpxemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/emailcsv/$',views.workout_csvemail_view),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/$',views.workout_comparison_list),
|
||||
# url(r'^workout/compare2/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>\w+.*)/$',views.workout_comparison_view),
|
||||
url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\d+)/edit$',views.workout_edit_view,
|
||||
url(r'^workout/compare/(?P<id>\d+)/(?P<startdatestring>\d+-\d+-\d+)/(?P<enddatestring>\d+-\d+-\d+)/$',views.workout_comparison_list),
|
||||
url(r'^workout/(?P<id>\d+)/edit/$',views.workout_edit_view,
|
||||
name='workout_edit_view'),
|
||||
url(r'^workout/(?P<id>\d+)/map$',views.workout_map_view),
|
||||
# url(r'^workout/(?P<id>\d+)/setprivate$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\d+)/updatecp$',views.workout_update_cp_view),
|
||||
# url(r'^workout/(?P<id>\d+)/makepublic$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\d+)/geeky$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\d+)/advanced$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\d+)/instroke/(?P<metric>\w+.*)$',views.instroke_chart),
|
||||
url(r'^workout/(?P<id>\d+)/instroke$',views.instroke_view),
|
||||
url(r'^workout/(?P<id>\d+)/stats$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\d+)/data$',views.workout_data_view,
|
||||
url(r'^workout/(?P<id>\d+)/map/$',views.workout_map_view),
|
||||
# url(r'^workout/(?P<id>\d+)/setprivate/$',views.workout_setprivate_view),
|
||||
url(r'^workout/(?P<id>\d+)/updatecp/$',views.workout_update_cp_view),
|
||||
# url(r'^workout/(?P<id>\d+)/makepublic/$',views.workout_makepublic_view),
|
||||
# url(r'^workout/(?P<id>\d+)/geeky/$',views.workout_geeky_view),
|
||||
# url(r'^workout/(?P<id>\d+)/advanced/$',views.workout_advanced_view),
|
||||
url(r'^workout/(?P<id>\d+)/instroke/(?P<metric>\w+.*)/$',views.instroke_chart),
|
||||
url(r'^workout/(?P<id>\d+)/instroke/$',views.instroke_view),
|
||||
url(r'^workout/(?P<id>\d+)/stats/$',views.workout_stats_view,name='workout_stats_view'),
|
||||
url(r'^workout/(?P<id>\d+)/data/$',views.workout_data_view,
|
||||
name='workout_data_view'),
|
||||
url(r'^workout/(?P<id>\d+)/otwsetpower$',views.workout_otwsetpower_view),
|
||||
url(r'^workout/(?P<id>\d+)/interactiveotwplot$',views.workout_otwpowerplot_view),
|
||||
url(r'^workout/(?P<id>\d+)/wind$',views.workout_wind_view),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/otwsetpower/$',views.workout_otwsetpower_view),
|
||||
url(r'^workout/(?P<id>\d+)/interactiveotwplot/$',views.workout_otwpowerplot_view),
|
||||
url(r'^workout/(?P<id>\d+)/wind/$',views.workout_wind_view),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/darkskywind$',views.workout_downloadwind_view),
|
||||
url(r'^workout/(?P<id>\d+)/metar/(?P<airportcode>\w+)$',views.workout_downloadmetar_view),
|
||||
url(r'^workout/(?P<id>\d+)/stream$',views.workout_stream_view),
|
||||
# url(r'^workout/(?P<id>\d+)/crewnerdsummary$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\d+)/editintervals$',views.workout_summary_edit_view,
|
||||
url(r'^workout/(?P<id>\d+)/darkskywind/$',views.workout_downloadwind_view),
|
||||
url(r'^workout/(?P<id>\d+)/metar/(?P<airportcode>\w+)/$',views.workout_downloadmetar_view),
|
||||
url(r'^workout/(?P<id>\d+)/stream/$',views.workout_stream_view),
|
||||
# url(r'^workout/(?P<id>\d+)/crewnerdsummary/$',views.workout_crewnerd_summary_view),
|
||||
url(r'^workout/(?P<id>\d+)/editintervals/$',views.workout_summary_edit_view,
|
||||
name='workout_summary_edit_view'),
|
||||
url(r'^workout/(?P<id>\d+)/restore$',views.workout_summary_restore_view),
|
||||
url(r'^workout/(?P<id>\d+)/split$',views.workout_split_view),
|
||||
# url(r'^workout/(?P<id>\d+)/interactiveplot$',views.workout_biginteractive_view),
|
||||
url(r'^workout/(?P<id>\d+)/view$',views.workout_view),
|
||||
url(r'^workout/(?P<id>\d+)/restore/$',views.workout_summary_restore_view),
|
||||
url(r'^workout/(?P<id>\d+)/split/$',views.workout_split_view),
|
||||
# url(r'^workout/(?P<id>\d+)/interactiveplot/$',views.workout_biginteractive_view),
|
||||
url(r'^workout/(?P<id>\d+)/view/$',views.workout_view),
|
||||
url(r'^workout/(?P<id>\d+)/$',views.workout_view),
|
||||
url(r'^workout/fusion/(?P<id1>\d+)/(?P<id2>\d+)$',views.workout_fusion_view),
|
||||
url(r'^workout/fusion/(?P<id1>\d+)/(?P<id2>\d+)/$',views.workout_fusion_view),
|
||||
url(r'^workout/fusion/(?P<id>\d+)/$',views.workout_fusion_list),
|
||||
url(r'^workout/fusion/(?P<id>\d+)/(?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>\d+)/(?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>\d+)/addtimeplot$',
|
||||
url(r'^workout/(?P<id>\d+)/addtimeplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'1'}),
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot$',
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'2'}),
|
||||
url(r'^workout/(?P<id>\d+)/addpiechart$',
|
||||
url(r'^workout/(?P<id>\d+)/addpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'3'}),
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot2$',
|
||||
url(r'^workout/(?P<id>\d+)/adddistanceplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'7'}),
|
||||
url(r'^workout/(?P<id>\d+)/addtimeplot2$',
|
||||
url(r'^workout/(?P<id>\d+)/addtimeplot2/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'8'}),
|
||||
url(r'^workout/(?P<id>\d+)/addotwpowerplot$',
|
||||
url(r'^workout/(?P<id>\d+)/addotwpowerplot/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'9'}),
|
||||
url(r'^workout/(?P<id>\d+)/addpowerpiechart$',
|
||||
url(r'^workout/(?P<id>\d+)/addpowerpiechart/$',
|
||||
views.workout_add_chart_view,
|
||||
{'plotnr':'13'}),
|
||||
# addstatic is the new URL -> need to update in templates
|
||||
url(r'^workout/(?P<id>\d+)/addstatic/(?P<plotnr>\d+)$',
|
||||
url(r'^workout/(?P<id>\d+)/addstatic/(?P<plotnr>\d+)/$',
|
||||
views.workout_add_chart_view),
|
||||
url(r'^workout/(?P<id>\d+)/addstatic$',views.workout_add_chart_view),
|
||||
url(r'^workout/(?P<pk>\d+)/delete$',login_required(
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/smoothenpace$',views.workout_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\d+)/undosmoothenpace$',views.workout_undo_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\d+)/smoothenpace/$',views.workout_smoothenpace_view),
|
||||
url(r'^workout/(?P<id>\d+)/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>\d+)/deleteconfirm$',views.workout_delete_confirm_view),
|
||||
# url(r'^workout/(?P<id>\d+)/deleteconfirm/$',views.workout_delete_confirm_view),
|
||||
url(r'^workout/(?P<id>\d+)/c2uploadw/$',views.workout_c2_upload_view),
|
||||
url(r'^workout/(?P<id>\d+)/stravauploadw/$',views.workout_strava_upload_view),
|
||||
url(r'^workout/(?P<id>\d+)/recalcsummary/$',views.workout_recalcsummary_view),
|
||||
@@ -366,34 +366,34 @@ urlpatterns = [
|
||||
url(r'^multi-compare/workout/(?P<id>\d+)/user/(?P<userid>\d+)/$',views.multi_compare_view),
|
||||
url(r'^multi-compare/workout/(?P<id>\d+)/$',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>\d+)/workflow$',views.workout_workflow_view,
|
||||
url(r'^workout/(?P<id>\d+)/workflow/$',views.workout_workflow_view,
|
||||
name='workout_workflow_view'),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>[\w\ ]+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart$',views.workout_flexchart3_view),
|
||||
# url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/(?P<plottype>[\w\ ]+.*)$',views.workout_comparison_view2),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/(?P<plottype>\w+.*)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/(?P<xparam>\w+.*)/(?P<yparam1>[\w\ ]+.*)/(?P<yparam2>[\w\ ]+.*)/$',views.workout_flexchart3_view),
|
||||
url(r'^workout/(?P<id>\d+)/flexchart/$',views.workout_flexchart3_view),
|
||||
# url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?P<xparam>\w+.*)/(?P<yparam>[\w\ ]+.*)/(?P<plottype>[\w\ ]+.*)/$',views.workout_comparison_view2),
|
||||
# url(r'^workout/compare/(?P<id1>\d+)/(?P<id2>\d+)/(?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>\d+)/test\_strokedata$',views.strokedataform),
|
||||
url(r'^workout/(?P<id>\d+)/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+)/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),
|
||||
# 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),
|
||||
]
|
||||
|
||||
|
||||
+74
-59
@@ -38,6 +38,7 @@ from django.views.generic.edit import UpdateView,DeleteView
|
||||
|
||||
from django.http import (
|
||||
HttpResponse, HttpResponseRedirect,
|
||||
JsonResponse,
|
||||
HttpResponseForbidden, HttpResponseNotAllowed,
|
||||
HttpResponseNotFound,Http404
|
||||
)
|
||||
@@ -227,6 +228,7 @@ class JSONResponse(HttpResponse):
|
||||
kwargs['content_type'] = 'application/json'
|
||||
super(JSONResponse, self).__init__(content, **kwargs)
|
||||
|
||||
|
||||
def getrequestrower(request,rowerid=0,userid=0,notpermanent=False):
|
||||
|
||||
userid = int(userid)
|
||||
@@ -1645,7 +1647,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)
|
||||
@@ -1672,7 +1674,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)
|
||||
@@ -2250,7 +2252,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"
|
||||
@@ -3510,7 +3512,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',
|
||||
@@ -3553,7 +3555,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):
|
||||
@@ -3685,7 +3687,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,
|
||||
@@ -4007,6 +4009,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])
|
||||
|
||||
@@ -4800,7 +4806,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):
|
||||
@@ -4828,7 +4834,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,
|
||||
@@ -5233,7 +5239,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,
|
||||
@@ -5675,7 +5681,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):
|
||||
@@ -5721,7 +5727,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,
|
||||
@@ -6429,7 +6435,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,
|
||||
@@ -6635,7 +6641,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,
|
||||
@@ -6881,7 +6887,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,
|
||||
@@ -7048,7 +7054,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,
|
||||
@@ -7256,7 +7262,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,
|
||||
@@ -7363,7 +7369,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,
|
||||
@@ -7720,7 +7726,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='',
|
||||
@@ -7806,7 +7812,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='',
|
||||
@@ -8009,7 +8015,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(
|
||||
@@ -8048,7 +8054,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=""):
|
||||
@@ -8101,7 +8107,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=""):
|
||||
@@ -8178,7 +8184,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,
|
||||
@@ -8246,7 +8252,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=""):
|
||||
@@ -8313,7 +8319,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=""):
|
||||
row = get_workout(id)
|
||||
r = getrower(request.user)
|
||||
@@ -8449,7 +8455,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=""):
|
||||
row = get_workout(id)
|
||||
r = getrower(request.user)
|
||||
@@ -8535,7 +8541,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=""):
|
||||
w = get_workout(id)
|
||||
r = getrower(request.user)
|
||||
@@ -8844,7 +8850,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(),
|
||||
@@ -9959,16 +9965,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:
|
||||
@@ -11812,6 +11816,14 @@ def workout_getimportview(request,externalid,source = 'c2'):
|
||||
|
||||
|
||||
# Now works only for C2
|
||||
try:
|
||||
if strokedata == 0:
|
||||
messages.error(request,'An error occurred importing the workout from Concept2')
|
||||
url = reverse(workouts_view)
|
||||
return HttpResponseRedirect(url)
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
if strokedata.empty:
|
||||
distance = data['distance']
|
||||
c2id = data['id']
|
||||
@@ -12030,7 +12042,10 @@ def workout_toggle_ranking(request,id=0):
|
||||
row.save()
|
||||
|
||||
if is_ajax:
|
||||
return JSONResponse({'result':row.rankingpiece})
|
||||
response = JSONResponse({'result':row.rankingpiece},
|
||||
content_type='application/json')
|
||||
|
||||
return response
|
||||
else:
|
||||
url = reverse(workouts_view)
|
||||
response = HttpResponseRedirect(url)
|
||||
@@ -12471,7 +12486,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={
|
||||
@@ -12878,7 +12893,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):
|
||||
row = get_workout_permitted(request.user,id)
|
||||
|
||||
@@ -12969,7 +12984,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):
|
||||
|
||||
r = getrower(request.user)
|
||||
@@ -14714,7 +14729,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:
|
||||
@@ -14728,7 +14743,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)
|
||||
@@ -14742,7 +14757,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)
|
||||
@@ -14794,7 +14809,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)
|
||||
|
||||
@@ -14807,7 +14822,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)
|
||||
|
||||
@@ -14843,7 +14858,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)
|
||||
@@ -14907,7 +14922,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)
|
||||
@@ -14950,7 +14965,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:
|
||||
@@ -14986,7 +15001,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:
|
||||
@@ -15002,7 +15017,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:
|
||||
@@ -15099,7 +15114,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(
|
||||
@@ -15229,7 +15244,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,
|
||||
@@ -15366,7 +15381,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,
|
||||
@@ -15479,7 +15494,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):
|
||||
@@ -15646,7 +15661,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):
|
||||
@@ -15802,7 +15817,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,
|
||||
@@ -16251,7 +16266,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):
|
||||
@@ -16312,7 +16327,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):
|
||||
@@ -18351,7 +18366,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):
|
||||
@@ -18455,7 +18470,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):
|
||||
@@ -18475,7 +18490,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):
|
||||
@@ -18788,7 +18803,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,
|
||||
@@ -19307,7 +19322,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):
|
||||
@@ -19368,7 +19383,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'
|
||||
|
||||
|
||||
@@ -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