Merge branch 'release/v9.11'
This commit is contained in:
@@ -24,6 +24,11 @@ conftest.py
|
||||
# static plots
|
||||
/static/plots
|
||||
|
||||
# temporary test files
|
||||
/rowers/tests/testdata/temp
|
||||
/rowers/tests/testdate/testdata.csv.gz
|
||||
/rowers/tests/testdate/testdata.tcx
|
||||
|
||||
# Python egg metadata, regenerated from source files by setuptools.
|
||||
*.egg-info
|
||||
|
||||
|
||||
+42
-28
@@ -43,6 +43,7 @@ else:
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
from rowers.models import Rower,PaidPlan
|
||||
from rowers.utils import ProcessorCustomerError
|
||||
|
||||
@@ -117,7 +118,7 @@ def make_payment(rower,data):
|
||||
job = myqueue(queuehigh,handle_send_email_transaction,
|
||||
name, rower.user.email, amount)
|
||||
|
||||
return amount
|
||||
return amount,''
|
||||
else:
|
||||
return 0,''
|
||||
|
||||
@@ -206,10 +207,12 @@ def update_subscription(rower,data,method='up'):
|
||||
|
||||
|
||||
def create_subscription(rower,data):
|
||||
planid = data['plan']
|
||||
plan = PaidPlan.objects.get(id=planid)
|
||||
nonce_from_the_client = data['payment_method_nonce']
|
||||
amount = data['amount']
|
||||
|
||||
planid = data['plan']
|
||||
plan = PaidPlan.objects.get(id=planid)
|
||||
|
||||
|
||||
# create or find payment method
|
||||
result = gateway.payment_method.create({
|
||||
@@ -217,6 +220,7 @@ def create_subscription(rower,data):
|
||||
"payment_method_nonce": nonce_from_the_client
|
||||
})
|
||||
|
||||
|
||||
if result.is_success:
|
||||
payment_method_token = result.payment_method.token
|
||||
else:
|
||||
@@ -235,6 +239,7 @@ def create_subscription(rower,data):
|
||||
rower.paymenttype = plan.paymenttype
|
||||
rower.rowerplan = plan.shortname
|
||||
rower.subscription_id = result.subscription.id
|
||||
|
||||
rower.save()
|
||||
name = '{f} {l}'.format(
|
||||
f = rower.user.first_name,
|
||||
@@ -269,6 +274,7 @@ def cancel_subscription(rower,id):
|
||||
themessages.append("Subscription canceled")
|
||||
except:
|
||||
errormessages.append("We could not find the subscription record in our customer database. We have notified the site owner, who will contact you.")
|
||||
|
||||
|
||||
name = '{f} {l}'.format(f = rower.user.first_name, l = rower.user.last_name)
|
||||
|
||||
@@ -308,7 +314,7 @@ def find_subscriptions(rower):
|
||||
|
||||
try:
|
||||
paypal_accounts = result.paypal_accounts
|
||||
for account in accuonts:
|
||||
for account in paypal_accounts:
|
||||
for subscription in account.subscriptions:
|
||||
if subscription.status == 'Active':
|
||||
active_subscriptions.append(subscription)
|
||||
@@ -353,37 +359,40 @@ def get_transactions(start_date,end_date):
|
||||
statuses = []
|
||||
ids = []
|
||||
usernames = []
|
||||
customerids = []
|
||||
transactionids = []
|
||||
subscriptionids = []
|
||||
ownids = []
|
||||
|
||||
countlines = [1 for transaction in results]
|
||||
|
||||
for transaction in results:
|
||||
try:
|
||||
rs = Rower.objects.filter(
|
||||
customer_id=transaction.customer['id'],
|
||||
paymentprocessor='braintree')
|
||||
if rs:
|
||||
r = rs[0]
|
||||
r = None
|
||||
rs = Rower.objects.filter(
|
||||
customer_id=transaction.customer['id'],
|
||||
paymentprocessor='braintree')
|
||||
if rs:
|
||||
r = rs[0]
|
||||
countries.append(r.country)
|
||||
names.append('{f} {l}'.format(
|
||||
f = r.user.first_name,
|
||||
l = r.user.last_name,
|
||||
)
|
||||
)
|
||||
emails.append(r.user.email)
|
||||
ids.append(r.id)
|
||||
ownids.append(r.id)
|
||||
usernames.append(r.user.username)
|
||||
|
||||
except (KeyError,IndexError):
|
||||
else:
|
||||
countries.append(
|
||||
transaction.credit_card_details.country_of_issuance)
|
||||
names.append('{f} {l}'.format(
|
||||
f = transaction.customer['first_name'],
|
||||
l = transaction.customer['last_name']
|
||||
)
|
||||
)
|
||||
emails.append(transaction.customer.email)
|
||||
ids.append(transaction.customer['id'])
|
||||
ownids.append('unknown')
|
||||
usernames.append('unknown')
|
||||
|
||||
|
||||
|
||||
emails.append(transaction.customer_details.email)
|
||||
names.append('{f} {l}'.format(
|
||||
f = transaction.customer['first_name'],
|
||||
l = transaction.customer['last_name']
|
||||
)
|
||||
)
|
||||
customerids.append(transaction.customer['id'])
|
||||
transactionids.append(transaction.id)
|
||||
subscriptionids.append(transaction.subscription_id)
|
||||
amounts.append(transaction.amount)
|
||||
dates.append(transaction.created_at)
|
||||
currencies.append(transaction.currency_iso_code)
|
||||
@@ -391,7 +400,7 @@ def get_transactions(start_date,end_date):
|
||||
transaction.credit_card_details.country_of_issuance)
|
||||
statuses.append(transaction.status)
|
||||
|
||||
|
||||
|
||||
df = pd.DataFrame({
|
||||
'name':names,
|
||||
'email':emails,
|
||||
@@ -402,10 +411,15 @@ def get_transactions(start_date,end_date):
|
||||
'card_country':card_countries,
|
||||
'status':statuses,
|
||||
'username':usernames,
|
||||
'user_id':ids,
|
||||
'user_id':ownids,
|
||||
'customer_id':customerids,
|
||||
'transaction_id':transactionids,
|
||||
'subscription_id':subscriptionids
|
||||
}
|
||||
)
|
||||
|
||||
return df
|
||||
|
||||
|
||||
def mocktest(rower):
|
||||
return '5'
|
||||
|
||||
@@ -103,6 +103,7 @@ def imports_open(user,oauth_data):
|
||||
oauth_data,
|
||||
)
|
||||
elif tokenexpirydate is None and expirydatename is not None and 'strava' in expirydatename:
|
||||
print 'noot'
|
||||
token = imports_token_refresh(
|
||||
user,
|
||||
tokenname,
|
||||
@@ -152,6 +153,8 @@ def imports_do_refresh_token(refreshtoken,oauth_data,access_token=''):
|
||||
data=post_data,
|
||||
headers=headers)
|
||||
|
||||
|
||||
|
||||
if response.status_code == 200 or response.status_code == 201:
|
||||
token_json = response.json()
|
||||
else:
|
||||
|
||||
@@ -107,7 +107,7 @@ def get_strava_workout_list(user,limit_n=0):
|
||||
params = {}
|
||||
else:
|
||||
params = {'per_page':limit_n}
|
||||
|
||||
|
||||
s = requests.get(url,headers=headers,params=params)
|
||||
|
||||
|
||||
@@ -265,6 +265,12 @@ from utils import get_strava_stream
|
||||
|
||||
# Get a Strava workout summary data and stroke data by ID
|
||||
def get_workout(user,stravaid):
|
||||
try:
|
||||
thetoken = strava_open(user)
|
||||
except NoTokenError:
|
||||
s = "Token error"
|
||||
return custom_exception_handler(401,s)
|
||||
|
||||
r = Rower.objects.get(user=user)
|
||||
if (r.stravatoken == '') or (r.stravatoken is None):
|
||||
s = "Token doesn't exist. Need to authorize"
|
||||
|
||||
@@ -133,25 +133,11 @@ def count_invites(manager):
|
||||
|
||||
return count
|
||||
|
||||
def count_members(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Rower.objects.filter(team=t).count()
|
||||
|
||||
def count_club_members(manager):
|
||||
ts = Team.objects.filter(manager=manager)
|
||||
return Rower.objects.filter(team__in=ts).distinct().count()
|
||||
|
||||
def get_club_members(manager):
|
||||
ts = Team.objects.filter(manager=manager)
|
||||
return Rower.objects.filter(team__in=ts).distinct()
|
||||
|
||||
def get_team_members(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Rower.objects.filter(team=t)
|
||||
|
||||
def get_team_workouts(id):
|
||||
t = Team.objects.get(id=id)
|
||||
return Workout.objects.filter(team=t).order_by("-date", "-starttime")
|
||||
|
||||
# Medium level functionality
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@
|
||||
separately.</p>
|
||||
|
||||
<ul class="contentli">
|
||||
<li><a href="/rowers/api-docs">API documentation</a>
|
||||
<li><a href="/rowers/api-docs/">API documentation</a>
|
||||
(But refer to the below for stroke data.)</li>
|
||||
<li><a href="/rowers/api-docs#/workouts">Try out the workout summary API</a></li>
|
||||
<li><a href="/rowers/api-docs#!/workouts/strokedata_list">GET stroke data</a></li>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</p>
|
||||
|
||||
<p>
|
||||
<a class="button gray small" href="/rowers/exportallworkouts">Download your data</a>
|
||||
<a class="button gray small" href="/rowers/exportallworkouts/">Download your data</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
<p>
|
||||
This is a preview of the page with advanced functionality for Pro users.
|
||||
See <a href="/rowers/about">the About page</a> for more information
|
||||
See <a href="/rowers/about/">the About page</a> for more information
|
||||
and to sign up for Pro Membership
|
||||
</p>
|
||||
{% endif %}
|
||||
@@ -30,7 +30,7 @@
|
||||
</tr>
|
||||
<th>Public link to this workout</th>
|
||||
<td>
|
||||
<a href="/rowers/workout/{{ workout.id }}">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<a href="/rowers/workout/{{ workout.id }}/">https://rowsandall.com/rowers/workout/{{ workout.id }}</a>
|
||||
<td>
|
||||
|
||||
</table>
|
||||
@@ -42,7 +42,7 @@
|
||||
{% if instrokemetrics %}
|
||||
{% for metric in instrokemetrics %}
|
||||
<p>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke/{{ metric }}">{{ metric }}</a>
|
||||
<a class="button blue small" href="/rowers/workout/{{ workout.id }}/instroke/{{ metric }}/">{{ metric }}</a>
|
||||
</p>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
While the wind and stream correction is fairly reliable, the OTW to OTE conversion sometimes throws errors. Those data points are omitted and replaced by interpolated values. We are sorry if this messed up some of your plots.
|
||||
</li>
|
||||
<li>
|
||||
Read more details about the way we calculate things <a href="/rowers/physics">here</a>.
|
||||
Read more details about the way we calculate things <a href="/rowers/physics/">here</a>.
|
||||
</li>
|
||||
</ul>
|
||||
</p>
|
||||
|
||||
+214
-2
@@ -31,6 +31,7 @@ from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
import arrow
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
@@ -107,6 +108,8 @@ class mocked_canvas():
|
||||
def print_figure(*args, **kwargs):
|
||||
return True
|
||||
|
||||
# Mocked Dataprep
|
||||
|
||||
def mocked_fetchcperg(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/cpdataerg.csv')
|
||||
|
||||
@@ -134,12 +137,22 @@ def mocked_getempowerdata_db(*args, **kwargs):
|
||||
|
||||
return df
|
||||
|
||||
def mocked_read_df_cols_sql_multistats(ids,columns,convertnewtons=True):
|
||||
df = pd.read_csv('rowers/tests/testdata/cumstats.csv')
|
||||
extracols = []
|
||||
|
||||
return df, extracols
|
||||
|
||||
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 mock_workout_summaries(*args, **kwargs):
|
||||
df = pd.read_csv('rowers/tests/testdata/workout_summaries.csv')
|
||||
return df
|
||||
|
||||
def mocked_read_df_cols_sql_multi(ids, columns, convertnewtons=True):
|
||||
df = pd.read_csv('rowers/tests/testdata/fake_strokedata2.csv')
|
||||
extracols = []
|
||||
@@ -152,6 +165,8 @@ def mocked_read_df_cols_sql_multiflex(ids, columns, convertnewtons=True):
|
||||
|
||||
return df, extracols
|
||||
|
||||
# Mocked Strava
|
||||
|
||||
def mocked_stravaexport(f2,workoutname,stravatoken,description='',
|
||||
activity_type='Rowing'):
|
||||
print "this is mocked strava export"
|
||||
@@ -168,6 +183,201 @@ class MockStravalibClient():
|
||||
def update_activity(*args, **kwargs):
|
||||
return StravaActivity()
|
||||
|
||||
# Mocked Braintree
|
||||
|
||||
## Higher level - unfortunately didn't succeed in mocking the gateway
|
||||
|
||||
def mock_create_customer(*args, **kwargs):
|
||||
return 121
|
||||
|
||||
def mock_make_payment(*args, **kwargs):
|
||||
return 15,''
|
||||
|
||||
def mock_update_subscription(*args, **kwargs):
|
||||
try:
|
||||
rower = args[0]
|
||||
data = args[1]
|
||||
planid = data['plan']
|
||||
plan = PaidPlan.objects.get(id=planid)
|
||||
amount = data['amount']
|
||||
|
||||
rower.paidplan = plan
|
||||
rower.planexpires = (datetime.datetime.now()+datetime.timedelta(days=365)).date()
|
||||
rower.clubsize = plan.clubsize
|
||||
rower.paymenttype = plan.paymenttype
|
||||
rower.rowerplan = plan.shortname
|
||||
rower.subscription_id = 12
|
||||
rower.save()
|
||||
except:
|
||||
amount = 20
|
||||
|
||||
return True,amount
|
||||
|
||||
def mock_create_subscription(*args, **kwargs):
|
||||
return mock_update_subscription(*args, **kwargs)
|
||||
|
||||
def mock_cancel_subscription(*args, **kwargs):
|
||||
themessages = []
|
||||
errormessages = []
|
||||
try:
|
||||
basicplans = PaidPlan.objects.filter(price=0,paymentprocessor='braintree')
|
||||
rower.paidplan = basicplans[0]
|
||||
rower.teamplanexpires = timezone.now()
|
||||
rower.planexpires = timezone.now()
|
||||
rower.clubsize = 0
|
||||
rower.rowerplan = 'basic'
|
||||
rower.subscription_id = None
|
||||
rower.save()
|
||||
themessages.append("Your plan was reset to basic")
|
||||
except:
|
||||
pass
|
||||
|
||||
return True, themessages,errormessages
|
||||
|
||||
def mock_mocktest(*args, **kwargs):
|
||||
return '121'
|
||||
|
||||
## Gateway stuff (not working)
|
||||
|
||||
class gatewayresult():
|
||||
def __init__(self,*args,**kwargs):
|
||||
self.is_success = kwargs.pop('is_success',True)
|
||||
self.customer_id = 1
|
||||
self.transaction = vtransaction()
|
||||
self.payment_method = vpayment_method()
|
||||
self.subscription = vsubscription()
|
||||
self.customer = customer()
|
||||
|
||||
def __unicode__():
|
||||
return "mockedgatewayresult"
|
||||
|
||||
class credit_card():
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.subscriptions = [vsubscription()]
|
||||
self.country_of_issuance = 'US'
|
||||
|
||||
class paypal_account():
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.subscriptions = [vsubscription(),vsubscription()]
|
||||
|
||||
class customer():
|
||||
def find(*arg, **kwargs):
|
||||
return self
|
||||
|
||||
def create(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.credit_cards = [credit_card(),credit_card()]
|
||||
self.paypal_accounts = [paypal_account()]
|
||||
self.id = 1
|
||||
|
||||
class client_token():
|
||||
def generate(*args, **kwargs):
|
||||
return 'aapnooit'
|
||||
|
||||
class plan():
|
||||
def all(*args, **kwargs):
|
||||
return []
|
||||
|
||||
|
||||
|
||||
class transaction():
|
||||
def sale(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def search(*args, **kwargs):
|
||||
return [gatewayresult(is_success=True),gatewayresult(is_success=True)]
|
||||
|
||||
def __init__(self,*args, **kwargs):
|
||||
self.amount = 15
|
||||
self.credit_card_details = credit_card()
|
||||
self.customer = {
|
||||
'first_name': 'John',
|
||||
'last_name': 'Doe',
|
||||
'id': 12
|
||||
}
|
||||
self.created_at = datetime.datetime.now()
|
||||
self.currency_iso_code = 'EUR'
|
||||
|
||||
class vtransaction():
|
||||
def __init__(self,*args, **kwargs):
|
||||
self.amount = 15
|
||||
self.credit_card_details = credit_card()
|
||||
self.customer = {
|
||||
'first_name': 'John',
|
||||
'last_name': 'Doe',
|
||||
'id': 12
|
||||
}
|
||||
self.created_at = datetime.datetime.now()
|
||||
self.currency_iso_code = 'EUR'
|
||||
|
||||
class vsubscription():
|
||||
def update(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def cancel(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.id = '121'
|
||||
self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date()
|
||||
self.status = 'Active'
|
||||
self.plan_id = 12
|
||||
self.price = 15
|
||||
self.never_expires = True
|
||||
|
||||
class subscription():
|
||||
def create(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def update(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def cancel(*args, **kwargs):
|
||||
return gatewayresult(is_success=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.id = '121'
|
||||
self.billing_period_end_date = (datetime.datetime.now()+datetime.timedelta(days=365)).date()
|
||||
self.transactions = [vtransaction()]
|
||||
self.status = 'Active'
|
||||
self.plan_id = 12
|
||||
self.price = 15
|
||||
self.never_expires = True
|
||||
|
||||
class vpayment_method():
|
||||
def create(*args, **kwargs):
|
||||
return gatewayresult()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.token = 'liesjeleerdelotje'
|
||||
|
||||
|
||||
class payment_method():
|
||||
def create(*args, **kwargs):
|
||||
return gatewayresult()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.token = 'liesjeleerdelotje'
|
||||
|
||||
# mock braintree gateway
|
||||
class MockBraintreeGateway:
|
||||
def __init__(self,*args, **kwargs):
|
||||
self.customer = customer()
|
||||
self.client_token = client_token()
|
||||
self.plan = plan()
|
||||
self.transaction = transaction()
|
||||
self.subscription = subscription()
|
||||
self.payment_method = payment_method()
|
||||
|
||||
|
||||
def mocked_gateway(*args, **kwargs):
|
||||
|
||||
return MockBraintreeGateway()
|
||||
|
||||
|
||||
# Mocked Rowingdata
|
||||
|
||||
class mocked_rowingdata(rowingdata):
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -213,7 +423,9 @@ class mocked_rowingdata(rowingdata):
|
||||
fig1 = figure.Figure(figsize(12,10))
|
||||
return fig1
|
||||
|
||||
|
||||
|
||||
# Mocked Requests
|
||||
|
||||
# to be done add polar mocks (for email processing)
|
||||
def mocked_requests(*args, **kwargs):
|
||||
with open('rowers/tests/testdata/c2jsonworkoutdata.txt','r') as infile:
|
||||
@@ -499,7 +711,7 @@ def mocked_requests(*args, **kwargs):
|
||||
"token_type": "Bearer",
|
||||
"access_token": "987654321234567898765432123456789",
|
||||
"refresh_token": "1234567898765432112345678987654321",
|
||||
"expires_at": 1531385304
|
||||
"expires_at": arrow.now().timestamp+3600
|
||||
}
|
||||
return MockResponse(json_data,200)
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ pytestmark = pytest.mark.django_db
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory, TransactionTestCase
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
@@ -58,12 +58,95 @@ from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from nose.tools import assert_raises
|
||||
|
||||
from rowers.models import *
|
||||
from rowers.forms import *
|
||||
from rowers.tests.mocks import *
|
||||
import factory
|
||||
from faker import Factory
|
||||
|
||||
from uuid import uuid4
|
||||
faker = Factory.create()
|
||||
|
||||
from rowers.utils import calculate_age
|
||||
|
||||
from rowers.tasks import handle_getagegrouprecords
|
||||
|
||||
import inspect
|
||||
|
||||
def get_random_file(filename='rowers/tests/testdata/testdata.csv',name=''):
|
||||
|
||||
frm = inspect.stack()[3]
|
||||
mod = inspect.getmodule(frm[0])
|
||||
fromstring = 'test_%s_' % mod.__name__
|
||||
|
||||
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')
|
||||
|
||||
extension = filename[-3:]
|
||||
|
||||
if name != '':
|
||||
newfilename = 'rowers/tests/testdata/temp/'+fromstring+name+'.'+extension
|
||||
else:
|
||||
newfilename = 'rowers/tests/testdata/temp/'+fromstring+uuid4().hex[:16]+'.'+extension
|
||||
|
||||
copyfile(filename,newfilename)
|
||||
|
||||
thedict = {
|
||||
'row':row,
|
||||
'filename':newfilename,
|
||||
'startdatetime': row.rowdatetime,
|
||||
'starttime': workoutstarttime,
|
||||
'date': workoutdate,
|
||||
'duration':duration,
|
||||
'totaldist':totaldist,
|
||||
}
|
||||
|
||||
return thedict
|
||||
|
||||
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 = get_random_file(name=faker.word())['startdatetime']
|
||||
starttime = get_random_file(name=faker.word())['starttime']
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=get_random_file(name=faker.word())['duration']
|
||||
distance=get_random_file(name=faker.word())['totaldist']
|
||||
csvfilename=get_random_file(name=faker.word())['filename']
|
||||
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
|
||||
|
||||
@@ -1,26 +1,10 @@
|
||||
#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 statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from rowers.models import User,Rower
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class AdminTests(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -1,56 +1,8 @@
|
||||
from statements import *
|
||||
|
||||
filename = 'rowers/tests/testdata/testdata.csv'
|
||||
|
||||
row = rdata(filename)
|
||||
totaldist = row.df['cum_dist'].max()
|
||||
totaltime = row.df['TimeStamp (sec)'].max()-row.df['TimeStamp (sec)'].min()
|
||||
totaltime = totaltime+row.df.ix[0,' ElapsedTime (sec)']
|
||||
|
||||
|
||||
hours = int(totaltime/3600.)
|
||||
minutes = int((totaltime - 3600.*hours)/60.)
|
||||
seconds = int(totaltime - 3600.*hours - 60.*minutes)
|
||||
tenths = int(10*(totaltime - 3600.*hours - 60.*minutes - seconds))
|
||||
|
||||
duration = "%s:%s:%s.%s" % (hours,minutes,seconds,tenths)
|
||||
duration = datetime.time(hour=hours,minute=minutes,second=seconds)
|
||||
|
||||
workoutdate = row.rowdatetime.strftime('%Y-%m-%d')
|
||||
workoutstarttime = row.rowdatetime.strftime('%H:%M:%S')
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
class UserFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
email = faker.email()
|
||||
username = faker.profile()['username']
|
||||
|
||||
first_name = faker.name().split(' ')[0]
|
||||
last_name = faker.name().split(' ')[0]
|
||||
|
||||
class WorkoutFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Workout
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
notes = faker.text()
|
||||
startdatetime = row.rowdatetime
|
||||
starttime = workoutstarttime
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=duration
|
||||
distance=totaldist
|
||||
csvfilename=filename
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
|
||||
|
||||
class WorkoutCompareTest(TestCase):
|
||||
@@ -70,6 +22,13 @@ class WorkoutCompareTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_workouts_compare(self, mocked_sqlalchemy,
|
||||
@@ -102,8 +61,8 @@ class WorkoutCompareTest(TestCase):
|
||||
|
||||
form = WorkoutMultipleCompareForm(form_data)
|
||||
chartform = ChartParamChoiceForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(chartform.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(chartform.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/multi-compare/',form_data)
|
||||
|
||||
@@ -128,6 +87,13 @@ class BoxPlotTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_workouts_boxplot(self, mocked_sqlalchemy,
|
||||
@@ -164,8 +130,8 @@ class BoxPlotTest(TestCase):
|
||||
form = WorkoutMultipleCompareForm(form_data)
|
||||
chartform = BoxPlotChoiceForm(form_data)
|
||||
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(chartform.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(chartform.is_valid())
|
||||
|
||||
response = self.c.get('/rowers/user-boxplot/',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
@@ -216,6 +182,13 @@ class ListWorkoutTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_list_workouts(self, mocked_sqlalchemy,
|
||||
@@ -265,6 +238,13 @@ class PlannedSessionTests(TestCase):
|
||||
session.rower.add(self.r)
|
||||
session.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def test_ics_download(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
@@ -303,6 +283,13 @@ class ForcecurveTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.getsmallrowdata_db',side_effect = mocked_getempowerdata_db)
|
||||
def test_forcecurve_plot(self, mocked_getsmallrowdata_db):
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
@@ -313,6 +300,43 @@ class ForcecurveTest(TestCase):
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class CumStatsTest(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()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multistats)
|
||||
def test_cumstats(self, mocked_df):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
startdate = (self.user_workouts[0].startdatetime-datetime.timedelta(days=3)).date()
|
||||
enddate = (self.user_workouts[0].startdatetime+datetime.timedelta(days=3)).date()
|
||||
|
||||
url = '/rowers/cumstats/'
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class CumFlexTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
@@ -330,6 +354,13 @@ class CumFlexTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
||||
def test_cumflex(self, mocked_df):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
@@ -363,7 +394,7 @@ class CumFlexTest(TestCase):
|
||||
}
|
||||
|
||||
form = TrendFlexModalForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
self.factory.user = self.u
|
||||
form = FlexAxesForm(self.factory,form_data)
|
||||
@@ -426,6 +457,13 @@ class MultiFlexTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.read_cols_df_sql', side_effect = mocked_read_df_cols_sql_multiflex)
|
||||
def test_multiflex(self, mocked_df):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
@@ -467,7 +505,7 @@ class MultiFlexTest(TestCase):
|
||||
}
|
||||
|
||||
form = MultiFlexChoiceForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
url = '/rowers/user-multiflex-select/'
|
||||
|
||||
@@ -519,6 +557,13 @@ class HistoTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.create_engine')
|
||||
@patch('rowers.dataprep.getsmallrowdata_db', side_effect=mocked_getpowerdata_db)
|
||||
def test_histo_workouts(self, mocked_sqlalchemy,
|
||||
@@ -0,0 +1,57 @@
|
||||
from statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from django.http import Http404
|
||||
|
||||
from rowers.views import get_workout
|
||||
|
||||
# tests simple functions from views.py
|
||||
class SimpleViewTest(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='basic')
|
||||
|
||||
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()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def start_protrial(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/starttrial/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
def start_plantrial(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/startplantrial/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@@ -26,8 +26,8 @@ class CoursesTest(TestCase):
|
||||
'file':f,
|
||||
}
|
||||
|
||||
courseform = CourseForm(form_data,file_data)
|
||||
self.assertTrue(courseform.is_valid)
|
||||
courseform = CourseForm(form_data)
|
||||
self.assertTrue(courseform.is_valid())
|
||||
|
||||
response = self.c.get('/rowers/courses/upload/')
|
||||
self.assertTrue(response.status_code,200)
|
||||
@@ -51,6 +51,9 @@ class CoursesTest(TestCase):
|
||||
response = self.c.get('/rowers/courses/1/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
response = self.c.get('/rowers/courses/1/map/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
form_data = {
|
||||
'name':'apekoers',
|
||||
'country':'United States of Atlantis',
|
||||
@@ -58,7 +61,7 @@ class CoursesTest(TestCase):
|
||||
}
|
||||
|
||||
form = GeoCourseEditForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post('/rowers/courses/1/edit/',form_data)
|
||||
self.assertTrue(response.status_code,200)
|
||||
|
||||
@@ -1,63 +1,8 @@
|
||||
|
||||
from statements import *
|
||||
|
||||
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()
|
||||
|
||||
from rowers.tasks import handle_getagegrouprecords
|
||||
|
||||
from rowers.utils import calculate_age
|
||||
|
||||
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
|
||||
rankingpiece = False
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
|
||||
class CPChartTest(TestCase):
|
||||
def setUp(self):
|
||||
self.u = UserFactory()
|
||||
@@ -108,6 +53,12 @@ class CPChartTest(TestCase):
|
||||
)
|
||||
perf.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def test_analytics_page(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
@@ -144,10 +95,10 @@ class CPChartTest(TestCase):
|
||||
}
|
||||
|
||||
form = MetricsForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
form = WorkoutForm(form_data)
|
||||
self.assertTrue(form.is_valid)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
|
||||
url = '/rowers/workout/addmanual/'
|
||||
|
||||
@@ -1,66 +1,7 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
from statements import *
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings, RequestFactory
|
||||
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open, multi_compare_view
|
||||
|
||||
from rowers.forms import (
|
||||
DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail,
|
||||
ChartParamChoiceForm,WorkoutMultipleCompareForm,
|
||||
BoxPlotChoiceForm)
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from rowers.plannedsessions import get_dates_timeperiod
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import (
|
||||
error500_view,error404_view,error400_view,error403_view
|
||||
)
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from django.contrib.sessions.middleware import SessionMiddleware
|
||||
|
||||
from django.conf import settings
|
||||
from importlib import import_module
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from django_mailbox.models import Mailbox,MessageAttachment,Message
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from rowers.models import *
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
class EmpowerTest(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -1,49 +1,5 @@
|
||||
#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 statements import *
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
@@ -61,3 +17,6 @@ class TestErrorPages(TestCase):
|
||||
self.assertEqual(response.status_code, 500)
|
||||
self.assertIn('500 Internal Server Error', unicode(response))
|
||||
|
||||
response = error400_view(request)
|
||||
self.assertEqual(response.status_code, 400)
|
||||
|
||||
|
||||
@@ -1,57 +1,9 @@
|
||||
#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
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
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):
|
||||
@@ -281,6 +233,7 @@ class StravaObjects(DjangoTestCase):
|
||||
|
||||
self.r.stravatoken = '12'
|
||||
self.r.stravarefreshtoken = '123'
|
||||
self.r.stravatokenexpirydate = datetime.datetime.now()-datetime.timedelta(days=1)
|
||||
|
||||
self.r.save()
|
||||
self.c.login(username='john',password='koeinsloot')
|
||||
@@ -333,15 +286,19 @@ class StravaObjects(DjangoTestCase):
|
||||
# self.assertEqual(response.url, '/rowers/workout/1/edit/')
|
||||
# self.assertEqual(response.status_code, 302)
|
||||
|
||||
@patch('rowers.stravastuff.requests.get', side_effect=mocked_requests)
|
||||
@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)
|
||||
def test_strava_list(self, mock_get, mockpost):
|
||||
result = rowers.stravastuff.rower_strava_token_refresh(self.u)
|
||||
self.assertEqual(result,"987654321234567898765432123456789")
|
||||
response = self.c.get('/rowers/workout/stravaimport/')
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
@patch('rowers.utils.requests.get', side_effect=mocked_requests)
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
@patch('rowers.dataprep.getsmallrowdata_db')
|
||||
def test_strava_import(self, mock_get,
|
||||
def test_strava_import(self, mock_get, mock_post,
|
||||
mocked_getsmallrowdata_db):
|
||||
|
||||
response = self.c.get('/rowers/workout/stravaimport/12',follow=True)
|
||||
@@ -354,7 +311,7 @@ class StravaObjects(DjangoTestCase):
|
||||
|
||||
@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)
|
||||
response = self.c.get('/stravacall_back?code=absdef23&scope=read',follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
@patch('rowers.stravastuff.requests.post', side_effect=mocked_requests)
|
||||
|
||||
@@ -1,50 +1,7 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from rowers.tests.mocks import *
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
from statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
class InteractiveChartTest(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -1,49 +1,7 @@
|
||||
#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 statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,49 +1,7 @@
|
||||
#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 statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class NewUserRegistrationTest(TestCase):
|
||||
@@ -51,7 +9,14 @@ class NewUserRegistrationTest(TestCase):
|
||||
self.c = Client()
|
||||
redis_connection.publish('tasks','KILL')
|
||||
|
||||
def test_newuser(self):
|
||||
def tearDown(self):
|
||||
try:
|
||||
os.remove('rowsandall_workouts_2018-01-01_2019-01-01.csv')
|
||||
except:
|
||||
pass
|
||||
|
||||
@patch('rowers.dataprep.workout_summary_to_df',side_effect=mock_workout_summaries)
|
||||
def test_newuser(self,mock_workout_summaries):
|
||||
form_data = {
|
||||
'first_name':'Jan',
|
||||
'last_name':'Roeiert',
|
||||
@@ -75,3 +40,44 @@ class NewUserRegistrationTest(TestCase):
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/me/gdpr-optin/?next=/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
url = '/rowers/me/gdpr-optin-confirm/?next=/rowers/list-workouts/'
|
||||
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/list-workouts/',
|
||||
status_code=302,target_status_code=200,
|
||||
)
|
||||
|
||||
url = '/rowers/exportallworkouts/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
|
||||
|
||||
self.assertTrue(response.status_code,200)
|
||||
|
||||
|
||||
form_data = {
|
||||
'startdate':'2018-01-01',
|
||||
'enddate':'2019-01-01'
|
||||
}
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
|
||||
self.assertTrue(response.status_code,200)
|
||||
|
||||
url = '/rowers/me/delete/'
|
||||
|
||||
form_data = {
|
||||
'delete_user':True,
|
||||
}
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/login/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,471 @@
|
||||
from statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from django_countries import countries
|
||||
|
||||
from rowers.braintreestuff import mocktest
|
||||
|
||||
class PaymentTest(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
# settings.DEBUG = True
|
||||
|
||||
p1 = PaidPlan(
|
||||
shortname='free',
|
||||
name='Basic',
|
||||
external_id='a',
|
||||
price=0,
|
||||
clubsize=0,
|
||||
paymentprocessor='braintree',
|
||||
paymenttype='single',
|
||||
)
|
||||
|
||||
p1.save()
|
||||
|
||||
p2 = PaidPlan(
|
||||
shortname='pro_recurring',
|
||||
name='Pro (recurring)',
|
||||
external_id='b',
|
||||
price=15,
|
||||
clubsize=0,
|
||||
paymentprocessor='braintree',
|
||||
paymenttype='single',
|
||||
)
|
||||
|
||||
p2.save()
|
||||
|
||||
p3 = PaidPlan(
|
||||
shortname='pro_single',
|
||||
name='Pro (single)',
|
||||
external_id='c',
|
||||
price=20,
|
||||
clubsize=0,
|
||||
paymentprocessor='braintree',
|
||||
paymenttype='single',
|
||||
)
|
||||
|
||||
p3.save()
|
||||
|
||||
self.c = Client()
|
||||
self.password = faker.word()
|
||||
|
||||
# def tearDown(self):
|
||||
# settings.DEBUG = False
|
||||
|
||||
@patch('rowers.views.braintreestuff.create_customer',side_effect=mock_create_customer)
|
||||
def test_billing_view(self,mocked_create_customer):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/billing/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
plans = PaidPlan.objects.filter(price__gt=0).order_by('price')
|
||||
plan = plans[0]
|
||||
|
||||
country = faker.country()
|
||||
countrycode = 'NL'
|
||||
for code, name in list(countries):
|
||||
if name.lower() == country.lower():
|
||||
countrycode = code
|
||||
|
||||
form_data = {
|
||||
'street_address':faker.street_address(),
|
||||
'city':faker.city(),
|
||||
'postal_code':faker.postalcode(),
|
||||
'country':countrycode,
|
||||
'plan':plan.id,
|
||||
}
|
||||
|
||||
form = RowerBillingAddressForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
form = PlanSelectForm(form_data,paymentprocessor='braintree')
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = '/rowers/checkout/'+str(plan.id)+'/'
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = expected_url,
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
|
||||
def test_upgrade_view(self,mocked_gateway):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
r.country = 'NL'
|
||||
r.customer_id = 34
|
||||
r.subscription_id = 34
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/upgrade/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
plans = PaidPlan.objects.filter(price__gt=0).order_by('price')
|
||||
plan = plans[0]
|
||||
|
||||
country = faker.country()
|
||||
countrycode = 'NL'
|
||||
for code, name in list(countries):
|
||||
if name.lower() == country.lower():
|
||||
countrycode = code
|
||||
|
||||
form_data = {
|
||||
'street_address':faker.street_address(),
|
||||
'city':faker.city(),
|
||||
'postal_code':faker.postalcode(),
|
||||
'country':countrycode,
|
||||
'plan':plan.id,
|
||||
}
|
||||
|
||||
form = RowerBillingAddressForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
form = PlanSelectForm(form_data,paymentprocessor='braintree')
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = '/rowers/upgradecheckout/'+str(plan.id)+'/'
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = expected_url,
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
|
||||
def test_down_view(self,mocked_gateway):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
r.country = 'NL'
|
||||
r.customer_id = 34
|
||||
r.subscription_id = 34
|
||||
r.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
r.paidplan = plan
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/downgrade/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
country = faker.country()
|
||||
countrycode = 'NL'
|
||||
for code, name in list(countries):
|
||||
if name.lower() == country.lower():
|
||||
countrycode = code
|
||||
|
||||
form_data = {
|
||||
'street_address':faker.street_address(),
|
||||
'city':faker.city(),
|
||||
'postal_code':faker.postalcode(),
|
||||
'country':countrycode,
|
||||
'plan':plans[0].id,
|
||||
}
|
||||
|
||||
form = RowerBillingAddressForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
form = PlanSelectForm(form_data,paymentprocessor='braintree')
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
expected_url = '/rowers/downgradecheckout/'+str(plans[0].id)+'/'
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = expected_url,
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
|
||||
def test_planstop_view(self,mocked_gateway):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
r.country = 'NL'
|
||||
r.customer_id = 34
|
||||
r.subscription_id = 34
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
r.paidplan = plan
|
||||
r.save()
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/cancelsubscriptions/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
@patch('rowers.views.braintreestuff.gateway',side_effect=MockBraintreeGateway)
|
||||
def test_planstobasic_view(self,mocked_gateway):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
r.country = 'NL'
|
||||
r.customer_id = 34
|
||||
r.subscription_id = 34
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
r.paidplan = plan
|
||||
r.save()
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/cancelsubscription/34/'
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/me/cancelsubscriptions/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@patch('rowers.tests.test_payments.mocktest', side_effect=mock_mocktest)
|
||||
def test_patch(self, mock_mocktest):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
r.save()
|
||||
result = mocktest(r)
|
||||
self.assertEqual(result,'121')
|
||||
|
||||
@patch('rowers.views.braintreestuff.create_subscription', side_effect=mock_create_subscription)
|
||||
def test_checkouts_view(self,mock_subscription):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
form_data = {
|
||||
'amount':'15.00',
|
||||
'plan': plans[1].id,
|
||||
'payment_method_nonce': 'aap',
|
||||
}
|
||||
|
||||
form = BillingForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/checkouts/'
|
||||
|
||||
response = self.c.post(url, form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/paymentcompleted/?amount=20.00',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
@patch('rowers.views.braintreestuff.update_subscription', side_effect=mock_update_subscription)
|
||||
def test_upgrade_checkouts_view(self,mock_subscription):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
form_data = {
|
||||
'amount':'15.00',
|
||||
'plan': plans[1].id,
|
||||
'payment_method_nonce': 'aap',
|
||||
}
|
||||
|
||||
form = BillingForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/upgradecheckouts/'
|
||||
|
||||
response = self.c.post(url, form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/paymentcompleted/?amount=20.00',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@patch('rowers.views.braintreestuff.update_subscription', side_effect=mock_update_subscription)
|
||||
def test_downgrade_checkouts_view(self,mock_subscription):
|
||||
u = UserFactory()
|
||||
r = Rower.objects.create(user=u,
|
||||
birthdate=faker.profile()['birthdate'],
|
||||
gdproptin=True,
|
||||
gdproptindate=timezone.now(),
|
||||
rowerplan='coach',
|
||||
paymentprocessor='braintree',
|
||||
street_address = faker.street_address(),
|
||||
city = faker.city(),
|
||||
postal_code = faker.postalcode(),
|
||||
country = faker.country(),
|
||||
)
|
||||
|
||||
r.save()
|
||||
u.set_password(self.password)
|
||||
u.save()
|
||||
|
||||
plans = PaidPlan.objects.all().order_by('price')
|
||||
plan = plans[1]
|
||||
|
||||
form_data = {
|
||||
'amount':'15.00',
|
||||
'plan': plans[1].id,
|
||||
'payment_method_nonce': 'aap',
|
||||
}
|
||||
|
||||
form = BillingForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
login = self.c.login(username=u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/downgradecheckouts/'
|
||||
|
||||
response = self.c.post(url, form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url = '/rowers/downgradecompleted/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#from __future__ import print_function
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
@@ -1,48 +1,6 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
from statements import *
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class DataTest(TestCase):
|
||||
|
||||
@@ -1,62 +1,10 @@
|
||||
from statements import *
|
||||
from nose.tools import assert_raises
|
||||
|
||||
from rowers.views import get_workout
|
||||
|
||||
from django.http import Http404
|
||||
from django.core.exceptions import PermissionDenied
|
||||
|
||||
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
|
||||
from django.http import Http404
|
||||
|
||||
email = faker.email()
|
||||
username = faker.profile()['username']
|
||||
|
||||
first_name = faker.name().split(' ')[0]
|
||||
last_name = faker.name().split(' ')[0]
|
||||
|
||||
class WorkoutFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Workout
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
notes = faker.text()
|
||||
startdatetime = row.rowdatetime
|
||||
starttime = workoutstarttime
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=duration
|
||||
distance=totaldist
|
||||
csvfilename=filename
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
from rowers.views import get_workout
|
||||
|
||||
# tests simple functions from views.py
|
||||
class SimpleViewTest(TestCase):
|
||||
@@ -76,6 +24,14 @@ class SimpleViewTest(TestCase):
|
||||
self.u.set_password(self.password)
|
||||
self.u.save()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
|
||||
def test_getrequestrower(self):
|
||||
user_no_rower = UserFactory(username='norower')
|
||||
user_no_rower.set_password(faker.word())
|
||||
@@ -89,8 +45,32 @@ class SimpleViewTest(TestCase):
|
||||
response = self.c.get(url)
|
||||
self.assertIn(response.status_code,[403,404])
|
||||
|
||||
|
||||
def test_sendmail(self):
|
||||
login = self.c.login(username=self.u.username, password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/email/send/'
|
||||
|
||||
form_data = {
|
||||
'firstname': 'John',
|
||||
'lastname':'Doe',
|
||||
'email':'roosendaalsander@gmail.com',
|
||||
'subject':'testing',
|
||||
'botcheck': True,
|
||||
'message': faker.text()
|
||||
}
|
||||
|
||||
form = EmailForm(form_data)
|
||||
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/email/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
def test_getworkout(self):
|
||||
with assert_raises(Http404):
|
||||
|
||||
@@ -1,48 +1,6 @@
|
||||
#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 statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
|
||||
#@pytest.mark.django_db
|
||||
|
||||
+142
-54
@@ -2,61 +2,8 @@ from statements import *
|
||||
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
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')
|
||||
|
||||
from rowers.teams import *
|
||||
|
||||
# add following tests:
|
||||
# - when member leaves team, his name should be removed from planned sessions
|
||||
|
||||
class UserFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = User
|
||||
|
||||
email = faker.email()
|
||||
username = faker.profile()['username']
|
||||
|
||||
first_name = faker.name().split(' ')[0]
|
||||
last_name = faker.name().split(' ')[0]
|
||||
|
||||
class WorkoutFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Workout
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
notes = faker.text()
|
||||
startdatetime = row.rowdatetime
|
||||
starttime = workoutstarttime
|
||||
workouttype='water'
|
||||
date=timezone.now().date()
|
||||
duration=duration
|
||||
distance=totaldist
|
||||
csvfilename=filename
|
||||
|
||||
class SessionFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = PlannedSession
|
||||
|
||||
name = factory.LazyAttribute(lambda _: faker.word())
|
||||
comment = faker.text()
|
||||
|
||||
class TeamFactory(factory.DjangoModelFactory):
|
||||
class Meta:
|
||||
model = Team
|
||||
@@ -66,7 +13,7 @@ class TeamFactory(factory.DjangoModelFactory):
|
||||
private = 'open'
|
||||
viewing = 'allmembers'
|
||||
|
||||
class TeamCreateFactory(TestCase):
|
||||
class TeamCreateTest(TestCase):
|
||||
def setUp(self):
|
||||
redis_connection.publish('tasks','KILL')
|
||||
self.user_passwords = []
|
||||
@@ -79,6 +26,7 @@ class TeamCreateFactory(TestCase):
|
||||
'user6',
|
||||
]
|
||||
self.users = []
|
||||
self.csvfilenames = []
|
||||
|
||||
for i in range(6):
|
||||
u = UserFactory(username=usernames[i])
|
||||
@@ -101,6 +49,8 @@ class TeamCreateFactory(TestCase):
|
||||
|
||||
|
||||
workouts = WorkoutFactory.create_batch(5, user=r)
|
||||
for w in workouts:
|
||||
self.csvfilenames.append(w.csvfilename)
|
||||
|
||||
|
||||
self.c = Client()
|
||||
@@ -110,7 +60,31 @@ class TeamCreateFactory(TestCase):
|
||||
|
||||
self.t = TeamFactory(manager=self.u)
|
||||
|
||||
# need to set up some requests for testing (they are not good below)
|
||||
|
||||
def tearDown(self):
|
||||
for csvfilename in self.csvfilenames:
|
||||
try:
|
||||
os.remove(csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def test_manager_drop_member(self):
|
||||
res = add_member(self.t.id,self.users[1].rower)
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/team/{t}/drop/{u}/'.format(
|
||||
t = self.t.id,
|
||||
u = self.users[1].id
|
||||
)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/me/teams/'.format(t=self.t.id),
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
def test_teamview(self):
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
@@ -131,6 +105,117 @@ class TeamCreateFactory(TestCase):
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
def test_teamsview(self):
|
||||
id, result = create_request(self.t,self.users[2].id)
|
||||
id, comment = create_invite(self.t,self.u,user=self.users[1])
|
||||
|
||||
url = '/rowers/me/teams/'
|
||||
|
||||
login = self.c.login(username=self.users[2].username, password = self.user_passwords[2])
|
||||
self.assertTrue(login)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
html = BeautifulSoup(response.content,'html.parser')
|
||||
urls = [a['href'] for a in html.find_all('a')]
|
||||
|
||||
for u in urls:
|
||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||
response = self.c.get(u)
|
||||
if response.status_code not in [200,302]:
|
||||
print url
|
||||
print u
|
||||
print response.status_code
|
||||
self.assertIn(response.status_code,[200,302])
|
||||
|
||||
login = self.c.login(username=self.users[1].username,
|
||||
password = self.user_passwords[1])
|
||||
self.assertTrue(login)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
html = BeautifulSoup(response.content,'html.parser')
|
||||
urls = [a['href'] for a in html.find_all('a')]
|
||||
|
||||
for u in urls:
|
||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||
response = self.c.get(u)
|
||||
if response.status_code not in [200,302]:
|
||||
print url
|
||||
print u
|
||||
print response.status_code
|
||||
self.assertIn(response.status_code,[200,302])
|
||||
|
||||
def test_teamsview_manager(self):
|
||||
id, result = create_request(self.t,self.users[2].id)
|
||||
id, comment = create_invite(self.t,self.u,user=self.users[1])
|
||||
|
||||
url = '/rowers/me/teams/'
|
||||
|
||||
login = self.c.login(username=self.u,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
html = BeautifulSoup(response.content,'html.parser')
|
||||
urls = [a['href'] for a in html.find_all('a')]
|
||||
|
||||
for u in urls:
|
||||
if 'rowers' in u and 'http' not in u and 'authorize' not in u and 'import' not in u and 'logout' not in u:
|
||||
response = self.c.get(u)
|
||||
if response.status_code not in [200,302]:
|
||||
print url
|
||||
print u
|
||||
print response.status_code
|
||||
self.assertIn(response.status_code,[200,302])
|
||||
|
||||
def test_teamview_member_request(self):
|
||||
|
||||
login = self.c.login(username=self.users[1].username, password = self.user_passwords[1])
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/team/{t}/requestmembership/{u}/'.format(
|
||||
t=self.t.id,
|
||||
u=self.users[1].id)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code, 200)
|
||||
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/team/{t}/'.format(t=self.t.id),
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
id, result = create_request(self.t,self.users[2].id)
|
||||
self.assertTrue(id != 0)
|
||||
|
||||
login = self.c.login(username=self.users[2].username, password = self.user_passwords[2])
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/invitation/{id}/revoke/'.format(id=id)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/team/{t}/'.format(t=self.t.id),
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
id, result = create_request(self.t,self.users[2].id)
|
||||
self.assertTrue(id != 0)
|
||||
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/invitation/{id}/reject/'.format(id=id)
|
||||
response = self.c.get(url,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
self.assertRedirects(response,
|
||||
expected_url='/rowers/me/teams/',
|
||||
status_code=302,target_status_code=200)
|
||||
|
||||
|
||||
def test_team_invite_view(self):
|
||||
login = self.c.login(username=self.u.username, password = self.password)
|
||||
self.assertTrue(login)
|
||||
@@ -179,6 +264,9 @@ class TeamCreateFactory(TestCase):
|
||||
test = Team.objects.filter(id=tid)
|
||||
self.assertEqual(len(test),0)
|
||||
|
||||
def test_lowlevel_create_request(self):
|
||||
id,comment = create_request(self.t,self.users[1].id)
|
||||
self.assertEqual(id,1)
|
||||
|
||||
def test_lowlevel_remove_member(self):
|
||||
id, comment = add_member(self.t.id, self.users[3].rower)
|
||||
|
||||
@@ -1,54 +1,8 @@
|
||||
#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,
|
||||
add_defaultfavorites
|
||||
)
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
|
||||
from rowers.tests.mocks import *
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
from rowers.views import add_defaultfavorites
|
||||
|
||||
#@pytest.mark.django_db
|
||||
class ViewTest(TestCase):
|
||||
|
||||
@@ -1,48 +1,6 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
|
||||
pytestmark = pytest.mark.django_db
|
||||
|
||||
from bs4 import BeautifulSoup
|
||||
import re
|
||||
from nose_parameterized import parameterized
|
||||
from django.test import TestCase, Client,override_settings
|
||||
from django.core.management import call_command
|
||||
from django.utils.six import StringIO
|
||||
from django.test.client import RequestFactory
|
||||
from rowers.views import checkworkoutuser,c2_open
|
||||
from rowers.models import Workout, User, Rower, WorkoutForm,RowerForm,GraphImage
|
||||
from rowers.forms import DocumentsForm,CNsummaryForm,RegistrationFormUniqueEmail
|
||||
import rowers.plots as plots
|
||||
import rowers.interactiveplots as iplots
|
||||
import datetime
|
||||
from rowingdata import rowingdata as rdata
|
||||
from rowingdata import rower as rrower
|
||||
from django.utils import timezone
|
||||
from rowers.rows import handle_uploaded_file
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from time import strftime,strptime,mktime,time,daylight
|
||||
import os
|
||||
from rowers.tasks import handle_makeplot
|
||||
from rowers.utils import serialize_list,deserialize_list
|
||||
from rowers.utils import NoTokenError
|
||||
from shutil import copyfile
|
||||
from nose.tools import assert_true
|
||||
from mock import Mock, patch
|
||||
from minimocktest import MockTestCase
|
||||
import pandas as pd
|
||||
import rowers.c2stuff as c2stuff
|
||||
|
||||
import json
|
||||
import numpy as np
|
||||
|
||||
from rowers import urls
|
||||
from rowers.views import error500_view,error404_view,error400_view,error403_view
|
||||
|
||||
from rowers.dataprep import delete_strokedata
|
||||
from rowers.tests.mocks import *
|
||||
from redis import StrictRedis
|
||||
redis_connection = StrictRedis()
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
|
||||
tested = [
|
||||
|
||||
+175
-19
@@ -1,24 +1,7 @@
|
||||
#from __future__ import print_function
|
||||
import pytest
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
|
||||
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
|
||||
|
||||
@@ -86,3 +69,176 @@ class UserTestsNoRower(TestCase):
|
||||
response = self.c.get('/rowers/list-workouts',follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
class UserPreferencesTest(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()
|
||||
|
||||
def tearDown(self):
|
||||
for workout in self.user_workouts:
|
||||
try:
|
||||
os.remove(workout.csvfilename)
|
||||
except (IOError, WindowsError):
|
||||
pass
|
||||
|
||||
def test_accountsettings(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/edit/'
|
||||
|
||||
form_data = {
|
||||
'sex':'male',
|
||||
'birthdate':'1972-04-10',
|
||||
'weightcategory':'lwt',
|
||||
'adaptiveclass':'None',
|
||||
'getemailnotifications':True,
|
||||
'getimportantemails':True,
|
||||
'defaulttimezone':'UTC',
|
||||
'showfavoritechartnotes':False,
|
||||
'defaultlandingpage':'workout_edit_view',
|
||||
'first_name': self.u.first_name,
|
||||
'last_name': self.u.last_name,
|
||||
'email':self.u.email
|
||||
}
|
||||
|
||||
form = AccountRowerForm(form_data)
|
||||
userform = UserForm(form_data,instance=self.u)
|
||||
self.assertTrue(form.is_valid())
|
||||
self.assertTrue(userform.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
def test_exportsettings(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
url = '/rowers/me/exportsettings/'
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
form_data = {
|
||||
'stravaexportas':'Rowing',
|
||||
'polar_auto_import':True,
|
||||
'c2_auto_export':False,
|
||||
'c2_auto_import':False,
|
||||
'mapmyfitness_auto_export':False,
|
||||
'runkeeper_auto_export':False,
|
||||
'sporttracks_auto_export':False,
|
||||
'strava_auto_export':False,
|
||||
'strava_auto_import':False,
|
||||
'trainingpeaks_auto_export':False,
|
||||
}
|
||||
|
||||
form = RowerExportForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
def test_zones_workflowsettings(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
post_data = {
|
||||
u'middlepanel-0-panel':u'panel_middlesocial.html',
|
||||
u'middlepanel-1-panel':u'panel_statcharts.html',
|
||||
u'middlepanel-2-panel':u'flexthumbnails.html',
|
||||
u'middlepanel-3-panel':u'panel_summary.html',
|
||||
u'middlepanel-4-panel':u'panel_map.html',
|
||||
u'middlepanel-5-panel':u'panel_notes.html',
|
||||
u'middlepanel-6-panel':u'panel_shortcomment.html',
|
||||
u'middlepanel-7-panel':u'None',
|
||||
u'middlepanel-8-panel':u'None',
|
||||
u'middlepanel-INITIAL_FORMS':'8',
|
||||
u'middlepanel-MAX_NUM_FORMS':u'1000',
|
||||
u'middlepanel-MIN_NUM_FORMS':u'0',
|
||||
u'middlepanel-TOTAL_FORMS':u'8',
|
||||
}
|
||||
|
||||
MiddlePanelFormSet = formset_factory(WorkFlowMiddlePanelElement,extra=1)
|
||||
middlepanel_formset = MiddlePanelFormSet(post_data,prefix='middlepanel')
|
||||
self.assertTrue(middlepanel_formset.is_valid())
|
||||
|
||||
url = '/rowers/me/workflowconfig2/'
|
||||
response = self.c.get(url)
|
||||
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
response = self.c.post(url,post_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
def test_zones_preferences(self):
|
||||
login = self.c.login(username=self.u.username,password=self.password)
|
||||
self.assertTrue(login)
|
||||
|
||||
form_data = {
|
||||
'max':181,
|
||||
'ut2':140,
|
||||
'ut1':150,
|
||||
'tr':170,
|
||||
'at':160,
|
||||
'an':175,
|
||||
'rest':50
|
||||
}
|
||||
|
||||
form = RowerForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
url = '/rowers/me/preferences/'
|
||||
|
||||
response = self.c.get(url)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
form_data = {
|
||||
'hrftp': 160,
|
||||
'ftp':230,
|
||||
'otwslack':14
|
||||
}
|
||||
|
||||
form = RowerPowerForm(form_data)
|
||||
self.assertTrue(form.is_valid())
|
||||
|
||||
response = self.c.post(url,form_data,follow=True)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
form_data = {
|
||||
'pw_ut2':150,
|
||||
'pw_ut1':160,
|
||||
'pw_at':170,
|
||||
'pw_tr':200,
|
||||
'pw_an':230,
|
||||
'ut3name':'Recovery',
|
||||
'ut2name':'Pwr UT2',
|
||||
'ut1name':'Pwr UT1',
|
||||
'atname':'Pwr AT',
|
||||
'trname':'Pwr TR',
|
||||
'anname':'Explode'
|
||||
}
|
||||
|
||||
response = self.c.post(url,form_data)
|
||||
self.assertEqual(response.status_code,200)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#from __future__ import print_function
|
||||
from statements import *
|
||||
nu = datetime.datetime.now()
|
||||
Vendored
+40507
File diff suppressed because it is too large
Load Diff
BIN
Binary file not shown.
Vendored
+1
-1
@@ -2502,7 +2502,7 @@
|
||||
</Trackpoint>
|
||||
</Track>
|
||||
</Lap>
|
||||
<Notes><Element 'Notes' at 0x1b9cb518></Notes>
|
||||
<Notes><Element 'Notes' at 0x13a97908></Notes>
|
||||
</Activity>
|
||||
</Activities>
|
||||
<Creator>
|
||||
|
||||
+544
@@ -0,0 +1,544 @@
|
||||
,Stroke Data CSV,Stroke Data TCX,TRIMP Training Load,TSS Training Load,adaptive classification,date,distance (m),duration ,name,notes,timezone,type,weight (kg),weight category
|
||||
0,https://rowsandall.com/rowers/workout/2542/emailcsv,https://rowsandall.com/rowers/workout/2542/emailtcx,0,0,None,1970-01-01 00:00:00+00:00,9578,00:47:55.400000,Test Auto Sync Pro User,,Europe/Prague,rower,80.0,lwt
|
||||
1,https://rowsandall.com/rowers/workout/2500/emailcsv,https://rowsandall.com/rowers/workout/2500/emailtcx,0,0,None,2014-02-26 20:32:33+00:00,65,00:00:02,Sample Workout JSON,,UTC,water,80.0,lwt
|
||||
2,https://rowsandall.com/rowers/workout/3033/emailcsv,https://rowsandall.com/rowers/workout/3033/emailtcx,95,264,None,2015-06-02 06:29:02+00:00,14002,00:59:37.700000,Test P,,Europe/Prague,water,80.0,hwt
|
||||
3,https://rowsandall.com/rowers/workout/2501/emailcsv,https://rowsandall.com/rowers/workout/2501/emailtcx,0,0,None,2016-04-02 08:15:08+00:00,10269,01:05:24,Completed a workout (generic) 6.35 mi on 04/02/16,,Europe/Prague,water,80.0,lwt
|
||||
4,https://rowsandall.com/rowers/workout/3094/emailcsv,https://rowsandall.com/rowers/workout/3094/emailtcx,40,30,None,2016-06-03 16:55:18.471090+00:00,6063,00:32:28.900000,Tim,,Europe/Prague,rower,80.0,hwt
|
||||
5,https://rowsandall.com/rowers/workout/3095/emailcsv,https://rowsandall.com/rowers/workout/3095/emailtcx,7,0,None,2016-07-28 11:35:01+00:00,751,00:02:50,test fut,,Europe/Prague,water,80.0,hwt
|
||||
6,https://rowsandall.com/rowers/workout/2408/emailcsv,https://rowsandall.com/rowers/workout/2408/emailtcx,0,0,None,2016-07-30 08:40:36+00:00,1001,00:03:41,Comparison,,Europe/Berlin,rower,80.0,lwt
|
||||
7,https://rowsandall.com/rowers/workout/3253/emailcsv,https://rowsandall.com/rowers/workout/3253/emailtcx,20,0,PR1,2016-07-30 10:13:03+00:00,2440,00:14:31.500000,Test,,Europe/Prague,rower,80.0,hwt
|
||||
8,https://rowsandall.com/rowers/workout/3032/emailcsv,https://rowsandall.com/rowers/workout/3032/emailtcx,0,0,None,2016-07-31 12:35:01+00:00,1111,00:04:32.700000,,,Europe/Prague,water,80.0,hwt
|
||||
9,https://rowsandall.com/rowers/workout/3096/emailcsv,https://rowsandall.com/rowers/workout/3096/emailtcx,11,0,None,2016-07-31 12:35:01+00:00,1111,00:04:32.700000,SC Test,,Europe/Prague,water,80.0,hwt
|
||||
10,https://rowsandall.com/rowers/workout/2572/emailcsv,https://rowsandall.com/rowers/workout/2572/emailtcx,0,0,None,2016-11-28 08:37:02+00:00,499,00:01:58,BC,,Europe/Prague,rower,80.0,lwt
|
||||
11,https://rowsandall.com/rowers/workout/2379/emailcsv,https://rowsandall.com/rowers/workout/2379/emailtcx,0,0,None,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Prague,water,80.0,lwt
|
||||
12,https://rowsandall.com/rowers/workout/2380/emailcsv,https://rowsandall.com/rowers/workout/2380/emailtcx,0,0,None,2017-10-27 16:14:42+00:00,742,00:02:25,Test Weba,,Europe/Belgrade,water,80.0,lwt
|
||||
13,https://rowsandall.com/rowers/workout/2521/emailcsv,https://rowsandall.com/rowers/workout/2521/emailtcx,0,0,None,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
14,https://rowsandall.com/rowers/workout/2524/emailcsv,https://rowsandall.com/rowers/workout/2524/emailtcx,0,0,None,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
15,https://rowsandall.com/rowers/workout/2527/emailcsv,https://rowsandall.com/rowers/workout/2527/emailtcx,0,0,None,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
16,https://rowsandall.com/rowers/workout/2531/emailcsv,https://rowsandall.com/rowers/workout/2531/emailtcx,0,0,None,2017-11-09 09:15:32+00:00,49842,02:19:37,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
17,https://rowsandall.com/rowers/workout/2523/emailcsv,https://rowsandall.com/rowers/workout/2523/emailtcx,0,0,None,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
18,https://rowsandall.com/rowers/workout/2526/emailcsv,https://rowsandall.com/rowers/workout/2526/emailtcx,0,0,None,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
19,https://rowsandall.com/rowers/workout/2529/emailcsv,https://rowsandall.com/rowers/workout/2529/emailtcx,0,0,None,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
20,https://rowsandall.com/rowers/workout/2533/emailcsv,https://rowsandall.com/rowers/workout/2533/emailtcx,0,0,None,2017-11-09 15:15:32+00:00,0,02:28:28,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
21,https://rowsandall.com/rowers/workout/2520/emailcsv,https://rowsandall.com/rowers/workout/2520/emailtcx,0,0,None,2017-11-09 18:15:32+00:00,10016,01:06:03,Polar Import,,Europe/Helsinki,rower,80.0,lwt
|
||||
22,https://rowsandall.com/rowers/workout/2522/emailcsv,https://rowsandall.com/rowers/workout/2522/emailtcx,0,0,None,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
23,https://rowsandall.com/rowers/workout/2525/emailcsv,https://rowsandall.com/rowers/workout/2525/emailtcx,0,0,None,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
24,https://rowsandall.com/rowers/workout/2528/emailcsv,https://rowsandall.com/rowers/workout/2528/emailtcx,0,0,None,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
25,https://rowsandall.com/rowers/workout/2532/emailcsv,https://rowsandall.com/rowers/workout/2532/emailtcx,0,0,None,2017-11-09 18:15:32+00:00,10016,01:06:03,Import from Polar Flow,imported through email,Europe/Helsinki,water,80.0,lwt
|
||||
26,https://rowsandall.com/rowers/workout/2494/emailcsv,https://rowsandall.com/rowers/workout/2494/emailtcx,0,0,None,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Race,,Europe/Rome,water,80.0,lwt
|
||||
27,https://rowsandall.com/rowers/workout/2496/emailcsv,https://rowsandall.com/rowers/workout/2496/emailtcx,0,0,None,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Race,,Europe/Rome,water,80.0,lwt
|
||||
28,https://rowsandall.com/rowers/workout/2497/emailcsv,https://rowsandall.com/rowers/workout/2497/emailtcx,0,0,None,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,SpdCoach 2,,Europe/Rome,rower,80.0,lwt
|
||||
29,https://rowsandall.com/rowers/workout/2498/emailcsv,https://rowsandall.com/rowers/workout/2498/emailtcx,0,0,None,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,boat speed test,,Europe/Rome,water,80.0,lwt
|
||||
30,https://rowsandall.com/rowers/workout/2499/emailcsv,https://rowsandall.com/rowers/workout/2499/emailtcx,0,0,None,2017-11-12 10:25:00+00:00,10526,00:44:01.700000,Boat Speed test 2,,Europe/Rome,water,80.0,lwt
|
||||
31,https://rowsandall.com/rowers/workout/2724/emailcsv,https://rowsandall.com/rowers/workout/2724/emailtcx,55,41,None,2018-01-01 09:27:47+00:00,5000,00:18:37,C2 Import Workout from 2018-01-01 09:27:47+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
32,https://rowsandall.com/rowers/workout/2723/emailcsv,https://rowsandall.com/rowers/workout/2723/emailtcx,0,9,None,2018-01-01 09:48:09+00:00,2963,00:13:29,C2 Import Workout from 2018-01-01 09:48:09+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
33,https://rowsandall.com/rowers/workout/2722/emailcsv,https://rowsandall.com/rowers/workout/2722/emailtcx,105,66,None,2018-01-02 18:22:08+00:00,14183,00:59:49.900000,C2 Import Workout from 2018-01-02 18:22:08+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
34,https://rowsandall.com/rowers/workout/2721/emailcsv,https://rowsandall.com/rowers/workout/2721/emailtcx,32,24,None,2018-01-03 16:24:47+00:00,4821,00:20:04.500000,C2 Import Workout from 2018-01-03 16:24:47+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
35,https://rowsandall.com/rowers/workout/2720/emailcsv,https://rowsandall.com/rowers/workout/2720/emailtcx,21,19,None,2018-01-03 16:46:19+00:00,2000,00:07:07.500000,C2 Import Workout from 2018-01-03 16:46:19+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
36,https://rowsandall.com/rowers/workout/2719/emailcsv,https://rowsandall.com/rowers/workout/2719/emailtcx,19,9,None,2018-01-03 16:57:04+00:00,2997,00:13:35.100000,C2 Import Workout from 2018-01-03 16:57:04+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
37,https://rowsandall.com/rowers/workout/2718/emailcsv,https://rowsandall.com/rowers/workout/2718/emailtcx,26,22,None,2018-01-06 13:59:30+00:00,4722,00:20:06.200000,C2 Import Workout from 2018-01-06 13:59:30+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
38,https://rowsandall.com/rowers/workout/2717/emailcsv,https://rowsandall.com/rowers/workout/2717/emailtcx,10,14,None,2018-01-06 14:20:43+00:00,1171,00:04:00,C2 Import Workout from 2018-01-06 14:20:43+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
39,https://rowsandall.com/rowers/workout/2716/emailcsv,https://rowsandall.com/rowers/workout/2716/emailtcx,64,53,None,2018-01-06 14:25:53+00:00,8006,00:36:13.600000,C2 Import Workout from 2018-01-06 14:25:53+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
40,https://rowsandall.com/rowers/workout/2715/emailcsv,https://rowsandall.com/rowers/workout/2715/emailtcx,0,11,None,2018-01-07 14:03:51+00:00,2520,00:10:42.700000,C2 Import Workout from 2018-01-07 14:03:51+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
41,https://rowsandall.com/rowers/workout/2714/emailcsv,https://rowsandall.com/rowers/workout/2714/emailtcx,0,47,None,2018-01-07 14:18:45+00:00,9996,00:42:35.100000,C2 Import Workout from 2018-01-07 14:18:45+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
42,https://rowsandall.com/rowers/workout/2713/emailcsv,https://rowsandall.com/rowers/workout/2713/emailtcx,33,26,None,2018-01-09 18:22:19+00:00,5267,00:22:34.200000,C2 Import Workout from 2018-01-09 18:22:19+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
43,https://rowsandall.com/rowers/workout/2712/emailcsv,https://rowsandall.com/rowers/workout/2712/emailtcx,7,12,None,2018-01-09 18:46:20+00:00,1000,00:03:21.400000,C2 Import Workout from 2018-01-09 18:46:20+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
44,https://rowsandall.com/rowers/workout/2711/emailcsv,https://rowsandall.com/rowers/workout/2711/emailtcx,16,8,None,2018-01-09 18:51:03+00:00,2300,00:10:04.500000,C2 Import Workout from 2018-01-09 18:51:03+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
45,https://rowsandall.com/rowers/workout/2710/emailcsv,https://rowsandall.com/rowers/workout/2710/emailtcx,10,10,None,2018-01-12 16:09:10+00:00,2008,00:08:39.100000,C2 Import Workout from 2018-01-12 16:09:10+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
46,https://rowsandall.com/rowers/workout/2709/emailcsv,https://rowsandall.com/rowers/workout/2709/emailtcx,2,9,None,2018-01-12 16:19:00+00:00,500,00:01:33.400000,C2 Import Workout from 2018-01-12 16:19:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
47,https://rowsandall.com/rowers/workout/2708/emailcsv,https://rowsandall.com/rowers/workout/2708/emailtcx,13,5,None,2018-01-12 16:21:06+00:00,2002,00:09:25.600000,C2 Import Workout from 2018-01-12 16:21:06+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
48,https://rowsandall.com/rowers/workout/2707/emailcsv,https://rowsandall.com/rowers/workout/2707/emailtcx,0,0,None,2018-01-12 16:31:08+00:00,100,00:00:17.600000,C2 Import Workout from 2018-01-12 16:31:08+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
49,https://rowsandall.com/rowers/workout/2706/emailcsv,https://rowsandall.com/rowers/workout/2706/emailtcx,15,6,None,2018-01-12 16:31:58+00:00,2011,00:08:56.600000,C2 Import Workout from 2018-01-12 16:31:58+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
50,https://rowsandall.com/rowers/workout/2705/emailcsv,https://rowsandall.com/rowers/workout/2705/emailtcx,24,9,None,2018-01-13 12:40:00+00:00,2000,00:06:55.800000,C2 Import Workout from 2018-01-13 12:40:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
51,https://rowsandall.com/rowers/workout/2704/emailcsv,https://rowsandall.com/rowers/workout/2704/emailtcx,7,10,None,2018-01-16 18:40:49+00:00,2007,00:08:30.800000,C2 Import Workout from 2018-01-16 18:40:49+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
52,https://rowsandall.com/rowers/workout/2703/emailcsv,https://rowsandall.com/rowers/workout/2703/emailtcx,0,7,None,2018-01-16 18:50:09+00:00,333,00:01:00,C2 Import Workout from 2018-01-16 18:50:09+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
53,https://rowsandall.com/rowers/workout/2702/emailcsv,https://rowsandall.com/rowers/workout/2702/emailtcx,64,56,None,2018-01-16 18:51:41+00:00,6820,00:31:22.200000,C2 Import Workout from 2018-01-16 18:51:41+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
54,https://rowsandall.com/rowers/workout/2701/emailcsv,https://rowsandall.com/rowers/workout/2701/emailtcx,15,6,None,2018-01-16 19:24:23+00:00,2008,00:09:01.100000,C2 Import Workout from 2018-01-16 19:24:23+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
55,https://rowsandall.com/rowers/workout/2700/emailcsv,https://rowsandall.com/rowers/workout/2700/emailtcx,11,9,None,2018-01-18 19:01:45+00:00,2007,00:08:27.600000,C2 Import Workout from 2018-01-18 19:01:45+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
56,https://rowsandall.com/rowers/workout/2699/emailcsv,https://rowsandall.com/rowers/workout/2699/emailtcx,67,49,None,2018-01-18 19:10:50+00:00,6918,00:29:14.200000,C2 Import Workout from 2018-01-18 19:10:50+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
57,https://rowsandall.com/rowers/workout/2698/emailcsv,https://rowsandall.com/rowers/workout/2698/emailtcx,7,2,None,2018-01-18 19:40:40+00:00,1217,00:06:11.100000,C2 Import Workout from 2018-01-18 19:40:40+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
58,https://rowsandall.com/rowers/workout/2697/emailcsv,https://rowsandall.com/rowers/workout/2697/emailtcx,62,51,None,2018-01-18 19:47:32+00:00,6697,00:29:16.700000,C2 Import Workout from 2018-01-18 19:47:32+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
59,https://rowsandall.com/rowers/workout/2696/emailcsv,https://rowsandall.com/rowers/workout/2696/emailtcx,13,6,None,2018-01-18 20:17:58+00:00,1997,00:09:10.700000,C2 Import Workout from 2018-01-18 20:17:58+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
60,https://rowsandall.com/rowers/workout/2692/emailcsv,https://rowsandall.com/rowers/workout/2692/emailtcx,0,0,None,2018-01-19 00:00:00+00:00,200,00:02:00.200000,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
61,https://rowsandall.com/rowers/workout/2693/emailcsv,https://rowsandall.com/rowers/workout/2693/emailtcx,0,0,None,2018-01-19 00:00:00+00:00,200,00:01:55,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
62,https://rowsandall.com/rowers/workout/2694/emailcsv,https://rowsandall.com/rowers/workout/2694/emailtcx,0,0,None,2018-01-19 00:00:00+00:00,200,00:02:00,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
63,https://rowsandall.com/rowers/workout/2695/emailcsv,https://rowsandall.com/rowers/workout/2695/emailtcx,0,0,None,2018-01-19 00:00:00+00:00,200,00:01:10,C2 Import Workout from 2018-01-19 00:00:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
64,https://rowsandall.com/rowers/workout/2691/emailcsv,https://rowsandall.com/rowers/workout/2691/emailtcx,175,96,None,2018-01-20 13:22:31+00:00,19381,01:20:39.100000,C2 Import Workout from 2018-01-20 13:22:31+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
65,https://rowsandall.com/rowers/workout/2690/emailcsv,https://rowsandall.com/rowers/workout/2690/emailtcx,0,0,None,2018-01-24 18:55:23+00:00,210,00:01:43.400000,C2 Import Workout from 2018-01-24 18:55:23+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
66,https://rowsandall.com/rowers/workout/2689/emailcsv,https://rowsandall.com/rowers/workout/2689/emailtcx,12,10,None,2018-01-24 18:59:06+00:00,2110,00:08:42.700000,C2 Import Workout from 2018-01-24 18:59:06+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
67,https://rowsandall.com/rowers/workout/2688/emailcsv,https://rowsandall.com/rowers/workout/2688/emailtcx,33,18,None,2018-01-24 19:08:04+00:00,6081,00:25:10,C2 Import Workout from 2018-01-24 19:08:04+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
68,https://rowsandall.com/rowers/workout/2687/emailcsv,https://rowsandall.com/rowers/workout/2687/emailtcx,86,38,None,2018-01-24 19:24:18+00:00,14426,01:00:12.600000,C2 Import Workout from 2018-01-24 19:24:18+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
69,https://rowsandall.com/rowers/workout/2686/emailcsv,https://rowsandall.com/rowers/workout/2686/emailtcx,146,78,None,2018-01-27 13:23:26+00:00,14981,01:01:39.600000,C2 Import Workout from 2018-01-27 13:23:26+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
70,https://rowsandall.com/rowers/workout/2685/emailcsv,https://rowsandall.com/rowers/workout/2685/emailtcx,37,15,None,2018-01-27 14:25:07+00:00,18338,01:15:22.800000,C2 Import Workout from 2018-01-27 14:25:07+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
71,https://rowsandall.com/rowers/workout/2684/emailcsv,https://rowsandall.com/rowers/workout/2684/emailtcx,90,53,None,2018-02-03 14:20:18+00:00,12181,00:51:46,C2 Import Workout from 2018-02-03 14:20:18+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
72,https://rowsandall.com/rowers/workout/2683/emailcsv,https://rowsandall.com/rowers/workout/2683/emailtcx,61,40,None,2018-02-06 17:54:01+00:00,7210,00:31:09,C2 Import Workout from 2018-02-06 17:54:01+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
73,https://rowsandall.com/rowers/workout/2682/emailcsv,https://rowsandall.com/rowers/workout/2682/emailtcx,16,14,None,2018-02-10 09:10:14+00:00,3040,00:12:47.200000,C2 Import Workout from 2018-02-10 09:10:14+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
74,https://rowsandall.com/rowers/workout/2681/emailcsv,https://rowsandall.com/rowers/workout/2681/emailtcx,86,70,None,2018-02-10 09:23:52+00:00,9305,00:40:50.900000,C2 Import Workout from 2018-02-10 09:23:52+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
75,https://rowsandall.com/rowers/workout/2680/emailcsv,https://rowsandall.com/rowers/workout/2680/emailtcx,14,6,None,2018-02-10 10:06:00+00:00,2009,00:09:04.200000,C2 Import Workout from 2018-02-10 10:06:00+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
76,https://rowsandall.com/rowers/workout/2679/emailcsv,https://rowsandall.com/rowers/workout/2679/emailtcx,135,69,None,2018-02-11 16:57:32+00:00,14430,01:01:23,C2 Import Workout from 2018-02-11 16:57:32+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
77,https://rowsandall.com/rowers/workout/2335/emailcsv,https://rowsandall.com/rowers/workout/2335/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,SpdCoach 1,,America/Los_Angeles,water,80.0,lwt
|
||||
78,https://rowsandall.com/rowers/workout/2338/emailcsv,https://rowsandall.com/rowers/workout/2338/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
79,https://rowsandall.com/rowers/workout/2339/emailcsv,https://rowsandall.com/rowers/workout/2339/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,7522,09:41:48.200000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
80,https://rowsandall.com/rowers/workout/2341/emailcsv,https://rowsandall.com/rowers/workout/2341/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
81,https://rowsandall.com/rowers/workout/2342/emailcsv,https://rowsandall.com/rowers/workout/2342/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
82,https://rowsandall.com/rowers/workout/2343/emailcsv,https://rowsandall.com/rowers/workout/2343/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
83,https://rowsandall.com/rowers/workout/2410/emailcsv,https://rowsandall.com/rowers/workout/2410/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test,,America/Los_Angeles,water,80.0,lwt
|
||||
84,https://rowsandall.com/rowers/workout/2414/emailcsv,https://rowsandall.com/rowers/workout/2414/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
85,https://rowsandall.com/rowers/workout/2416/emailcsv,https://rowsandall.com/rowers/workout/2416/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test aaaa,,America/Los_Angeles,water,80.0,lwt
|
||||
86,https://rowsandall.com/rowers/workout/2417/emailcsv,https://rowsandall.com/rowers/workout/2417/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,9336,09:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
87,https://rowsandall.com/rowers/workout/2418/emailcsv,https://rowsandall.com/rowers/workout/2418/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,3872,00:27:12.200000,Test i,,America/Los_Angeles,water,80.0,lwt
|
||||
88,https://rowsandall.com/rowers/workout/2419/emailcsv,https://rowsandall.com/rowers/workout/2419/emailtcx,0,0,None,2018-02-12 05:02:06+00:00,11394,09:42:05.500000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
89,https://rowsandall.com/rowers/workout/2420/emailcsv,https://rowsandall.com/rowers/workout/2420/emailtcx,0,0,None,2018-02-12 13:55:06+00:00,3872,00:27:12.200000,Test ii,,America/Los_Angeles,water,80.0,lwt
|
||||
90,https://rowsandall.com/rowers/workout/2421/emailcsv,https://rowsandall.com/rowers/workout/2421/emailtcx,0,0,None,2018-02-12 13:55:06+00:00,350236,00:49:05.500000,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
91,https://rowsandall.com/rowers/workout/2344/emailcsv,https://rowsandall.com/rowers/workout/2344/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,SpdCoach Sessions,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
92,https://rowsandall.com/rowers/workout/2347/emailcsv,https://rowsandall.com/rowers/workout/2347/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,9336,00:58:35,Joined Workout,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
93,https://rowsandall.com/rowers/workout/2411/emailcsv,https://rowsandall.com/rowers/workout/2411/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Test 2,,America/Los_Angeles,water,80.0,lwt
|
||||
94,https://rowsandall.com/rowers/workout/2415/emailcsv,https://rowsandall.com/rowers/workout/2415/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,9336,00:58:35,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
95,https://rowsandall.com/rowers/workout/2430/emailcsv,https://rowsandall.com/rowers/workout/2430/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Water,,America/Los_Angeles,water,80.0,lwt
|
||||
96,https://rowsandall.com/rowers/workout/2445/emailcsv,https://rowsandall.com/rowers/workout/2445/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Test P,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
97,https://rowsandall.com/rowers/workout/2449/emailcsv,https://rowsandall.com/rowers/workout/2449/emailtcx,0,0,None,2018-02-12 14:02:06+00:00,3872,00:27:12.200000,Water 2x,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
98,https://rowsandall.com/rowers/workout/2412/emailcsv,https://rowsandall.com/rowers/workout/2412/emailtcx,0,0,None,2018-02-12 14:22:01+00:00,3650,00:14:53.200000,Test 3,,America/Los_Angeles,water,80.0,lwt
|
||||
99,https://rowsandall.com/rowers/workout/2336/emailcsv,https://rowsandall.com/rowers/workout/2336/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach 2,"
|
||||
Summary for your location at 2018-02-12T14:55:00Z: Temperature 9.0C/48.2F. Wind: 2.5 m/s (5.0 kt). Wind Bearing: 280.0 degrees",America/Los_Angeles,water,80.0,lwt
|
||||
100,https://rowsandall.com/rowers/workout/2340/emailcsv,https://rowsandall.com/rowers/workout/2340/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,5464,00:31:40,Joined Workout,,America/Los_Angeles,water,80.0,lwt
|
||||
101,https://rowsandall.com/rowers/workout/2345/emailcsv,https://rowsandall.com/rowers/workout/2345/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach Sessions (2),imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
102,https://rowsandall.com/rowers/workout/2433/emailcsv,https://rowsandall.com/rowers/workout/2433/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,Test,,America/Los_Angeles,rower,80.0,lwt
|
||||
103,https://rowsandall.com/rowers/workout/2442/emailcsv,https://rowsandall.com/rowers/workout/2442/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,Water,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
104,https://rowsandall.com/rowers/workout/2444/emailcsv,https://rowsandall.com/rowers/workout/2444/emailtcx,0,0,None,2018-02-12 14:29:01+00:00,3650,00:14:53.200000,SpdCoach 2,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
105,https://rowsandall.com/rowers/workout/2337/emailcsv,https://rowsandall.com/rowers/workout/2337/emailtcx,0,0,None,2018-02-12 14:49:02+00:00,1814,00:11:39,SpdCoach 3,,America/Los_Angeles,water,80.0,lwt
|
||||
106,https://rowsandall.com/rowers/workout/2346/emailcsv,https://rowsandall.com/rowers/workout/2346/emailtcx,0,0,None,2018-02-12 14:49:02+00:00,1814,00:11:39,SpdCoach Sessions (3),imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
107,https://rowsandall.com/rowers/workout/2413/emailcsv,https://rowsandall.com/rowers/workout/2413/emailtcx,0,0,None,2018-02-12 14:49:02+00:00,1814,00:11:39,Test 4,,America/Los_Angeles,water,80.0,lwt
|
||||
108,https://rowsandall.com/rowers/workout/2443/emailcsv,https://rowsandall.com/rowers/workout/2443/emailtcx,0,0,None,2018-02-12 14:49:02+00:00,1814,00:11:39,water weer,imported through email,America/Los_Angeles,water,80.0,lwt
|
||||
109,https://rowsandall.com/rowers/workout/2678/emailcsv,https://rowsandall.com/rowers/workout/2678/emailtcx,9,9,None,2018-02-12 18:39:42+00:00,2014,00:08:37.700000,C2 Import Workout from 2018-02-12 18:39:42+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
110,https://rowsandall.com/rowers/workout/2677/emailcsv,https://rowsandall.com/rowers/workout/2677/emailtcx,91,77,None,2018-02-12 18:49:03+00:00,10562,00:46:12.400000,C2 Import Workout from 2018-02-12 18:49:03+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
111,https://rowsandall.com/rowers/workout/2676/emailcsv,https://rowsandall.com/rowers/workout/2676/emailtcx,9,5,None,2018-02-12 19:36:43+00:00,1998,00:09:39.800000,C2 Import Workout from 2018-02-12 19:36:43+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
112,https://rowsandall.com/rowers/workout/2675/emailcsv,https://rowsandall.com/rowers/workout/2675/emailtcx,115,59,None,2018-02-15 18:16:50+00:00,12440,00:51:41.500000,C2 Import Workout from 2018-02-15 18:16:50+00:00,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
113,https://rowsandall.com/rowers/workout/2674/emailcsv,https://rowsandall.com/rowers/workout/2674/emailtcx,21,8,None,2018-02-15 19:08:28+00:00,14477,01:00:21.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
114,https://rowsandall.com/rowers/workout/2673/emailcsv,https://rowsandall.com/rowers/workout/2673/emailtcx,16,14,None,2018-02-16 14:24:03+00:00,3012,00:12:58.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
115,https://rowsandall.com/rowers/workout/2672/emailcsv,https://rowsandall.com/rowers/workout/2672/emailtcx,51,42,None,2018-02-16 14:37:40+00:00,5277,00:23:00,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
116,https://rowsandall.com/rowers/workout/2671/emailcsv,https://rowsandall.com/rowers/workout/2671/emailtcx,6,2,None,2018-02-16 15:01:29+00:00,1036,00:05:03.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
117,https://rowsandall.com/rowers/workout/2670/emailcsv,https://rowsandall.com/rowers/workout/2670/emailtcx,54,44,None,2018-02-16 15:07:03+00:00,5113,00:23:22,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
118,https://rowsandall.com/rowers/workout/2669/emailcsv,https://rowsandall.com/rowers/workout/2669/emailtcx,7,3,None,2018-02-16 15:34:40+00:00,1259,00:05:48.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
119,https://rowsandall.com/rowers/workout/2668/emailcsv,https://rowsandall.com/rowers/workout/2668/emailtcx,106,65,None,2018-02-18 13:30:59+00:00,13541,00:56:07.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
120,https://rowsandall.com/rowers/workout/2667/emailcsv,https://rowsandall.com/rowers/workout/2667/emailtcx,10,9,None,2018-02-20 18:08:13+00:00,2008,00:08:36.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
121,https://rowsandall.com/rowers/workout/2666/emailcsv,https://rowsandall.com/rowers/workout/2666/emailtcx,98,78,None,2018-02-20 18:17:17+00:00,10914,00:48:06.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
122,https://rowsandall.com/rowers/workout/2665/emailcsv,https://rowsandall.com/rowers/workout/2665/emailtcx,7,3,None,2018-02-20 19:06:36+00:00,1513,00:07:37.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
123,https://rowsandall.com/rowers/workout/2381/emailcsv,https://rowsandall.com/rowers/workout/2381/emailtcx,0,0,None,2018-02-21 06:26:01+00:00,6119,00:27:20.200000,3x2km Racice,,Europe/Prague,water,80.0,lwt
|
||||
124,https://rowsandall.com/rowers/workout/2384/emailcsv,https://rowsandall.com/rowers/workout/2384/emailtcx,0,0,None,2018-02-22 09:32:01+00:00,8000,00:35:08.500000,8k trial,,Europe/Prague,water,80.0,lwt
|
||||
125,https://rowsandall.com/rowers/workout/2664/emailcsv,https://rowsandall.com/rowers/workout/2664/emailtcx,91,50,None,2018-02-22 18:40:03+00:00,11481,00:49:17.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
126,https://rowsandall.com/rowers/workout/2663/emailcsv,https://rowsandall.com/rowers/workout/2663/emailtcx,8,8,None,2018-02-23 15:12:10+00:00,2008,00:08:44.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
127,https://rowsandall.com/rowers/workout/2383/emailcsv,https://rowsandall.com/rowers/workout/2383/emailtcx,0,0,None,2018-02-23 15:17:03+00:00,5918,00:25:10.700000,Horin,,Europe/Prague,water,80.0,lwt
|
||||
128,https://rowsandall.com/rowers/workout/2662/emailcsv,https://rowsandall.com/rowers/workout/2662/emailtcx,84,101,None,2018-02-23 15:21:44+00:00,8804,00:39:58,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
129,https://rowsandall.com/rowers/workout/2661/emailcsv,https://rowsandall.com/rowers/workout/2661/emailtcx,15,6,None,2018-02-23 16:02:23+00:00,2008,00:09:05,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
130,https://rowsandall.com/rowers/workout/2385/emailcsv,https://rowsandall.com/rowers/workout/2385/emailtcx,0,0,None,2018-02-24 11:58:09+00:00,17045,01:35:59,Washington,,America/New_York,water,80.0,lwt
|
||||
131,https://rowsandall.com/rowers/workout/2660/emailcsv,https://rowsandall.com/rowers/workout/2660/emailtcx,108,69,None,2018-02-24 15:07:07+00:00,14544,01:01:04.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
132,https://rowsandall.com/rowers/workout/2386/emailcsv,https://rowsandall.com/rowers/workout/2386/emailtcx,0,0,None,2018-02-25 12:24:59+00:00,6182,00:26:24.400000,9x500m/70sec,,Europe/Prague,rower,80.0,lwt
|
||||
133,https://rowsandall.com/rowers/workout/2659/emailcsv,https://rowsandall.com/rowers/workout/2659/emailtcx,145,13155537,None,2018-02-25 14:15:13+00:00,16623,01:22:28,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
134,https://rowsandall.com/rowers/workout/2400/emailcsv,https://rowsandall.com/rowers/workout/2400/emailtcx,0,0,None,2018-02-25 22:45:28+00:00,4175,00:25:07.700000,Test CP,,Europe/Prague,rower,80.0,lwt
|
||||
135,https://rowsandall.com/rowers/workout/2387/emailcsv,https://rowsandall.com/rowers/workout/2387/emailtcx,0,0,None,2018-02-27 13:19:44+00:00,2206,00:10:00,StatsError,,Europe/Prague,rower,80.0,lwt
|
||||
136,https://rowsandall.com/rowers/workout/2658/emailcsv,https://rowsandall.com/rowers/workout/2658/emailtcx,96,61,None,2018-02-27 16:32:56+00:00,13549,00:56:44.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
137,https://rowsandall.com/rowers/workout/2657/emailcsv,https://rowsandall.com/rowers/workout/2657/emailtcx,8,8,None,2018-03-03 13:50:12+00:00,2012,00:08:42.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
138,https://rowsandall.com/rowers/workout/2656/emailcsv,https://rowsandall.com/rowers/workout/2656/emailtcx,50,47,None,2018-03-03 14:00:26+00:00,6270,00:26:41.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
139,https://rowsandall.com/rowers/workout/2655/emailcsv,https://rowsandall.com/rowers/workout/2655/emailtcx,4,1,None,2018-03-03 14:27:41+00:00,999,00:05:44.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
140,https://rowsandall.com/rowers/workout/2395/emailcsv,https://rowsandall.com/rowers/workout/2395/emailtcx,0,0,None,2018-03-03 14:33:51+00:00,6098,00:26:35.400000,Flex chart not working,,Europe/Prague,rower,80.0,lwt
|
||||
141,https://rowsandall.com/rowers/workout/2654/emailcsv,https://rowsandall.com/rowers/workout/2654/emailtcx,49,50,None,2018-03-03 14:33:51+00:00,6098,00:26:35.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
142,https://rowsandall.com/rowers/workout/2653/emailcsv,https://rowsandall.com/rowers/workout/2653/emailtcx,7,4,None,2018-03-03 15:01:34+00:00,1559,00:07:16.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
143,https://rowsandall.com/rowers/workout/2392/emailcsv,https://rowsandall.com/rowers/workout/2392/emailtcx,0,0,None,2018-03-05 13:51:23+00:00,13802,01:06:00,Mike's average workout,,Europe/Prague,rower,80.0,lwt
|
||||
144,https://rowsandall.com/rowers/workout/2396/emailcsv,https://rowsandall.com/rowers/workout/2396/emailtcx,0,0,None,2018-03-05 13:51:23+00:00,4058,00:17:00,Mike's average workout (1),,Europe/Prague,rower,80.0,lwt
|
||||
145,https://rowsandall.com/rowers/workout/2397/emailcsv,https://rowsandall.com/rowers/workout/2397/emailtcx,0,0,None,2018-03-05 14:08:23+00:00,9738,00:49:00,Mike's average workout (2),,Europe/Prague,rower,80.0,lwt
|
||||
146,https://rowsandall.com/rowers/workout/2389/emailcsv,https://rowsandall.com/rowers/workout/2389/emailtcx,0,0,None,2018-03-05 17:48:31+00:00,7022,00:29:44.400000,test,wat een kutsessie,Europe/Prague,rower,80.0,lwt
|
||||
147,https://rowsandall.com/rowers/workout/2652/emailcsv,https://rowsandall.com/rowers/workout/2652/emailtcx,37,31,None,2018-03-05 17:48:31+00:00,7022,00:29:45.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
148,https://rowsandall.com/rowers/workout/2390/emailcsv,https://rowsandall.com/rowers/workout/2390/emailtcx,0,0,None,2018-03-05 17:50:46+00:00,5019,00:31:27.500000,,,Europe/Prague,rower,80.0,lwt
|
||||
149,https://rowsandall.com/rowers/workout/2651/emailcsv,https://rowsandall.com/rowers/workout/2651/emailtcx,10,8,None,2018-03-08 18:34:05+00:00,2010,00:08:38.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
150,https://rowsandall.com/rowers/workout/2650/emailcsv,https://rowsandall.com/rowers/workout/2650/emailtcx,100,67,None,2018-03-08 18:43:29+00:00,10444,00:46:52.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
151,https://rowsandall.com/rowers/workout/2649/emailcsv,https://rowsandall.com/rowers/workout/2649/emailtcx,1,0,None,2018-03-08 19:31:31+00:00,269,00:01:42,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
152,https://rowsandall.com/rowers/workout/2398/emailcsv,https://rowsandall.com/rowers/workout/2398/emailtcx,0,0,None,2018-03-09 11:52:48+00:00,4160,00:13:00,test template,"Dit zijn de notes
|
||||
Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang Sommige zinnen zijn heel heel heel heel heel heel heel heel lang
|
||||
LAngwoordzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz",Europe/Prague,rower,80.0,lwt
|
||||
153,https://rowsandall.com/rowers/workout/2399/emailcsv,https://rowsandall.com/rowers/workout/2399/emailtcx,0,0,None,2018-03-09 11:59:13+00:00,4160,00:13:00,Test P,,Europe/Prague,rower,80.0,lwt
|
||||
154,https://rowsandall.com/rowers/workout/2401/emailcsv,https://rowsandall.com/rowers/workout/2401/emailtcx,0,0,None,2018-03-13 07:32:40+00:00,6479,00:30:27.300000,high power values?,,Europe/Prague,rower,80.0,lwt
|
||||
155,https://rowsandall.com/rowers/workout/2648/emailcsv,https://rowsandall.com/rowers/workout/2648/emailtcx,8,9,None,2018-03-13 18:18:31+00:00,2009,00:08:30,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
156,https://rowsandall.com/rowers/workout/2404/emailcsv,https://rowsandall.com/rowers/workout/2404/emailtcx,0,0,None,2018-03-13 18:28:00.900000+00:00,9996,00:40:00,C2 Rower Timed. 10.0,"C2 Rower Timed. 10.0km, 40.00 min. (PainSled)",Europe/Prague,rower,80.0,lwt
|
||||
157,https://rowsandall.com/rowers/workout/2405/emailcsv,https://rowsandall.com/rowers/workout/2405/emailtcx,0,0,None,2018-03-13 18:28:00.900000+00:00,10850,00:45:32.400000,C2 Rower Timed. 10.0,"C2 Rower Timed. 10.0km, 40.00 min. (PainSled)",Europe/Prague,rower,80.0,lwt
|
||||
158,https://rowsandall.com/rowers/workout/2647/emailcsv,https://rowsandall.com/rowers/workout/2647/emailtcx,95,61,None,2018-03-13 18:28:01+00:00,10864,00:46:12.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
159,https://rowsandall.com/rowers/workout/2646/emailcsv,https://rowsandall.com/rowers/workout/2646/emailtcx,5,2,None,2018-03-13 19:15:15+00:00,1015,00:05:05.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
160,https://rowsandall.com/rowers/workout/2645/emailcsv,https://rowsandall.com/rowers/workout/2645/emailtcx,8,9,None,2018-03-13 19:18:21+00:00,2009,00:08:29.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,hwt
|
||||
161,https://rowsandall.com/rowers/workout/2644/emailcsv,https://rowsandall.com/rowers/workout/2644/emailtcx,95,60,None,2018-03-13 19:28:00+00:00,9996,00:40:00,Imported workout,imported from Concept2 log,UTC,rower,80.0,hwt
|
||||
162,https://rowsandall.com/rowers/workout/2402/emailcsv,https://rowsandall.com/rowers/workout/2402/emailtcx,0,0,None,2018-03-13 21:15:46+00:00,1311,00:13:04.100000,Stroke Count,,Europe/Prague,rower,80.0,lwt
|
||||
163,https://rowsandall.com/rowers/workout/2403/emailcsv,https://rowsandall.com/rowers/workout/2403/emailtcx,0,0,None,2018-03-14 19:33:20+00:00,10850,00:45:32.400000,4x10min,,Europe/Prague,rower,80.0,lwt
|
||||
164,https://rowsandall.com/rowers/workout/2406/emailcsv,https://rowsandall.com/rowers/workout/2406/emailtcx,0,0,None,2018-03-15 06:22:52+00:00,336,00:01:00,Test 1 minute,,Europe/Prague,rower,80.0,lwt
|
||||
165,https://rowsandall.com/rowers/workout/2422/emailcsv,https://rowsandall.com/rowers/workout/2422/emailtcx,0,0,None,2018-03-15 06:22:52+00:00,8136,23:59:59.900000,Joined Workout,,Europe/Prague,rower,80.0,lwt
|
||||
166,https://rowsandall.com/rowers/workout/2407/emailcsv,https://rowsandall.com/rowers/workout/2407/emailtcx,0,0,None,2018-03-15 06:23:09+00:00,7800,00:30:00,Thirty Dirty,,Europe/Prague,rower,80.0,lwt
|
||||
167,https://rowsandall.com/rowers/workout/2434/emailcsv,https://rowsandall.com/rowers/workout/2434/emailtcx,0,0,None,2018-03-15 06:25:09+00:00,7800,23:59:59.900000,30 min,,Europe/Prague,rower,80.0,lwt
|
||||
168,https://rowsandall.com/rowers/workout/2643/emailcsv,https://rowsandall.com/rowers/workout/2643/emailtcx,9,9,None,2018-03-15 18:48:48+00:00,2013,00:08:36.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
169,https://rowsandall.com/rowers/workout/2425/emailcsv,https://rowsandall.com/rowers/workout/2425/emailtcx,0,0,None,2018-03-15 18:58:08+00:00,10169,00:44:31.200000,Joined Workout,,Europe/Prague,rower,80.0,lwt
|
||||
170,https://rowsandall.com/rowers/workout/2438/emailcsv,https://rowsandall.com/rowers/workout/2438/emailtcx,0,0,None,2018-03-15 18:58:08+00:00,8157,00:34:21.600000,Test,imported through email,Europe/Prague,rower,80.0,lwt
|
||||
171,https://rowsandall.com/rowers/workout/2642/emailcsv,https://rowsandall.com/rowers/workout/2642/emailtcx,73,58,None,2018-03-15 18:58:08+00:00,8157,00:34:21.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
172,https://rowsandall.com/rowers/workout/2423/emailcsv,https://rowsandall.com/rowers/workout/2423/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,6x4min,,Europe/Prague,rower,80.0,lwt
|
||||
173,https://rowsandall.com/rowers/workout/2431/emailcsv,https://rowsandall.com/rowers/workout/2431/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,Indoor,,Europe/Prague,rower,80.0,lwt
|
||||
174,https://rowsandall.com/rowers/workout/2432/emailcsv,https://rowsandall.com/rowers/workout/2432/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,test,,Europe/Prague,rower,80.0,lwt
|
||||
175,https://rowsandall.com/rowers/workout/2435/emailcsv,https://rowsandall.com/rowers/workout/2435/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,Test,,Europe/Prague,rower,80.0,lwt
|
||||
176,https://rowsandall.com/rowers/workout/2436/emailcsv,https://rowsandall.com/rowers/workout/2436/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,r,,Europe/Prague,rower,80.0,lwt
|
||||
177,https://rowsandall.com/rowers/workout/2437/emailcsv,https://rowsandall.com/rowers/workout/2437/emailtcx,0,0,None,2018-03-15 18:58:08.620390+00:00,8157,00:34:21.600000,a,,Europe/Prague,rower,80.0,lwt
|
||||
178,https://rowsandall.com/rowers/workout/2440/emailcsv,https://rowsandall.com/rowers/workout/2440/emailtcx,0,0,None,2018-03-15 19:33:15+00:00,2012,00:09:24.300000,another one,imported through email,Europe/Prague,rower,80.0,lwt
|
||||
179,https://rowsandall.com/rowers/workout/2641/emailcsv,https://rowsandall.com/rowers/workout/2641/emailtcx,13,6,None,2018-03-15 19:33:15+00:00,2012,00:09:24.300000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
180,https://rowsandall.com/rowers/workout/2424/emailcsv,https://rowsandall.com/rowers/workout/2424/emailtcx,0,0,None,2018-03-15 19:33:15.009331+00:00,2012,00:09:24.400000,6x4min,,Europe/Prague,rower,80.0,lwt
|
||||
181,https://rowsandall.com/rowers/workout/2429/emailcsv,https://rowsandall.com/rowers/workout/2429/emailtcx,0,0,None,2018-03-16 12:04:52+00:00,9595,00:54:45,Joined Workout,,America/New_York,rower,80.0,lwt
|
||||
182,https://rowsandall.com/rowers/workout/2426/emailcsv,https://rowsandall.com/rowers/workout/2426/emailtcx,0,0,None,2018-03-16 12:09:23+00:00,9269,00:50:14,Test P,,America/New_York,rower,80.0,lwt
|
||||
183,https://rowsandall.com/rowers/workout/2428/emailcsv,https://rowsandall.com/rowers/workout/2428/emailtcx,0,0,None,2018-03-16 12:09:23+00:00,9269,00:50:14,,,America/New_York,rower,80.0,lwt
|
||||
184,https://rowsandall.com/rowers/workout/2427/emailcsv,https://rowsandall.com/rowers/workout/2427/emailtcx,0,0,None,2018-03-16 13:00:52+00:00,326,00:04:03,Water Workout,,America/New_York,water,80.0,lwt
|
||||
185,https://rowsandall.com/rowers/workout/2640/emailcsv,https://rowsandall.com/rowers/workout/2640/emailtcx,130,73,None,2018-03-17 14:14:56+00:00,15231,01:03:19.100000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
186,https://rowsandall.com/rowers/workout/2639/emailcsv,https://rowsandall.com/rowers/workout/2639/emailtcx,0,18,None,2018-03-18 14:03:27+00:00,3876,00:16:16.200000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
|
||||
187,https://rowsandall.com/rowers/workout/2638/emailcsv,https://rowsandall.com/rowers/workout/2638/emailtcx,0,49,None,2018-03-18 14:20:52+00:00,6000,00:22:17.500000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
|
||||
188,https://rowsandall.com/rowers/workout/2637/emailcsv,https://rowsandall.com/rowers/workout/2637/emailtcx,0,14,None,2018-03-18 14:44:46+00:00,4163,00:19:13.200000,Imported workout,imported from Concept2 log,UTC,slides,80.0,lwt
|
||||
189,https://rowsandall.com/rowers/workout/2636/emailcsv,https://rowsandall.com/rowers/workout/2636/emailtcx,6,9,None,2018-03-22 18:38:59+00:00,2007,00:08:43.800000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
190,https://rowsandall.com/rowers/workout/2635/emailcsv,https://rowsandall.com/rowers/workout/2635/emailtcx,46,51,None,2018-03-22 18:48:29+00:00,6770,00:29:38.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
191,https://rowsandall.com/rowers/workout/2634/emailcsv,https://rowsandall.com/rowers/workout/2634/emailtcx,15,7,None,2018-03-22 19:18:50+00:00,2010,00:08:46.700000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
192,https://rowsandall.com/rowers/workout/2633/emailcsv,https://rowsandall.com/rowers/workout/2633/emailtcx,136,38,None,2018-03-24 09:20:07+00:00,15446,01:22:56.300000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
193,https://rowsandall.com/rowers/workout/2451/emailcsv,https://rowsandall.com/rowers/workout/2451/emailtcx,0,0,None,2018-03-25 09:59:12+00:00,29000,01:50:13,test,,Europe/Zurich,rower,80.0,lwt
|
||||
194,https://rowsandall.com/rowers/workout/2452/emailcsv,https://rowsandall.com/rowers/workout/2452/emailtcx,0,0,None,2018-03-25 09:59:12+00:00,29000,01:50:13,Background processing test,imported through email,Europe/Zurich,water,80.0,lwt
|
||||
195,https://rowsandall.com/rowers/workout/2632/emailcsv,https://rowsandall.com/rowers/workout/2632/emailtcx,50,19,None,2018-03-25 14:29:09+00:00,6664,00:46:07,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
196,https://rowsandall.com/rowers/workout/2453/emailcsv,https://rowsandall.com/rowers/workout/2453/emailtcx,0,0,None,2018-03-29 13:45:00+00:00,2000,07:25:00,test api,string,UTC,water,80.0,lwt
|
||||
197,https://rowsandall.com/rowers/workout/2454/emailcsv,https://rowsandall.com/rowers/workout/2454/emailtcx,0,0,None,2018-04-02 11:02:55+00:00,3848,00:22:14.200000,RP3 curve,,Europe/Prague,rower,80.0,lwt
|
||||
198,https://rowsandall.com/rowers/workout/2455/emailcsv,https://rowsandall.com/rowers/workout/2455/emailtcx,0,0,None,2018-04-02 11:04:18+00:00,3848,00:22:14.200000,,,Europe/Prague,rower,80.0,lwt
|
||||
199,https://rowsandall.com/rowers/workout/2631/emailcsv,https://rowsandall.com/rowers/workout/2631/emailtcx,0,6,None,2018-04-03 14:34:01+00:00,2822,00:14:43.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
200,https://rowsandall.com/rowers/workout/2630/emailcsv,https://rowsandall.com/rowers/workout/2630/emailtcx,0,32,None,2018-04-03 14:50:01+00:00,7505,00:39:46.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
201,https://rowsandall.com/rowers/workout/2456/emailcsv,https://rowsandall.com/rowers/workout/2456/emailtcx,0,0,None,2018-04-03 15:50:52+00:00,7200,00:37:44,In Stroke,,Europe/Prague,water,80.0,lwt
|
||||
202,https://rowsandall.com/rowers/workout/2457/emailcsv,https://rowsandall.com/rowers/workout/2457/emailtcx,0,0,None,2018-04-03 15:50:52+00:00,7200,00:37:44,In Stroke 2,,Europe/Prague,water,80.0,lwt
|
||||
203,https://rowsandall.com/rowers/workout/2629/emailcsv,https://rowsandall.com/rowers/workout/2629/emailtcx,0,0,None,2018-04-04 18:30:27+00:00,27,00:00:03.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
204,https://rowsandall.com/rowers/workout/2628/emailcsv,https://rowsandall.com/rowers/workout/2628/emailtcx,0,44,None,2018-04-04 19:00:43+00:00,8309,00:48:07.400000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
205,https://rowsandall.com/rowers/workout/2458/emailcsv,https://rowsandall.com/rowers/workout/2458/emailtcx,0,0,None,2018-04-07 07:41:02+00:00,10568,01:06:08.800000,2x3km fail,,Europe/Prague,water,80.0,lwt
|
||||
206,https://rowsandall.com/rowers/workout/2460/emailcsv,https://rowsandall.com/rowers/workout/2460/emailtcx,0,0,None,2018-04-07 07:41:02+00:00,10568,01:06:08.800000,Update,,Europe/Prague,water,80.0,lwt
|
||||
207,https://rowsandall.com/rowers/workout/2627/emailcsv,https://rowsandall.com/rowers/workout/2627/emailtcx,21,5,None,2018-04-07 07:41:02+00:00,2243,00:12:20.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
208,https://rowsandall.com/rowers/workout/2626/emailcsv,https://rowsandall.com/rowers/workout/2626/emailtcx,39,8,None,2018-04-07 07:55:02+00:00,3167,00:16:59.800000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
209,https://rowsandall.com/rowers/workout/2625/emailcsv,https://rowsandall.com/rowers/workout/2625/emailtcx,34,10,None,2018-04-07 08:14:02+00:00,2977,00:14:58,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
210,https://rowsandall.com/rowers/workout/2623/emailcsv,https://rowsandall.com/rowers/workout/2623/emailtcx,23,1,None,2018-04-07 08:33:03+00:00,2180,00:14:07.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
211,https://rowsandall.com/rowers/workout/2622/emailcsv,https://rowsandall.com/rowers/workout/2622/emailtcx,86,56,None,2018-04-10 17:38:22+00:00,11703,00:48:59.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
212,https://rowsandall.com/rowers/workout/2621/emailcsv,https://rowsandall.com/rowers/workout/2621/emailtcx,50,24,None,2018-04-10 18:27:53+00:00,17284,01:11:55.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
213,https://rowsandall.com/rowers/workout/2620/emailcsv,https://rowsandall.com/rowers/workout/2620/emailtcx,57,66,None,2018-04-11 18:37:27+00:00,10122,01:15:44.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
214,https://rowsandall.com/rowers/workout/2619/emailcsv,https://rowsandall.com/rowers/workout/2619/emailtcx,99,31,None,2018-04-12 16:17:02+00:00,10408,00:53:45.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
215,https://rowsandall.com/rowers/workout/2618/emailcsv,https://rowsandall.com/rowers/workout/2618/emailtcx,115,44,None,2018-04-15 08:34:05+00:00,11129,01:03:38,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
216,https://rowsandall.com/rowers/workout/2617/emailcsv,https://rowsandall.com/rowers/workout/2617/emailtcx,14,3,None,2018-04-18 13:43:04+00:00,1942,00:10:55.300000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
217,https://rowsandall.com/rowers/workout/2616/emailcsv,https://rowsandall.com/rowers/workout/2616/emailtcx,104,36,None,2018-04-18 13:57:01+00:00,7979,00:36:10.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
218,https://rowsandall.com/rowers/workout/2615/emailcsv,https://rowsandall.com/rowers/workout/2615/emailtcx,11,3,None,2018-04-18 14:49:06+00:00,1512,00:08:27.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
219,https://rowsandall.com/rowers/workout/2614/emailcsv,https://rowsandall.com/rowers/workout/2614/emailtcx,58,56,None,2018-04-20 15:51:41+00:00,9748,01:06:50.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
220,https://rowsandall.com/rowers/workout/2613/emailcsv,https://rowsandall.com/rowers/workout/2613/emailtcx,28,75,None,2018-04-21 15:38:04+00:00,5254,00:27:02.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
221,https://rowsandall.com/rowers/workout/2612/emailcsv,https://rowsandall.com/rowers/workout/2612/emailtcx,105,65,None,2018-04-22 07:15:01+00:00,12282,01:08:28.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
222,https://rowsandall.com/rowers/workout/2471/emailcsv,https://rowsandall.com/rowers/workout/2471/emailtcx,0,0,None,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x150min/1min,,America/New_York,water,80.0,lwt
|
||||
223,https://rowsandall.com/rowers/workout/2472/emailcsv,https://rowsandall.com/rowers/workout/2472/emailtcx,0,0,None,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x15min test 2,,America/New_York,water,80.0,lwt
|
||||
224,https://rowsandall.com/rowers/workout/2473/emailcsv,https://rowsandall.com/rowers/workout/2473/emailtcx,0,0,None,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,7x150min/1min,,America/New_York,water,80.0,lwt
|
||||
225,https://rowsandall.com/rowers/workout/2474/emailcsv,https://rowsandall.com/rowers/workout/2474/emailtcx,0,0,None,2018-04-23 11:00:00+00:00,1017,00:03:55,test firmware,,America/New_York,water,80.0,lwt
|
||||
226,https://rowsandall.com/rowers/workout/2478/emailcsv,https://rowsandall.com/rowers/workout/2478/emailtcx,0,0,None,2018-04-23 11:00:00+00:00,1017,00:03:55.200000,Firmware 2,,America/New_York,water,80.0,lwt
|
||||
227,https://rowsandall.com/rowers/workout/2611/emailcsv,https://rowsandall.com/rowers/workout/2611/emailtcx,98,59,None,2018-04-23 17:46:25+00:00,13558,00:58:11.900000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
228,https://rowsandall.com/rowers/workout/2465/emailcsv,https://rowsandall.com/rowers/workout/2465/emailtcx,0,0,None,2018-04-23 20:42:00+00:00,8000,00:36:01.500000,Racice,,Europe/Prague,water,80.0,lwt
|
||||
229,https://rowsandall.com/rowers/workout/2610/emailcsv,https://rowsandall.com/rowers/workout/2610/emailtcx,26,4,None,2018-04-24 12:12:03+00:00,2959,00:16:42.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
230,https://rowsandall.com/rowers/workout/2609/emailcsv,https://rowsandall.com/rowers/workout/2609/emailtcx,79,23,None,2018-04-24 12:32:00+00:00,7516,00:38:49.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
231,https://rowsandall.com/rowers/workout/2466/emailcsv,https://rowsandall.com/rowers/workout/2466/emailtcx,0,0,None,2018-04-24 13:35:30+00:00,9420,00:48:00,,,Europe/Prague,water,80.0,lwt
|
||||
232,https://rowsandall.com/rowers/workout/2608/emailcsv,https://rowsandall.com/rowers/workout/2608/emailtcx,74,93,None,2018-04-25 17:50:26+00:00,10171,01:12:33.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
233,https://rowsandall.com/rowers/workout/2470/emailcsv,https://rowsandall.com/rowers/workout/2470/emailtcx,0,0,None,2018-04-25 22:59:01+00:00,4159,00:26:43.200000,SpeedCoach 7x150m,,America/New_York,water,80.0,lwt
|
||||
234,https://rowsandall.com/rowers/workout/2607/emailcsv,https://rowsandall.com/rowers/workout/2607/emailtcx,10,2,None,2018-04-26 16:18:01+00:00,2016,00:12:30.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
235,https://rowsandall.com/rowers/workout/2606/emailcsv,https://rowsandall.com/rowers/workout/2606/emailtcx,51,27,None,2018-04-26 16:33:00+00:00,4605,00:22:35.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
236,https://rowsandall.com/rowers/workout/2605/emailcsv,https://rowsandall.com/rowers/workout/2605/emailtcx,11,2,None,2018-04-26 16:56:03+00:00,1301,00:07:07.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
237,https://rowsandall.com/rowers/workout/2604/emailcsv,https://rowsandall.com/rowers/workout/2604/emailtcx,99,48,None,2018-04-28 08:02:01+00:00,11924,01:18:20.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
238,https://rowsandall.com/rowers/workout/2469/emailcsv,https://rowsandall.com/rowers/workout/2469/emailtcx,0,0,None,2018-04-29 07:22:01+00:00,8040,00:50:06,Test P,,America/New_York,water,80.0,lwt
|
||||
239,https://rowsandall.com/rowers/workout/2603/emailcsv,https://rowsandall.com/rowers/workout/2603/emailtcx,49,28,None,2018-04-29 07:22:01+00:00,8040,00:50:05.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
240,https://rowsandall.com/rowers/workout/2559/emailcsv,https://rowsandall.com/rowers/workout/2559/emailtcx,0,0,None,2018-05-03 16:02:08+00:00,10909,01:00:35,Intervals Tests (6),imported through email,Europe/Amsterdam,water,80.0,lwt
|
||||
241,https://rowsandall.com/rowers/workout/2602/emailcsv,https://rowsandall.com/rowers/workout/2602/emailtcx,34,8,None,2018-05-04 05:47:04+00:00,3472,00:18:53.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
242,https://rowsandall.com/rowers/workout/2479/emailcsv,https://rowsandall.com/rowers/workout/2479/emailtcx,0,0,None,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test,imported through email,Europe/Prague,water,80.0,lwt
|
||||
243,https://rowsandall.com/rowers/workout/2481/emailcsv,https://rowsandall.com/rowers/workout/2481/emailtcx,0,0,None,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test 2,imported through email,Europe/Prague,water,80.0,lwt
|
||||
244,https://rowsandall.com/rowers/workout/2483/emailcsv,https://rowsandall.com/rowers/workout/2483/emailtcx,0,0,None,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Test Zip 3,imported through email,Europe/Prague,water,80.0,lwt
|
||||
245,https://rowsandall.com/rowers/workout/2601/emailcsv,https://rowsandall.com/rowers/workout/2601/emailtcx,76,32,None,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
246,https://rowsandall.com/rowers/workout/2860/emailcsv,https://rowsandall.com/rowers/workout/2860/emailtcx,0,0,None,2018-05-04 06:07:04+00:00,5997,00:25:53.900000,Zip test,"imported through email
|
||||
from speedcoach2v2.15 via rowsandall.com",Europe/Prague,water,80.0,hwt
|
||||
247,https://rowsandall.com/rowers/workout/2600/emailcsv,https://rowsandall.com/rowers/workout/2600/emailtcx,9,0,None,2018-05-04 06:35:04+00:00,1009,00:06:44.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
248,https://rowsandall.com/rowers/workout/2599/emailcsv,https://rowsandall.com/rowers/workout/2599/emailtcx,93,31,None,2018-05-05 07:06:02+00:00,11180,01:01:01.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
249,https://rowsandall.com/rowers/workout/2598/emailcsv,https://rowsandall.com/rowers/workout/2598/emailtcx,8,1,None,2018-05-05 08:11:04+00:00,1152,00:06:56.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
250,https://rowsandall.com/rowers/workout/2597/emailcsv,https://rowsandall.com/rowers/workout/2597/emailtcx,125,42,None,2018-05-07 15:41:06+00:00,11019,01:00:40.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
251,https://rowsandall.com/rowers/workout/2490/emailcsv,https://rowsandall.com/rowers/workout/2490/emailtcx,0,0,None,2018-05-10 09:11:24+00:00,15263,01:39:34,Naarden goed,,Europe/Amsterdam,water,80.0,lwt
|
||||
252,https://rowsandall.com/rowers/workout/2491/emailcsv,https://rowsandall.com/rowers/workout/2491/emailtcx,0,0,None,2018-05-10 09:11:24+00:00,7378,00:44:59,Naarden goed (1),,Europe/Amsterdam,water,80.0,lwt
|
||||
253,https://rowsandall.com/rowers/workout/2492/emailcsv,https://rowsandall.com/rowers/workout/2492/emailtcx,0,0,None,2018-05-10 09:56:24+00:00,7876,00:54:33,Naarden goed (2),,Europe/Amsterdam,water,80.0,lwt
|
||||
254,https://rowsandall.com/rowers/workout/2596/emailcsv,https://rowsandall.com/rowers/workout/2596/emailtcx,0,42,None,2018-05-10 16:15:02+00:00,11983,01:01:26,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
255,https://rowsandall.com/rowers/workout/2485/emailcsv,https://rowsandall.com/rowers/workout/2485/emailtcx,0,0,None,2018-05-10 16:55:01+00:00,8000,00:36:01.500000,6k,,Europe/Prague,water,80.0,lwt
|
||||
256,https://rowsandall.com/rowers/workout/2486/emailcsv,https://rowsandall.com/rowers/workout/2486/emailtcx,0,0,None,2018-05-10 16:55:01+00:00,8000,00:36:01.500000,Racice 2,,Europe/Prague,water,80.0,lwt
|
||||
257,https://rowsandall.com/rowers/workout/2488/emailcsv,https://rowsandall.com/rowers/workout/2488/emailtcx,0,0,None,2018-05-11 07:02:52+00:00,15364,01:22:34,Naarden 1,,Europe/Amsterdam,water,80.0,lwt
|
||||
258,https://rowsandall.com/rowers/workout/2504/emailcsv,https://rowsandall.com/rowers/workout/2504/emailtcx,0,0,None,2018-05-12 10:01:00+00:00,16814,01:42:53,DC,"Summary for your location at 2018-05-12T12:52:00Z: Temperature 21.1C/69.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 30.0 degrees
|
||||
Summary for your location at 2018-05-12T10:52:00Z: Temperature 19.4C/66.9F. Wind: 3.0 m/s (6.0 kt). Wind Bearing: 40.0 degrees
|
||||
Summary for your location at 2018-05-12T11:52:00Z: Temperature 20.6C/69.0F. Wind: 3.6 m/s (7.0 kt). Wind Bearing: 20.0 degrees
|
||||
Summary for your location at 2018-05-12T10:52:26+00:00: Clear. Temperature 64.52F/18.0C. Wind: 0.96 m/s. Wind Bearing: 29 degrees",America/New_York,water,80.0,lwt
|
||||
259,https://rowsandall.com/rowers/workout/2931/emailcsv,https://rowsandall.com/rowers/workout/2931/emailtcx,0,0,None,2018-05-12 14:22:12+00:00,6510,00:46:56,Test P,,Europe/Bratislava,water,80.0,hwt
|
||||
260,https://rowsandall.com/rowers/workout/2513/emailcsv,https://rowsandall.com/rowers/workout/2513/emailtcx,0,0,None,2018-05-13 07:57:02+00:00,4605,00:35:11.700000,Quad,,Europe/Bratislava,water,80.0,lwt
|
||||
261,https://rowsandall.com/rowers/workout/2595/emailcsv,https://rowsandall.com/rowers/workout/2595/emailtcx,33,26,None,2018-05-13 07:57:02+00:00,4605,00:35:11.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
262,https://rowsandall.com/rowers/workout/2502/emailcsv,https://rowsandall.com/rowers/workout/2502/emailtcx,0,0,None,2018-05-13 09:22:49+00:00,973,00:03:53.900000,Completed a workout (generic) 0.6 mi on 05/13/18,,Europe/Bratislava,water,80.0,lwt
|
||||
263,https://rowsandall.com/rowers/workout/2503/emailcsv,https://rowsandall.com/rowers/workout/2503/emailtcx,0,0,None,2018-05-13 09:22:49+00:00,973,00:03:53.900000,Completed a workout (generic) 0.6 mi on 05/13/18,,Europe/Bratislava,water,80.0,lwt
|
||||
264,https://rowsandall.com/rowers/workout/2594/emailcsv,https://rowsandall.com/rowers/workout/2594/emailtcx,0,39,None,2018-05-13 16:50:32+00:00,2723,00:27:17.200000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
265,https://rowsandall.com/rowers/workout/2593/emailcsv,https://rowsandall.com/rowers/workout/2593/emailtcx,0,82,None,2018-05-13 16:51:01+00:00,5929,00:43:44.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
266,https://rowsandall.com/rowers/workout/2855/emailcsv,https://rowsandall.com/rowers/workout/2855/emailtcx,0,0,None,2018-05-14 13:53:04+00:00,6091,00:25:00.200000,Hradiste,"
|
||||
from csv via rowsandall.com",Europe/Prague,water,80.0,lwt
|
||||
267,https://rowsandall.com/rowers/workout/2963/emailcsv,https://rowsandall.com/rowers/workout/2963/emailtcx,0,0,None,2018-05-14 13:53:04+00:00,6091,00:25:00.200000,Hradiste,"
|
||||
from csv via rowsandall.com",Europe/Prague,water,80.0,hwt
|
||||
268,https://rowsandall.com/rowers/workout/2493/emailcsv,https://rowsandall.com/rowers/workout/2493/emailtcx,0,0,None,2018-05-15 10:35:00+00:00,10526,00:44:01.700000,Turin,,Europe/Rome,water,80.0,lwt
|
||||
269,https://rowsandall.com/rowers/workout/2489/emailcsv,https://rowsandall.com/rowers/workout/2489/emailtcx,0,0,None,2018-05-17 17:40:00+00:00,15364,01:22:34,Naarden 2,,Europe/Amsterdam,water,80.0,lwt
|
||||
270,https://rowsandall.com/rowers/workout/2464/emailcsv,https://rowsandall.com/rowers/workout/2464/emailtcx,0,0,None,2018-05-18 13:02:00+00:00,6091,00:25:00.200000,Hradiste,"Failed to download METAR data
|
||||
Failed to download METAR data
|
||||
Failed to download METAR data
|
||||
Failed to download METAR data
|
||||
Failed to download METAR data",Europe/Prague,water,80.0,lwt
|
||||
271,https://rowsandall.com/rowers/workout/2505/emailcsv,https://rowsandall.com/rowers/workout/2505/emailtcx,0,0,None,2018-05-19 11:55:34+00:00,14274,01:12:33.600000,Roos,,America/New_York,water,80.0,lwt
|
||||
272,https://rowsandall.com/rowers/workout/2506/emailcsv,https://rowsandall.com/rowers/workout/2506/emailtcx,0,0,None,2018-05-19 11:55:34+00:00,7384,00:33:59.800000,Roos (1),,America/New_York,water,80.0,lwt
|
||||
273,https://rowsandall.com/rowers/workout/2507/emailcsv,https://rowsandall.com/rowers/workout/2507/emailtcx,0,0,None,2018-05-19 12:29:34+00:00,6885,00:38:32.200000,Roos (2),,America/New_York,water,80.0,lwt
|
||||
274,https://rowsandall.com/rowers/workout/2511/emailcsv,https://rowsandall.com/rowers/workout/2511/emailtcx,0,0,None,2018-05-27 10:17:01+00:00,10663,00:59:29.700000,Test P,,Europe/Prague,water,80.0,lwt
|
||||
275,https://rowsandall.com/rowers/workout/2518/emailcsv,https://rowsandall.com/rowers/workout/2518/emailtcx,0,0,None,2018-05-27 10:17:01+00:00,10663,00:59:29.700000,dubbel,,Europe/Prague,water,80.0,lwt
|
||||
276,https://rowsandall.com/rowers/workout/2592/emailcsv,https://rowsandall.com/rowers/workout/2592/emailtcx,121,25,None,2018-05-27 10:17:01+00:00,10663,00:59:29.600000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
277,https://rowsandall.com/rowers/workout/2591/emailcsv,https://rowsandall.com/rowers/workout/2591/emailtcx,89,20,None,2018-05-28 15:11:01+00:00,9642,00:56:16.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
278,https://rowsandall.com/rowers/workout/2514/emailcsv,https://rowsandall.com/rowers/workout/2514/emailtcx,0,0,None,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Eight,imported through email,Europe/Prague,water,80.0,lwt
|
||||
279,https://rowsandall.com/rowers/workout/2516/emailcsv,https://rowsandall.com/rowers/workout/2516/emailtcx,0,0,None,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Twee Zonder,imported through email,Europe/Prague,water,80.0,lwt
|
||||
280,https://rowsandall.com/rowers/workout/2590/emailcsv,https://rowsandall.com/rowers/workout/2590/emailtcx,110,117,None,2018-05-30 18:05:25+00:00,11237,01:04:45.500000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
281,https://rowsandall.com/rowers/workout/2512/emailcsv,https://rowsandall.com/rowers/workout/2512/emailtcx,0,0,None,2018-05-31 16:30:07+00:00,8837,00:47:42.500000,Test,,Europe/Prague,water,80.0,lwt
|
||||
282,https://rowsandall.com/rowers/workout/2589/emailcsv,https://rowsandall.com/rowers/workout/2589/emailtcx,99,21,None,2018-05-31 16:30:07+00:00,8837,00:47:42.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
283,https://rowsandall.com/rowers/workout/2508/emailcsv,https://rowsandall.com/rowers/workout/2508/emailtcx,0,0,None,2018-06-01 07:57:02+00:00,4605,00:35:11.700000,Piestany,,Europe/Bratislava,water,80.0,lwt
|
||||
284,https://rowsandall.com/rowers/workout/2510/emailcsv,https://rowsandall.com/rowers/workout/2510/emailtcx,0,0,None,2018-06-01 08:02:02+00:00,3975,00:30:08.700000,Piestany (2),,Europe/Bratislava,water,80.0,lwt
|
||||
285,https://rowsandall.com/rowers/workout/2509/emailcsv,https://rowsandall.com/rowers/workout/2509/emailtcx,0,0,None,2018-06-01 11:30:07+00:00,8837,00:47:42.500000,Test,,Europe/Prague,water,80.0,lwt
|
||||
286,https://rowsandall.com/rowers/workout/2569/emailcsv,https://rowsandall.com/rowers/workout/2569/emailtcx,0,0,None,2018-06-01 15:00:00+00:00,11237,01:04:45.500000,Acht Intervals,,Europe/Prague,water,80.0,lwt
|
||||
287,https://rowsandall.com/rowers/workout/2588/emailcsv,https://rowsandall.com/rowers/workout/2588/emailtcx,126,79,None,2018-06-02 17:00:07+00:00,12511,01:07:58,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
288,https://rowsandall.com/rowers/workout/2587/emailcsv,https://rowsandall.com/rowers/workout/2587/emailtcx,81,74,None,2018-06-03 07:57:02+00:00,10830,01:04:35.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
289,https://rowsandall.com/rowers/workout/2586/emailcsv,https://rowsandall.com/rowers/workout/2586/emailtcx,56,87,None,2018-06-03 15:50:25+00:00,6125,00:48:38.600000,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
290,https://rowsandall.com/rowers/workout/2535/emailcsv,https://rowsandall.com/rowers/workout/2535/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Test - Delete,,Europe/Prague,rower,80.0,lwt
|
||||
291,https://rowsandall.com/rowers/workout/2536/emailcsv,https://rowsandall.com/rowers/workout/2536/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Test Sync - Delete,"
|
||||
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
|
||||
292,https://rowsandall.com/rowers/workout/2537/emailcsv,https://rowsandall.com/rowers/workout/2537/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,"
|
||||
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
|
||||
293,https://rowsandall.com/rowers/workout/2538/emailcsv,https://rowsandall.com/rowers/workout/2538/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,imported through email,Europe/Prague,rower,80.0,lwt
|
||||
294,https://rowsandall.com/rowers/workout/2539/emailcsv,https://rowsandall.com/rowers/workout/2539/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Test P,"imported through email
|
||||
from tcx via rowsandall.com",Europe/Prague,rower,80.0,lwt
|
||||
295,https://rowsandall.com/rowers/workout/2540/emailcsv,https://rowsandall.com/rowers/workout/2540/emailtcx,0,0,None,2018-06-05 13:07:02+00:00,0,00:05:01,Workout from Background Queue,imported through email,Europe/Prague,rower,80.0,lwt
|
||||
296,https://rowsandall.com/rowers/workout/2624/emailcsv,https://rowsandall.com/rowers/workout/2624/emailtcx,0,0,None,2018-06-05 13:51:01.900000+00:00,12744,01:08:22.100000,imported through ema,imported through email,Europe/Prague,water,80.0,lwt
|
||||
297,https://rowsandall.com/rowers/workout/2534/emailcsv,https://rowsandall.com/rowers/workout/2534/emailtcx,0,0,None,2018-06-05 14:05:02+00:00,0,00:01:33,Import from Polar Flow,imported through email,Europe/Prague,rower,80.0,lwt
|
||||
298,https://rowsandall.com/rowers/workout/2519/emailcsv,https://rowsandall.com/rowers/workout/2519/emailtcx,0,0,None,2018-06-05 14:09:57+00:00,0,00:03:38,TCX from Polar API,,Europe/Prague,water,80.0,lwt
|
||||
299,https://rowsandall.com/rowers/workout/2546/emailcsv,https://rowsandall.com/rowers/workout/2546/emailtcx,0,0,None,2018-06-05 15:51:01+00:00,12744,01:08:22.200000,8x glad,,Europe/Prague,water,80.0,lwt
|
||||
300,https://rowsandall.com/rowers/workout/2547/emailcsv,https://rowsandall.com/rowers/workout/2547/emailtcx,0,0,None,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,1x glad,,Europe/Prague,c-boat,80.0,lwt
|
||||
301,https://rowsandall.com/rowers/workout/2548/emailcsv,https://rowsandall.com/rowers/workout/2548/emailtcx,0,68,None,2018-06-05 15:51:01+00:00,12744,01:08:22.200000,1x glad,,Europe/Prague,water,80.0,lwt
|
||||
302,https://rowsandall.com/rowers/workout/2549/emailcsv,https://rowsandall.com/rowers/workout/2549/emailtcx,0,0,None,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,test,,Europe/Prague,water,80.0,lwt
|
||||
303,https://rowsandall.com/rowers/workout/2550/emailcsv,https://rowsandall.com/rowers/workout/2550/emailtcx,0,0,None,2018-06-05 15:51:01+00:00,12746,01:08:22.200000,test tcx,,Europe/Prague,water,80.0,lwt
|
||||
304,https://rowsandall.com/rowers/workout/2552/emailcsv,https://rowsandall.com/rowers/workout/2552/emailtcx,0,0,None,2018-06-05 15:51:01+00:00,6522,00:33:00,8x glad (1),,Europe/Prague,water,80.0,lwt
|
||||
305,https://rowsandall.com/rowers/workout/2585/emailcsv,https://rowsandall.com/rowers/workout/2585/emailtcx,139,46,None,2018-06-05 15:51:01+00:00,12744,01:08:22.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
306,https://rowsandall.com/rowers/workout/2553/emailcsv,https://rowsandall.com/rowers/workout/2553/emailtcx,0,0,None,2018-06-05 16:24:01+00:00,6213,00:35:19.500000,8x glad (2),,Europe/Prague,water,80.0,lwt
|
||||
307,https://rowsandall.com/rowers/workout/2584/emailcsv,https://rowsandall.com/rowers/workout/2584/emailtcx,45,91,None,2018-06-06 17:40:24+00:00,5273,00:42:59,Imported workout,imported from Concept2 log,UTC,rower,80.0,lwt
|
||||
308,https://rowsandall.com/rowers/workout/2545/emailcsv,https://rowsandall.com/rowers/workout/2545/emailtcx,0,0,None,2018-06-08 07:25:33+00:00,1994,00:01:59.400000,Test,,Europe/Prague,rower,80.0,hwt
|
||||
309,https://rowsandall.com/rowers/workout/2560/emailcsv,https://rowsandall.com/rowers/workout/2560/emailtcx,0,0,None,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,Intervals Tests (7),imported through email,Europe/Prague,water,80.0,lwt
|
||||
310,https://rowsandall.com/rowers/workout/2568/emailcsv,https://rowsandall.com/rowers/workout/2568/emailtcx,0,11,None,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,3/2/1,"
|
||||
5x5min/5min
|
||||
5x5min/5min",Europe/Prague,water,80.0,lwt
|
||||
311,https://rowsandall.com/rowers/workout/2583/emailcsv,https://rowsandall.com/rowers/workout/2583/emailtcx,0,49,None,2018-06-11 15:21:01+00:00,10369,00:56:21.400000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
312,https://rowsandall.com/rowers/workout/2554/emailcsv,https://rowsandall.com/rowers/workout/2554/emailtcx,0,0,None,2018-06-13 14:18:19+00:00,16543,01:30:01.300000,Intervals Tests,,America/New_York,rower,80.0,lwt
|
||||
313,https://rowsandall.com/rowers/workout/2555/emailcsv,https://rowsandall.com/rowers/workout/2555/emailtcx,0,0,None,2018-06-13 14:18:35+00:00,12205,01:03:29.500000,Intervals Tests (2),,America/New_York,rower,80.0,lwt
|
||||
314,https://rowsandall.com/rowers/workout/2556/emailcsv,https://rowsandall.com/rowers/workout/2556/emailtcx,0,0,None,2018-06-13 14:18:48+00:00,9016,00:48:28.100000,Intervals Tests (3),"
|
||||
9x1km",America/New_York,rower,80.0,lwt
|
||||
315,https://rowsandall.com/rowers/workout/2557/emailcsv,https://rowsandall.com/rowers/workout/2557/emailtcx,0,0,None,2018-06-13 14:19:01+00:00,4789,00:22:05,Intervals Tests (4),,America/New_York,rower,80.0,lwt
|
||||
316,https://rowsandall.com/rowers/workout/2558/emailcsv,https://rowsandall.com/rowers/workout/2558/emailtcx,0,0,None,2018-06-13 14:19:19+00:00,0,00:22:54,Intervals Tests (5),,Europe/Prague,rower,80.0,lwt
|
||||
317,https://rowsandall.com/rowers/workout/2582/emailcsv,https://rowsandall.com/rowers/workout/2582/emailtcx,32,25,None,2018-06-13 16:11:02+00:00,4191,00:23:36.400000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
318,https://rowsandall.com/rowers/workout/2581/emailcsv,https://rowsandall.com/rowers/workout/2581/emailtcx,0,30,None,2018-06-15 08:05:04+00:00,7301,00:39:44.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
319,https://rowsandall.com/rowers/workout/2580/emailcsv,https://rowsandall.com/rowers/workout/2580/emailtcx,0,38,None,2018-06-16 08:04:00+00:00,5182,00:40:48.100000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
320,https://rowsandall.com/rowers/workout/2579/emailcsv,https://rowsandall.com/rowers/workout/2579/emailtcx,0,43,None,2018-06-16 13:17:06+00:00,8196,00:52:10.500000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
321,https://rowsandall.com/rowers/workout/2950/emailcsv,https://rowsandall.com/rowers/workout/2950/emailtcx,0,0,None,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run,,Europe/Vienna,water,80.0,hwt
|
||||
322,https://rowsandall.com/rowers/workout/2954/emailcsv,https://rowsandall.com/rowers/workout/2954/emailtcx,0,0,None,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run,,Europe/Vienna,water,80.0,hwt
|
||||
323,https://rowsandall.com/rowers/workout/3035/emailcsv,https://rowsandall.com/rowers/workout/3035/emailtcx,0,17,None,2018-06-17 10:23:24+00:00,6004,01:00:54,Lunch Run, ,Europe/Vienna,other,80.0,hwt
|
||||
324,https://rowsandall.com/rowers/workout/2578/emailcsv,https://rowsandall.com/rowers/workout/2578/emailtcx,88,24,None,2018-06-18 16:05:05+00:00,10313,00:55:54.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
325,https://rowsandall.com/rowers/workout/2948/emailcsv,https://rowsandall.com/rowers/workout/2948/emailtcx,0,0,None,2018-06-18 16:05:05+00:00,10313,00:55:54,Steady,,Europe/Prague,water,80.0,hwt
|
||||
326,https://rowsandall.com/rowers/workout/2952/emailcsv,https://rowsandall.com/rowers/workout/2952/emailtcx,0,0,None,2018-06-18 16:05:05+00:00,10313,00:55:54,Steady,,Europe/Prague,water,80.0,hwt
|
||||
327,https://rowsandall.com/rowers/workout/2573/emailcsv,https://rowsandall.com/rowers/workout/2573/emailtcx,0,0,None,2018-06-19 05:57:02+00:00,10437,00:56:06.900000,Pink,,Europe/Prague,water,80.0,lwt
|
||||
328,https://rowsandall.com/rowers/workout/2577/emailcsv,https://rowsandall.com/rowers/workout/2577/emailtcx,105,43,None,2018-06-19 05:57:02+00:00,10437,00:56:06.900000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
329,https://rowsandall.com/rowers/workout/2946/emailcsv,https://rowsandall.com/rowers/workout/2946/emailtcx,0,0,None,2018-06-19 05:57:04+00:00,10437,00:56:04,3x6min,,Europe/Prague,water,80.0,hwt
|
||||
330,https://rowsandall.com/rowers/workout/2570/emailcsv,https://rowsandall.com/rowers/workout/2570/emailtcx,0,0,None,2018-06-19 15:11:14.220000+00:00,7538,00:56:14.600000,Test,,Europe/Vienna,water,80.0,lwt
|
||||
331,https://rowsandall.com/rowers/workout/2571/emailcsv,https://rowsandall.com/rowers/workout/2571/emailtcx,0,0,None,2018-06-20 18:24:08+00:00,7538,00:56:14.500000,Ritmo,,Europe/Vienna,water,80.0,lwt
|
||||
332,https://rowsandall.com/rowers/workout/2858/emailcsv,https://rowsandall.com/rowers/workout/2858/emailtcx,0,0,None,2018-06-22 04:33:02.500000+00:00,3344,00:16:55.700000,imported through ema,imported through email,Europe/Prague,water,80.0,hwt
|
||||
333,https://rowsandall.com/rowers/workout/2576/emailcsv,https://rowsandall.com/rowers/workout/2576/emailtcx,89,20,None,2018-06-22 05:41:04+00:00,9298,00:50:44,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
334,https://rowsandall.com/rowers/workout/2944/emailcsv,https://rowsandall.com/rowers/workout/2944/emailtcx,0,0,None,2018-06-22 05:41:04+00:00,9298,00:50:44,Steady,,Europe/Prague,water,80.0,hwt
|
||||
335,https://rowsandall.com/rowers/workout/2575/emailcsv,https://rowsandall.com/rowers/workout/2575/emailtcx,27,8,None,2018-06-22 06:33:01+00:00,3344,00:16:55.700000,Imported workout,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
336,https://rowsandall.com/rowers/workout/2942/emailcsv,https://rowsandall.com/rowers/workout/2942/emailtcx,27,11,None,2018-06-22 06:33:02+00:00,3344,00:16:54,Steady (2),,Europe/Prague,water,80.0,hwt
|
||||
337,https://rowsandall.com/rowers/workout/2940/emailcsv,https://rowsandall.com/rowers/workout/2940/emailtcx,0,0,None,2018-06-22 10:45:04+00:00,7540,00:56:14,test delete,,Europe/Vienna,water,80.0,hwt
|
||||
338,https://rowsandall.com/rowers/workout/2725/emailcsv,https://rowsandall.com/rowers/workout/2725/emailtcx,0,0,None,2018-06-22 12:17:56+00:00,15642,01:15:00,Mike,"
|
||||
3x20min/5min",Europe/Prague,water,80.0,lwt
|
||||
339,https://rowsandall.com/rowers/workout/2726/emailcsv,https://rowsandall.com/rowers/workout/2726/emailtcx,0,0,None,2018-06-22 12:17:56+00:00,15642,01:15:00,Mike test,,Europe/Prague,water,80.0,lwt
|
||||
340,https://rowsandall.com/rowers/workout/2848/emailcsv,https://rowsandall.com/rowers/workout/2848/emailtcx,0,0,None,2018-06-24 05:34:07+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,lwt
|
||||
341,https://rowsandall.com/rowers/workout/2849/emailcsv,https://rowsandall.com/rowers/workout/2849/emailtcx,0,0,None,2018-06-24 05:34:07.200000+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,lwt
|
||||
342,https://rowsandall.com/rowers/workout/2957/emailcsv,https://rowsandall.com/rowers/workout/2957/emailtcx,0,0,None,2018-06-24 05:34:07.200000+00:00,10194,00:57:48.900000,Imported,,Europe/Prague,water,80.0,hwt
|
||||
343,https://rowsandall.com/rowers/workout/2938/emailcsv,https://rowsandall.com/rowers/workout/2938/emailtcx,0,0,None,2018-06-24 07:34:07+00:00,10194,00:57:43,Double,,Europe/Prague,water,80.0,hwt
|
||||
344,https://rowsandall.com/rowers/workout/3059/emailcsv,https://rowsandall.com/rowers/workout/3059/emailtcx,102,53,None,2018-06-26 15:06:01+00:00,10393,01:00:55.900000,C2 Import Workout from 2018-06-26 15:06:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
345,https://rowsandall.com/rowers/workout/2936/emailcsv,https://rowsandall.com/rowers/workout/2936/emailtcx,42,30,None,2018-06-26 15:06:04+00:00,5651,00:31:24,Sprintervals,,Europe/Prague,water,80.0,hwt
|
||||
346,https://rowsandall.com/rowers/workout/2934/emailcsv,https://rowsandall.com/rowers/workout/2934/emailtcx,0,0,None,2018-06-26 15:38:08+00:00,1056,00:05:12,Sprintervals (2),,Europe/Brussels,water,80.0,hwt
|
||||
347,https://rowsandall.com/rowers/workout/2932/emailcsv,https://rowsandall.com/rowers/workout/2932/emailtcx,0,0,None,2018-06-26 15:44:06+00:00,3684,00:22:50,Sprintervals (3),,Europe/Prague,water,80.0,hwt
|
||||
348,https://rowsandall.com/rowers/workout/2959/emailcsv,https://rowsandall.com/rowers/workout/2959/emailtcx,160,38,None,2018-06-30 05:31:02.200000+00:00,13878,01:21:16.600000,,"
|
||||
from speedcoach2v2.15 via rowsandall.com",Europe/Prague,water,80.0,hwt
|
||||
349,https://rowsandall.com/rowers/workout/2958/emailcsv,https://rowsandall.com/rowers/workout/2958/emailtcx,0,0,None,2018-06-30 07:31:01+00:00,13878,01:21:16.600000,C2 Import Workout from 2018-06-30 07:31:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
350,https://rowsandall.com/rowers/workout/3030/emailcsv,https://rowsandall.com/rowers/workout/3030/emailtcx,80,6031,None,2018-07-01 11:57:30+00:00,12879,00:57:00,Ride to pub, ,Europe/Prague,other,80.0,hwt
|
||||
351,https://rowsandall.com/rowers/workout/3031/emailcsv,https://rowsandall.com/rowers/workout/3031/emailtcx,0,0,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test P,,Europe/Prague,water,80.0,hwt
|
||||
352,https://rowsandall.com/rowers/workout/3058/emailcsv,https://rowsandall.com/rowers/workout/3058/emailtcx,14,16,None,2018-07-02 16:21:01+00:00,2858,00:15:40.600000,C2 Import Workout from 2018-07-02 16:21:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
353,https://rowsandall.com/rowers/workout/3063/emailcsv,https://rowsandall.com/rowers/workout/3063/emailtcx,120,79,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
|
||||
354,https://rowsandall.com/rowers/workout/3064/emailcsv,https://rowsandall.com/rowers/workout/3064/emailtcx,120,79,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
|
||||
355,https://rowsandall.com/rowers/workout/3065/emailcsv,https://rowsandall.com/rowers/workout/3065/emailtcx,0,0,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
|
||||
356,https://rowsandall.com/rowers/workout/3066/emailcsv,https://rowsandall.com/rowers/workout/3066/emailtcx,120,79,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Test Strava Export,,Europe/Prague,water,80.0,hwt
|
||||
357,https://rowsandall.com/rowers/workout/3068/emailcsv,https://rowsandall.com/rowers/workout/3068/emailtcx,0,0,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Should be exported To Strava,,Europe/Prague,water,80.0,hwt
|
||||
358,https://rowsandall.com/rowers/workout/3070/emailcsv,https://rowsandall.com/rowers/workout/3070/emailtcx,120,79,None,2018-07-02 16:21:01+00:00,12532,01:09:16.500000,Should Not Be Exported To Strava,,Europe/Prague,water,80.0,hwt
|
||||
359,https://rowsandall.com/rowers/workout/3057/emailcsv,https://rowsandall.com/rowers/workout/3057/emailtcx,16,16,None,2018-07-02 16:40:02+00:00,2001,00:08:29,C2 Import Workout from 2018-07-02 16:40:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
360,https://rowsandall.com/rowers/workout/3056/emailcsv,https://rowsandall.com/rowers/workout/3056/emailtcx,23,15,None,2018-07-02 16:50:02+00:00,2136,00:09:16.200000,C2 Import Workout from 2018-07-02 16:50:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
361,https://rowsandall.com/rowers/workout/3055/emailcsv,https://rowsandall.com/rowers/workout/3055/emailtcx,23,23,None,2018-07-02 17:01:02+00:00,2058,00:08:38.800000,C2 Import Workout from 2018-07-02 17:01:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
362,https://rowsandall.com/rowers/workout/3008/emailcsv,https://rowsandall.com/rowers/workout/3008/emailtcx,22,0,None,2018-07-02 17:01:05+00:00,2058,00:08:35,2ks with focus (4),,Europe/Prague,water,80.0,hwt
|
||||
363,https://rowsandall.com/rowers/workout/3028/emailcsv,https://rowsandall.com/rowers/workout/3028/emailtcx,22,0,None,2018-07-02 17:01:05+00:00,2058,00:08:35,2ks with focus (4),,Europe/Prague,water,80.0,hwt
|
||||
364,https://rowsandall.com/rowers/workout/3054/emailcsv,https://rowsandall.com/rowers/workout/3054/emailtcx,28,20,None,2018-07-02 17:11:02+00:00,2149,00:09:47.300000,C2 Import Workout from 2018-07-02 17:11:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
365,https://rowsandall.com/rowers/workout/3006/emailcsv,https://rowsandall.com/rowers/workout/3006/emailtcx,27,0,None,2018-07-02 17:11:05+00:00,2149,00:09:44,2ks with focus (5),,Europe/Prague,water,80.0,hwt
|
||||
366,https://rowsandall.com/rowers/workout/3026/emailcsv,https://rowsandall.com/rowers/workout/3026/emailtcx,27,0,None,2018-07-02 17:11:05+00:00,2149,00:09:44,2ks with focus (5),,Europe/Prague,water,80.0,hwt
|
||||
367,https://rowsandall.com/rowers/workout/3053/emailcsv,https://rowsandall.com/rowers/workout/3053/emailtcx,10,7,None,2018-07-02 17:24:02+00:00,1328,00:06:15.500000,C2 Import Workout from 2018-07-02 17:24:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
368,https://rowsandall.com/rowers/workout/3004/emailcsv,https://rowsandall.com/rowers/workout/3004/emailtcx,10,0,None,2018-07-02 17:24:05+00:00,1328,00:06:12,2ks with focus (6),,Europe/Prague,water,80.0,hwt
|
||||
369,https://rowsandall.com/rowers/workout/3024/emailcsv,https://rowsandall.com/rowers/workout/3024/emailtcx,10,0,None,2018-07-02 17:24:05+00:00,1328,00:06:12,2ks with focus (6),,Europe/Prague,water,80.0,hwt
|
||||
370,https://rowsandall.com/rowers/workout/2964/emailcsv,https://rowsandall.com/rowers/workout/2964/emailtcx,0,0,None,2018-07-04 15:06:42+00:00,7350,00:31:07,Test,,Europe/Prague,rower,80.0,hwt
|
||||
371,https://rowsandall.com/rowers/workout/2965/emailcsv,https://rowsandall.com/rowers/workout/2965/emailtcx,0,103,None,2018-07-04 16:19:01+00:00,10471,01:00:27.200000,Test TRIMP,,Europe/Prague,water,80.0,hwt
|
||||
372,https://rowsandall.com/rowers/workout/2966/emailcsv,https://rowsandall.com/rowers/workout/2966/emailtcx,0,98,None,2018-07-04 16:19:01+00:00,10471,01:00:27.200000,Test Rscore,,Europe/Prague,water,80.0,hwt
|
||||
373,https://rowsandall.com/rowers/workout/3052/emailcsv,https://rowsandall.com/rowers/workout/3052/emailtcx,0,70,None,2018-07-04 16:19:01+00:00,10471,01:00:27.100000,C2 Import Workout from 2018-07-04 16:19:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
374,https://rowsandall.com/rowers/workout/3279/emailcsv,https://rowsandall.com/rowers/workout/3279/emailtcx,0,0,None,2018-07-04 16:19:01+00:00,10471,01:00:27.200000,Ranking Pieces,,Europe/Prague,water,80.0,hwt
|
||||
375,https://rowsandall.com/rowers/workout/2967/emailcsv,https://rowsandall.com/rowers/workout/2967/emailtcx,0,96,None,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,"
|
||||
from csv via rowsandall.com",Europe/Prague,water,80.0,hwt
|
||||
376,https://rowsandall.com/rowers/workout/3002/emailcsv,https://rowsandall.com/rowers/workout/3002/emailtcx,0,98,None,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,,Europe/Prague,water,80.0,hwt
|
||||
377,https://rowsandall.com/rowers/workout/3022/emailcsv,https://rowsandall.com/rowers/workout/3022/emailtcx,0,98,None,2018-07-04 16:19:02+00:00,10471,01:00:26,Startjes,,Europe/Prague,water,80.0,hwt
|
||||
378,https://rowsandall.com/rowers/workout/3051/emailcsv,https://rowsandall.com/rowers/workout/3051/emailtcx,17,8,None,2018-07-07 07:43:02+00:00,2874,00:16:39.700000,C2 Import Workout from 2018-07-07 07:43:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
379,https://rowsandall.com/rowers/workout/3000/emailcsv,https://rowsandall.com/rowers/workout/3000/emailtcx,17,0,None,2018-07-07 07:43:03+00:00,2874,00:16:38,2x race prep,,Europe/Prague,water,80.0,hwt
|
||||
380,https://rowsandall.com/rowers/workout/3020/emailcsv,https://rowsandall.com/rowers/workout/3020/emailtcx,17,0,None,2018-07-07 07:43:03+00:00,2874,00:16:38,2x race prep,,Europe/Prague,water,80.0,hwt
|
||||
381,https://rowsandall.com/rowers/workout/3050/emailcsv,https://rowsandall.com/rowers/workout/3050/emailtcx,2,7,None,2018-07-07 08:01:01+00:00,743,00:02:45.500000,C2 Import Workout from 2018-07-07 08:01:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
382,https://rowsandall.com/rowers/workout/2998/emailcsv,https://rowsandall.com/rowers/workout/2998/emailtcx,2,0,None,2018-07-07 08:01:02+00:00,743,00:02:44,2x race prep (2),,Europe/Prague,bike,80.0,hwt
|
||||
383,https://rowsandall.com/rowers/workout/3018/emailcsv,https://rowsandall.com/rowers/workout/3018/emailtcx,2,0,None,2018-07-07 08:01:02+00:00,743,00:02:44,2x race prep (2),,Europe/Prague,water,80.0,hwt
|
||||
384,https://rowsandall.com/rowers/workout/3049/emailcsv,https://rowsandall.com/rowers/workout/3049/emailtcx,21,8,None,2018-07-07 08:05:03+00:00,2827,00:15:21.800000,C2 Import Workout from 2018-07-07 08:05:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
385,https://rowsandall.com/rowers/workout/2996/emailcsv,https://rowsandall.com/rowers/workout/2996/emailtcx,21,0,None,2018-07-07 08:05:06+00:00,2827,00:15:18,2x race prep (3),,Europe/Prague,water,80.0,hwt
|
||||
386,https://rowsandall.com/rowers/workout/3016/emailcsv,https://rowsandall.com/rowers/workout/3016/emailtcx,21,0,None,2018-07-07 08:05:06+00:00,2827,00:15:18,2x race prep (3),,Europe/Prague,water,80.0,hwt
|
||||
387,https://rowsandall.com/rowers/workout/3048/emailcsv,https://rowsandall.com/rowers/workout/3048/emailtcx,4,8,None,2018-07-07 08:22:01+00:00,749,00:03:12.500000,C2 Import Workout from 2018-07-07 08:22:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
388,https://rowsandall.com/rowers/workout/2994/emailcsv,https://rowsandall.com/rowers/workout/2994/emailtcx,4,0,None,2018-07-07 08:22:02+00:00,749,00:03:11,2x race prep (4),,Europe/Prague,water,80.0,hwt
|
||||
389,https://rowsandall.com/rowers/workout/3014/emailcsv,https://rowsandall.com/rowers/workout/3014/emailtcx,4,0,None,2018-07-07 08:22:02+00:00,749,00:03:11,2x race prep (4),,Europe/Prague,water,80.0,hwt
|
||||
390,https://rowsandall.com/rowers/workout/3047/emailcsv,https://rowsandall.com/rowers/workout/3047/emailtcx,13,5,None,2018-07-07 08:27:03+00:00,2058,00:11:55.800000,C2 Import Workout from 2018-07-07 08:27:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
391,https://rowsandall.com/rowers/workout/2992/emailcsv,https://rowsandall.com/rowers/workout/2992/emailtcx,13,14,None,2018-07-07 08:27:06+00:00,2058,00:11:52,2x race prep (5),,Europe/Prague,water,75.0,hwt
|
||||
392,https://rowsandall.com/rowers/workout/3012/emailcsv,https://rowsandall.com/rowers/workout/3012/emailtcx,13,15,None,2018-07-07 08:27:06+00:00,2058,00:11:52,2x race prep (5),,Europe/Prague,water,80.0,hwt
|
||||
393,https://rowsandall.com/rowers/workout/2969/emailcsv,https://rowsandall.com/rowers/workout/2969/emailtcx,100,116,None,2018-07-08 13:17:02+00:00,10372,01:00:18.100000,HRTSS,,Europe/Prague,water,80.0,hwt
|
||||
394,https://rowsandall.com/rowers/workout/3046/emailcsv,https://rowsandall.com/rowers/workout/3046/emailtcx,101,44,None,2018-07-08 13:17:02+00:00,10372,01:00:18,C2 Import Workout from 2018-07-08 13:17:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
395,https://rowsandall.com/rowers/workout/3034/emailcsv,https://rowsandall.com/rowers/workout/3034/emailtcx,0,0,None,2018-07-08 13:17:08+00:00,10372,01:00:12,Tempovky,,Europe/Prague,water,80.0,hwt
|
||||
396,https://rowsandall.com/rowers/workout/3045/emailcsv,https://rowsandall.com/rowers/workout/3045/emailtcx,0,8,None,2018-07-13 13:08:00+00:00,2481,00:13:41,C2 Import Workout from 2018-07-13 13:08:00+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
397,https://rowsandall.com/rowers/workout/3044/emailcsv,https://rowsandall.com/rowers/workout/3044/emailtcx,0,21,None,2018-07-13 13:23:01+00:00,4085,00:22:09.200000,C2 Import Workout from 2018-07-13 13:23:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
398,https://rowsandall.com/rowers/workout/3043/emailcsv,https://rowsandall.com/rowers/workout/3043/emailtcx,0,44,None,2018-07-14 08:59:02+00:00,7051,00:50:00.500000,C2 Import Workout from 2018-07-14 08:59:02+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
399,https://rowsandall.com/rowers/workout/3280/emailcsv,https://rowsandall.com/rowers/workout/3280/emailtcx,0,0,None,2018-07-14 08:59:02+00:00,7051,00:50:00.500000,Ranking Pieces (2),,Europe/Prague,water,80.0,hwt
|
||||
400,https://rowsandall.com/rowers/workout/3042/emailcsv,https://rowsandall.com/rowers/workout/3042/emailtcx,0,144,None,2018-07-14 13:33:00+00:00,4471,00:51:42.100000,C2 Import Workout from 2018-07-14 13:33:00+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
401,https://rowsandall.com/rowers/workout/3041/emailcsv,https://rowsandall.com/rowers/workout/3041/emailtcx,0,49,None,2018-07-14 15:48:01+00:00,4486,00:56:58.100000,C2 Import Workout from 2018-07-14 15:48:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
402,https://rowsandall.com/rowers/workout/3040/emailcsv,https://rowsandall.com/rowers/workout/3040/emailtcx,0,37,None,2018-07-15 06:10:01+00:00,4233,00:29:17,C2 Import Workout from 2018-07-15 06:10:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
403,https://rowsandall.com/rowers/workout/3039/emailcsv,https://rowsandall.com/rowers/workout/3039/emailtcx,0,66,None,2018-07-15 09:01:01+00:00,4978,00:41:45,C2 Import Workout from 2018-07-15 09:01:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
404,https://rowsandall.com/rowers/workout/3038/emailcsv,https://rowsandall.com/rowers/workout/3038/emailtcx,116,29,None,2018-07-18 05:00:01+00:00,11159,00:59:58,C2 Import Workout from 2018-07-18 05:00:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
405,https://rowsandall.com/rowers/workout/3037/emailcsv,https://rowsandall.com/rowers/workout/3037/emailtcx,80,56,None,2018-07-20 09:29:01+00:00,8436,00:45:44.500000,C2 Import Workout from 2018-07-20 09:29:01+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
406,https://rowsandall.com/rowers/workout/3036/emailcsv,https://rowsandall.com/rowers/workout/3036/emailtcx,65,45,None,2018-07-21 05:13:03+00:00,9639,00:54:19.500000,C2 Import Workout from 2018-07-21 05:13:03+00:00,imported from Concept2 log,UTC,water,80.0,lwt
|
||||
407,https://rowsandall.com/rowers/workout/3281/emailcsv,https://rowsandall.com/rowers/workout/3281/emailtcx,0,0,None,2018-07-28 06:55:03+00:00,5390,00:39:17.200000,Ranking Pieces (3),,Europe/Berlin,water,80.0,hwt
|
||||
408,https://rowsandall.com/rowers/workout/3282/emailcsv,https://rowsandall.com/rowers/workout/3282/emailtcx,0,0,None,2018-08-17 05:16:03+00:00,8315,00:45:11.400000,Ranking Pieces (4),,Europe/Prague,water,80.0,hwt
|
||||
409,https://rowsandall.com/rowers/workout/3075/emailcsv,https://rowsandall.com/rowers/workout/3075/emailtcx,83,28,None,2018-08-18 07:54:04+00:00,9590,00:55:08,Technique 2x, ,Europe/Prague,water,80.0,hwt
|
||||
410,https://rowsandall.com/rowers/workout/3074/emailcsv,https://rowsandall.com/rowers/workout/3074/emailtcx,94,17,None,2018-08-26 22:00:01.500000+00:00,9903,00:54:36,Imported,,Europe/Prague,bike,80.0,hwt
|
||||
411,https://rowsandall.com/rowers/workout/3076/emailcsv,https://rowsandall.com/rowers/workout/3076/emailtcx,94,1104,None,2018-08-26 22:00:01.500000+00:00,9903,00:54:36,Imported,,Europe/Prague,bike,80.0,hwt
|
||||
412,https://rowsandall.com/rowers/workout/3072/emailcsv,https://rowsandall.com/rowers/workout/3072/emailtcx,15,4,None,2018-08-27 14:36:47+00:00,5855,00:14:58.700000,Bike Erg,,Europe/Prague,bikeerg,80.0,hwt
|
||||
413,https://rowsandall.com/rowers/workout/3073/emailcsv,https://rowsandall.com/rowers/workout/3073/emailtcx,15,4,None,2018-08-27 14:36:47+00:00,5855,00:14:58.700000,Bike Erg,,Europe/Prague,bike,80.0,hwt
|
||||
414,https://rowsandall.com/rowers/workout/3283/emailcsv,https://rowsandall.com/rowers/workout/3283/emailtcx,0,0,None,2018-08-30 14:20:05+00:00,10000,00:48:01.500000,Ranking Pieces (5),,Europe/Prague,water,80.0,hwt
|
||||
415,https://rowsandall.com/rowers/workout/3284/emailcsv,https://rowsandall.com/rowers/workout/3284/emailtcx,0,0,None,2018-09-03 16:03:05+00:00,9000,00:41:13.500000,Ranking Pieces (6),,Europe/Prague,water,80.0,hwt
|
||||
416,https://rowsandall.com/rowers/workout/3077/emailcsv,https://rowsandall.com/rowers/workout/3077/emailtcx,0,68,None,2018-09-11 05:31:02+00:00,7490,00:35:07.500000,7.5k,,Europe/Prague,water,80.0,hwt
|
||||
417,https://rowsandall.com/rowers/workout/3080/emailcsv,https://rowsandall.com/rowers/workout/3080/emailtcx,51,10,None,2018-09-12 04:17:04+00:00,5921,00:34:50,Sofia part II, ,Europe/Sofia,other,80.0,hwt
|
||||
418,https://rowsandall.com/rowers/workout/3091/emailcsv,https://rowsandall.com/rowers/workout/3091/emailtcx,52,0,None,2018-09-12 07:17:04+00:00,5890,00:34:49,Imported data,"Import from Polar Flow -
|
||||
from tcx via rowsandall.com",Europe/Sofia,other,80.0,hwt
|
||||
419,https://rowsandall.com/rowers/workout/3079/emailcsv,https://rowsandall.com/rowers/workout/3079/emailtcx,87,60,None,2018-09-13 12:15:58+00:00,23476,00:59:59.700000,Mike 2,,Europe/Prague,rower,80.0,hwt
|
||||
420,https://rowsandall.com/rowers/workout/3078/emailcsv,https://rowsandall.com/rowers/workout/3078/emailtcx,94,59,None,2018-09-14 13:02:04+00:00,24267,00:59:57.200000,Mike,,Europe/Prague,rower,80.0,hwt
|
||||
421,https://rowsandall.com/rowers/workout/3085/emailcsv,https://rowsandall.com/rowers/workout/3085/emailtcx,0,0,None,2018-09-23 11:05:51+00:00,2207,00:09:58.600000,Quiske,,Europe/Prague,water,80.0,hwt
|
||||
422,https://rowsandall.com/rowers/workout/3061/emailcsv,https://rowsandall.com/rowers/workout/3061/emailtcx,77,43,None,2018-10-02 05:16:03+00:00,8315,00:45:11.400000,Brnenske 2k,,Europe/Prague,water,80.0,hwt
|
||||
423,https://rowsandall.com/rowers/workout/3087/emailcsv,https://rowsandall.com/rowers/workout/3087/emailtcx,18,15,None,2018-10-02 05:16:03+00:00,3003,00:16:59.900000,Brnenske 2k (1),,Europe/Prague,water,80.0,hwt
|
||||
424,https://rowsandall.com/rowers/workout/3088/emailcsv,https://rowsandall.com/rowers/workout/3088/emailtcx,59,27,None,2018-10-02 05:33:03+00:00,5312,00:28:09.700000,Brnenske 2k (2),,Europe/Prague,water,80.0,hwt
|
||||
425,https://rowsandall.com/rowers/workout/3089/emailcsv,https://rowsandall.com/rowers/workout/3089/emailtcx,85,34,None,2018-10-02 05:33:03+00:00,5312,00:45:11.400000,Fused data,,Europe/Prague,water,80.0,hwt
|
||||
426,https://rowsandall.com/rowers/workout/3090/emailcsv,https://rowsandall.com/rowers/workout/3090/emailtcx,17,1,None,2018-10-06 10:38:03.900000+00:00,2027,00:14:02.100000,Imported,,Europe/Prague,water,80.0,hwt
|
||||
427,https://rowsandall.com/rowers/workout/3084/emailcsv,https://rowsandall.com/rowers/workout/3084/emailtcx,93,48,None,2018-10-06 12:07:02+00:00,6145,00:28:57.400000,Bike Erg,"
|
||||
Failed to download METAR data
|
||||
Summary for your location at 2018-10-06T12:21:53+00:00: Breezy and Mostly Cloudy. Temperature 68.28F/20.1C. Wind: 3.34 m/s. Wind Bearing: 169 degrees",Europe/Prague,water,80.0,hwt
|
||||
428,https://rowsandall.com/rowers/workout/3093/emailcsv,https://rowsandall.com/rowers/workout/3093/emailtcx,93,61,None,2018-10-06 12:07:02+00:00,6145,00:28:57.400000,Test Upload,,Europe/Prague,rower,80.0,hwt
|
||||
429,https://rowsandall.com/rowers/workout/3285/emailcsv,https://rowsandall.com/rowers/workout/3285/emailtcx,0,0,None,2018-10-06 12:07:02+00:00,6145,00:28:57.400000,Ranking Pieces (7),,Europe/Prague,water,80.0,hwt
|
||||
430,https://rowsandall.com/rowers/workout/3275/emailcsv,https://rowsandall.com/rowers/workout/3275/emailtcx,0,0,None,2018-10-06 12:38:02+00:00,2027,00:14:02.200000,Empower Data,,Europe/Prague,water,80.0,hwt
|
||||
431,https://rowsandall.com/rowers/workout/3092/emailcsv,https://rowsandall.com/rowers/workout/3092/emailtcx,68,58,None,2018-10-07 14:50:32+00:00,8214,00:50:55.900000,Imported,,Europe/Prague,rower,80.0,hwt
|
||||
432,https://rowsandall.com/rowers/workout/3097/emailcsv,https://rowsandall.com/rowers/workout/3097/emailtcx,144,93,None,2018-10-17 06:20:02.510070+00:00,14600,01:04:15.500000,Steady,,Europe/Prague,rower,80.0,hwt
|
||||
433,https://rowsandall.com/rowers/workout/3099/emailcsv,https://rowsandall.com/rowers/workout/3099/emailtcx,32,33,None,2018-10-17 12:17:12+00:00,6473,00:34:00,Indoor,,Europe/Prague,rower,80.0,hwt
|
||||
434,https://rowsandall.com/rowers/workout/3098/emailcsv,https://rowsandall.com/rowers/workout/3098/emailtcx,92,0,None,2018-10-21 11:29:51+00:00,11083,00:59:34.500000,Test Boat,,Europe/Prague,water,80.0,hwt
|
||||
435,https://rowsandall.com/rowers/workout/3109/emailcsv,https://rowsandall.com/rowers/workout/3109/emailtcx,91,4403,None,2018-10-21 11:29:51+00:00,11083,00:59:35,Steady 4x, ,Europe/Prague,water,80.0,hwt
|
||||
436,https://rowsandall.com/rowers/workout/3100/emailcsv,https://rowsandall.com/rowers/workout/3100/emailtcx,0,0,None,2018-10-22 19:45:37+00:00,16282,01:24:40.600000,Quad,,America/New_York,rower,80.0,hwt
|
||||
437,https://rowsandall.com/rowers/workout/3101/emailcsv,https://rowsandall.com/rowers/workout/3101/emailtcx,0,0,None,2018-10-22 19:48:31+00:00,4822,00:28:27.600000,Eight,,America/New_York,rower,80.0,hwt
|
||||
438,https://rowsandall.com/rowers/workout/3102/emailcsv,https://rowsandall.com/rowers/workout/3102/emailtcx,0,0,None,2018-10-22 19:53:35+00:00,16282,01:24:40.600000,Quad,,America/New_York,rower,80.0,hwt
|
||||
439,https://rowsandall.com/rowers/workout/3103/emailcsv,https://rowsandall.com/rowers/workout/3103/emailtcx,0,0,None,2018-10-22 19:56:03+00:00,4822,00:28:27.600000,Eight,,America/New_York,rower,80.0,hwt
|
||||
440,https://rowsandall.com/rowers/workout/3104/emailcsv,https://rowsandall.com/rowers/workout/3104/emailtcx,0,0,None,2018-10-22 19:58:18+00:00,16282,01:24:40.600000,Quad,,America/New_York,water,80.0,hwt
|
||||
441,https://rowsandall.com/rowers/workout/3105/emailcsv,https://rowsandall.com/rowers/workout/3105/emailtcx,0,0,None,2018-10-22 19:59:55+00:00,16282,01:24:40.600000,Quad,,America/New_York,rower,80.0,hwt
|
||||
442,https://rowsandall.com/rowers/workout/3106/emailcsv,https://rowsandall.com/rowers/workout/3106/emailtcx,0,0,None,2018-10-22 20:04:15+00:00,16282,01:24:40.600000,Test,,America/New_York,rower,80.0,hwt
|
||||
443,https://rowsandall.com/rowers/workout/3107/emailcsv,https://rowsandall.com/rowers/workout/3107/emailtcx,0,0,None,2018-10-22 20:08:10+00:00,16282,01:24:40.600000,aap,,America/New_York,rower,80.0,hwt
|
||||
444,https://rowsandall.com/rowers/workout/3116/emailcsv,https://rowsandall.com/rowers/workout/3116/emailtcx,8,8,None,2018-10-25 17:20:06+00:00,10728,00:53:32.300000,5x1500m (25oct),,Europe/Prague,rower,80.0,hwt
|
||||
445,https://rowsandall.com/rowers/workout/3117/emailcsv,https://rowsandall.com/rowers/workout/3117/emailtcx,8,8,None,2018-10-25 17:20:06+00:00,10728,00:53:32.300000,5x1500,,Europe/Prague,rower,80.0,hwt
|
||||
446,https://rowsandall.com/rowers/workout/3118/emailcsv,https://rowsandall.com/rowers/workout/3118/emailtcx,8,8,None,2018-10-25 17:20:06+00:00,10728,00:53:32.300000,,,Europe/Prague,rower,80.0,hwt
|
||||
447,https://rowsandall.com/rowers/workout/3119/emailcsv,https://rowsandall.com/rowers/workout/3119/emailtcx,8,74,None,2018-10-25 17:20:06+00:00,10728,00:53:32.300000,,,Europe/Prague,rower,80.0,hwt
|
||||
448,https://rowsandall.com/rowers/workout/3122/emailcsv,https://rowsandall.com/rowers/workout/3122/emailtcx,102,71,None,2018-10-25 17:20:06+00:00,10728,00:53:32.300000,25oct,,Europe/Prague,rower,80.0,hwt
|
||||
449,https://rowsandall.com/rowers/workout/3111/emailcsv,https://rowsandall.com/rowers/workout/3111/emailtcx,196,119,None,2018-10-26 14:23:10+00:00,21102,01:29:22,Steady HM, ,Europe/Prague,rower,80.0,hwt
|
||||
450,https://rowsandall.com/rowers/workout/3198/emailcsv,https://rowsandall.com/rowers/workout/3198/emailtcx,106,0,None,2018-10-28 09:40:58+00:00,11896,01:05:44,Morning Run, ,Europe/Prague,Run,80.0,hwt
|
||||
451,https://rowsandall.com/rowers/workout/3112/emailcsv,https://rowsandall.com/rowers/workout/3112/emailtcx,0,0,None,2018-10-28 12:23:05+00:00,16282,01:24:40.600000,Quad,,America/New_York,water,80.0,hwt
|
||||
452,https://rowsandall.com/rowers/workout/3115/emailcsv,https://rowsandall.com/rowers/workout/3115/emailtcx,10,12,None,2018-10-31 18:52:37+00:00,10470,00:48:46.600000,5c1500m (31oct),,Europe/Prague,rower,80.0,hwt
|
||||
453,https://rowsandall.com/rowers/workout/3120/emailcsv,https://rowsandall.com/rowers/workout/3120/emailtcx,126,50,None,2018-10-31 18:52:37+00:00,10470,00:48:46.600000,,,Europe/Prague,rower,80.0,hwt
|
||||
454,https://rowsandall.com/rowers/workout/3121/emailcsv,https://rowsandall.com/rowers/workout/3121/emailtcx,96,61,None,2018-10-31 18:52:37+00:00,10470,00:48:46.600000,31oct,,Europe/Prague,rower,80.0,hwt
|
||||
455,https://rowsandall.com/rowers/workout/3178/emailcsv,https://rowsandall.com/rowers/workout/3178/emailtcx,98,0,None,2018-10-31 18:52:37+00:00,10470,00:48:47,5x1500m, ,Europe/Prague,rower,80.0,hwt
|
||||
456,https://rowsandall.com/rowers/workout/3195/emailcsv,https://rowsandall.com/rowers/workout/3195/emailtcx,0,0,None,2018-11-02 19:00:56+00:00,544,00:02:21,Steady in Naarden, ,Europe/Prague,rower,80.0,hwt
|
||||
457,https://rowsandall.com/rowers/workout/3196/emailcsv,https://rowsandall.com/rowers/workout/3196/emailtcx,184,0,None,2018-11-03 07:07:28+00:00,14893,01:31:16,BoatCoach Raw Workout Data,,Europe/Amsterdam,water,80.0,hwt
|
||||
458,https://rowsandall.com/rowers/workout/3190/emailcsv,https://rowsandall.com/rowers/workout/3190/emailtcx,32,0,None,2018-11-04 15:19:03+00:00,4064,00:16:09,Fwd: November vieren 4*, ,Europe/Amsterdam,water,80.0,hwt
|
||||
459,https://rowsandall.com/rowers/workout/3191/emailcsv,https://rowsandall.com/rowers/workout/3191/emailtcx,7,0,None,2018-11-04 15:19:03+00:00,1227,00:05:00,Fwd: November vieren 4* (1), ,Europe/Amsterdam,water,80.0,hwt
|
||||
460,https://rowsandall.com/rowers/workout/3192/emailcsv,https://rowsandall.com/rowers/workout/3192/emailtcx,24,0,None,2018-11-04 15:24:03+00:00,2828,00:11:07,Fwd: November vieren 4* (2), ,Europe/Amsterdam,water,80.0,hwt
|
||||
461,https://rowsandall.com/rowers/workout/3193/emailcsv,https://rowsandall.com/rowers/workout/3193/emailtcx,112,0,None,2018-11-05 13:00:00+00:00,12000,03:00:00,Snow Shoe,,Europe/Prague,Snowshoe,80.0,hwt
|
||||
462,https://rowsandall.com/rowers/workout/3194/emailcsv,https://rowsandall.com/rowers/workout/3194/emailtcx,112,0,None,2018-11-05 13:00:00+00:00,12000,03:00:00,Snow Shoe, ,Europe/Prague,Snowshoe,80.0,hwt
|
||||
463,https://rowsandall.com/rowers/workout/3200/emailcsv,https://rowsandall.com/rowers/workout/3200/emailtcx,112,0,None,2018-11-05 13:00:00+00:00,12000,03:00:00,Snow Shoe, ,Europe/Prague,rower,80.0,hwt
|
||||
464,https://rowsandall.com/rowers/workout/3201/emailcsv,https://rowsandall.com/rowers/workout/3201/emailtcx,112,0,None,2018-11-05 13:00:00+00:00,12000,03:00:00,Snow Shoe, ,Europe/Prague,other,80.0,hwt
|
||||
465,https://rowsandall.com/rowers/workout/3123/emailcsv,https://rowsandall.com/rowers/workout/3123/emailtcx,3,2,None,2018-11-09 09:22:17+00:00,500,00:02:00,Manual Entry Form,test,Europe/Prague,rower,80.0,hwt
|
||||
466,https://rowsandall.com/rowers/workout/3124/emailcsv,https://rowsandall.com/rowers/workout/3124/emailtcx,97,58,None,2018-11-09 10:00:50+00:00,10000,00:41:14,Manual Entry,,Europe/Prague,rower,80.0,hwt
|
||||
467,https://rowsandall.com/rowers/workout/3125/emailcsv,https://rowsandall.com/rowers/workout/3125/emailtcx,0,2,None,2018-11-09 10:04:05+00:00,500,00:02:00,Manual Entry,,Europe/Prague,rower,80.0,hwt
|
||||
468,https://rowsandall.com/rowers/workout/3171/emailcsv,https://rowsandall.com/rowers/workout/3171/emailtcx,75,68,None,2018-11-10 13:32:04+00:00,8635,00:38:04,5x5min/3min, ,Europe/Prague,rower,80.0,hwt
|
||||
469,https://rowsandall.com/rowers/workout/3197/emailcsv,https://rowsandall.com/rowers/workout/3197/emailtcx,0,60,None,2018-11-11 12:16:38+00:00,11961,00:54:08.600000,Imported,,Europe/Prague,Run,80.0,hwt
|
||||
470,https://rowsandall.com/rowers/workout/3170/emailcsv,https://rowsandall.com/rowers/workout/3170/emailtcx,0,5,None,2018-11-11 13:10:01+00:00,1188,00:05:05,Steady - low back problem, ,Europe/Prague,rower,80.0,hwt
|
||||
471,https://rowsandall.com/rowers/workout/3169/emailcsv,https://rowsandall.com/rowers/workout/3169/emailtcx,0,62,None,2018-11-11 13:16:36+00:00,11961,00:54:09,Steady - low back problem, ,Europe/Prague,rower,80.0,hwt
|
||||
472,https://rowsandall.com/rowers/workout/3177/emailcsv,https://rowsandall.com/rowers/workout/3177/emailtcx,0,0,None,2018-11-11 13:16:36+00:00,11961,00:54:09,Steady - low back problem, ,Europe/Prague,rower,80.0,hwt
|
||||
473,https://rowsandall.com/rowers/workout/3179/emailcsv,https://rowsandall.com/rowers/workout/3179/emailtcx,48,0,None,2018-11-13 06:31:45+00:00,0,00:55:44,Morning Activity, ,Europe/Prague,other,80.0,hwt
|
||||
474,https://rowsandall.com/rowers/workout/3172/emailcsv,https://rowsandall.com/rowers/workout/3172/emailtcx,0,22,None,2018-11-13 11:39:35+00:00,30000,03:00:00,Langst,,Europe/Prague,rower,80.0,hwt
|
||||
475,https://rowsandall.com/rowers/workout/3173/emailcsv,https://rowsandall.com/rowers/workout/3173/emailtcx,0,62,None,2018-11-13 11:40:03+00:00,20000,01:30:00,Lang,,Europe/Prague,rower,80.0,hwt
|
||||
476,https://rowsandall.com/rowers/workout/3174/emailcsv,https://rowsandall.com/rowers/workout/3174/emailtcx,0,17,None,2018-11-13 11:40:33+00:00,5000,00:22:00,Kort,,Europe/Prague,rower,80.0,hwt
|
||||
477,https://rowsandall.com/rowers/workout/3175/emailcsv,https://rowsandall.com/rowers/workout/3175/emailtcx,0,0,None,2018-11-13 11:44:27+00:00,500,00:40:00,40,,Europe/Prague,rower,80.0,hwt
|
||||
478,https://rowsandall.com/rowers/workout/3176/emailcsv,https://rowsandall.com/rowers/workout/3176/emailtcx,0,0,None,2018-11-13 11:44:43+00:00,500,01:31:00,91,,Europe/Prague,rower,80.0,hwt
|
||||
479,https://rowsandall.com/rowers/workout/3205/emailcsv,https://rowsandall.com/rowers/workout/3205/emailtcx,23,0,None,2018-11-22 14:46:38+00:00,0,01:03:33,Afternoon Activity, ,Europe/Prague,other,80.0,hwt
|
||||
480,https://rowsandall.com/rowers/workout/3204/emailcsv,https://rowsandall.com/rowers/workout/3204/emailtcx,6,0,None,2018-11-23 16:55:19+00:00,990,00:05:04,6x6min, ,Europe/Prague,water,80.0,hwt
|
||||
481,https://rowsandall.com/rowers/workout/3202/emailcsv,https://rowsandall.com/rowers/workout/3202/emailtcx,0,0,None,2018-11-26 15:47:25+00:00,2000,01:00:00,Een UUr Gezwommen,,Europe/Prague,Swim,80.0,hwt
|
||||
482,https://rowsandall.com/rowers/workout/3203/emailcsv,https://rowsandall.com/rowers/workout/3203/emailtcx,0,0,None,2018-11-26 15:53:33+00:00,500,00:02:00,Rennen,,Europe/Prague,Run,80.0,hwt
|
||||
483,https://rowsandall.com/rowers/workout/3208/emailcsv,https://rowsandall.com/rowers/workout/3208/emailtcx,0,0,None,2018-11-27 06:35:35+00:00,0,00:02:00,Manual Entry,,Europe/Prague,rower,80.0,hwt
|
||||
484,https://rowsandall.com/rowers/workout/3209/emailcsv,https://rowsandall.com/rowers/workout/3209/emailtcx,0,0,None,2018-11-27 07:38:13+00:00,0,00:00:59.300000,Manual Entry,,Europe/Prague,rower,80.0,hwt
|
||||
485,https://rowsandall.com/rowers/workout/3218/emailcsv,https://rowsandall.com/rowers/workout/3218/emailtcx,0,0,None,2018-11-29 06:49:34+00:00,100,00:00:18.600000,100,,Europe/Prague,rower,80.0,hwt
|
||||
486,https://rowsandall.com/rowers/workout/3219/emailcsv,https://rowsandall.com/rowers/workout/3219/emailtcx,0,6,None,2018-11-29 06:49:56+00:00,500,00:01:40.400000,500,,Europe/Prague,rower,80.0,hwt
|
||||
487,https://rowsandall.com/rowers/workout/3220/emailcsv,https://rowsandall.com/rowers/workout/3220/emailtcx,0,9,None,2018-11-29 06:50:20+00:00,1000,00:03:37.400000,1000,,Europe/Prague,rower,80.0,hwt
|
||||
488,https://rowsandall.com/rowers/workout/3221/emailcsv,https://rowsandall.com/rowers/workout/3221/emailtcx,0,23,None,2018-11-29 06:50:52+00:00,5000,00:20:48,5000,,Europe/Prague,rower,80.0,hwt
|
||||
489,https://rowsandall.com/rowers/workout/3222/emailcsv,https://rowsandall.com/rowers/workout/3222/emailtcx,0,15,None,2018-11-30 15:03:28+00:00,1000,00:03:17.100000,duizend,,Europe/Prague,rower,80.0,hwt
|
||||
490,https://rowsandall.com/rowers/workout/3223/emailcsv,https://rowsandall.com/rowers/workout/3223/emailtcx,0,2,None,2018-12-02 09:47:44+00:00,500,00:02:00,Test,,Europe/Prague,rower,80.0,hwt
|
||||
491,https://rowsandall.com/rowers/workout/3224/emailcsv,https://rowsandall.com/rowers/workout/3224/emailtcx,0,14,None,2018-12-02 10:14:42+00:00,1000,00:03:17.500000,Duzend,,Europe/Prague,rower,80.0,hwt
|
||||
492,https://rowsandall.com/rowers/workout/3226/emailcsv,https://rowsandall.com/rowers/workout/3226/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 3,,Europe/Prague,rower,80.0,hwt
|
||||
493,https://rowsandall.com/rowers/workout/3227/emailcsv,https://rowsandall.com/rowers/workout/3227/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 4,,Europe/Prague,dynamic,80.0,hwt
|
||||
494,https://rowsandall.com/rowers/workout/3228/emailcsv,https://rowsandall.com/rowers/workout/3228/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 5,,Europe/Prague,rower,80.0,hwt
|
||||
495,https://rowsandall.com/rowers/workout/3229/emailcsv,https://rowsandall.com/rowers/workout/3229/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 6,,Europe/Prague,rower,80.0,hwt
|
||||
496,https://rowsandall.com/rowers/workout/3230/emailcsv,https://rowsandall.com/rowers/workout/3230/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 6,,Europe/Prague,rower,80.0,hwt
|
||||
497,https://rowsandall.com/rowers/workout/3231/emailcsv,https://rowsandall.com/rowers/workout/3231/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Duzend 6,,Europe/Prague,rower,80.0,hwt
|
||||
498,https://rowsandall.com/rowers/workout/3232/emailcsv,https://rowsandall.com/rowers/workout/3232/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,No Race,,Europe/Prague,rower,80.0,hwt
|
||||
499,https://rowsandall.com/rowers/workout/3233/emailcsv,https://rowsandall.com/rowers/workout/3233/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,No Race,,Europe/Prague,rower,80.0,hwt
|
||||
500,https://rowsandall.com/rowers/workout/3234/emailcsv,https://rowsandall.com/rowers/workout/3234/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,No Race,,Europe/Prague,rower,80.0,hwt
|
||||
501,https://rowsandall.com/rowers/workout/3235/emailcsv,https://rowsandall.com/rowers/workout/3235/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,No Race,,Europe/Prague,rower,80.0,hwt
|
||||
502,https://rowsandall.com/rowers/workout/3236/emailcsv,https://rowsandall.com/rowers/workout/3236/emailtcx,6,13,None,2018-12-02 16:18:21+00:00,1000,00:03:21,Wanneer?,,Europe/Prague,rower,80.0,hwt
|
||||
503,https://rowsandall.com/rowers/workout/3246/emailcsv,https://rowsandall.com/rowers/workout/3246/emailtcx,14,11,None,2018-12-12 00:49:28+00:00,2418,00:10:00.100000,BG Run,,Europe/Prague,Run,80.0,hwt
|
||||
504,https://rowsandall.com/rowers/workout/3238/emailcsv,https://rowsandall.com/rowers/workout/3238/emailtcx,14,11,None,2018-12-12 00:49:28.662710+00:00,2418,00:10:00.100000,3x(5min/2min)/1000m,,Europe/Prague,rower,80.0,hwt
|
||||
505,https://rowsandall.com/rowers/workout/3240/emailcsv,https://rowsandall.com/rowers/workout/3240/emailtcx,14,11,None,2018-12-12 00:49:28.662710+00:00,2418,00:10:00.100000,Test Adaptive,,Europe/Prague,rower,80.0,hwt
|
||||
506,https://rowsandall.com/rowers/workout/3241/emailcsv,https://rowsandall.com/rowers/workout/3241/emailtcx,14,11,PR1,2018-12-12 00:49:28.662710+00:00,2418,00:10:00.100000,Test Adaptive 2,,Europe/Prague,rower,80.0,hwt
|
||||
507,https://rowsandall.com/rowers/workout/3239/emailcsv,https://rowsandall.com/rowers/workout/3239/emailtcx,0,5,None,2018-12-14 07:29:08+00:00,1000,00:04:01.700000,Duizend,,Europe/Prague,rower,80.0,hwt
|
||||
508,https://rowsandall.com/rowers/workout/3245/emailcsv,https://rowsandall.com/rowers/workout/3245/emailtcx,49,0,None,2018-12-15 08:55:58+00:00,11946,00:23:40,Morning Run, ,Europe/Prague,Run,80.0,hwt
|
||||
509,https://rowsandall.com/rowers/workout/3254/emailcsv,https://rowsandall.com/rowers/workout/3254/emailtcx,103,0,PR1,2019-01-03 19:42:24+00:00,9520,00:52:56.500000,,,Europe/Prague,rower,80.0,hwt
|
||||
510,https://rowsandall.com/rowers/workout/3255/emailcsv,https://rowsandall.com/rowers/workout/3255/emailtcx,103,0,PR1,2019-01-03 19:43:32+00:00,9520,00:52:56.500000,,,Europe/Prague,water,80.0,hwt
|
||||
511,https://rowsandall.com/rowers/workout/3256/emailcsv,https://rowsandall.com/rowers/workout/3256/emailtcx,103,0,PR1,2019-01-03 19:45:04+00:00,9520,00:52:56.500000,,,Europe/Prague,rower,80.0,hwt
|
||||
512,https://rowsandall.com/rowers/workout/3257/emailcsv,https://rowsandall.com/rowers/workout/3257/emailtcx,103,0,PR1,2019-01-03 19:46:53+00:00,9520,00:52:56.500000,,,Europe/Prague,rower,80.0,hwt
|
||||
513,https://rowsandall.com/rowers/workout/3258/emailcsv,https://rowsandall.com/rowers/workout/3258/emailtcx,103,0,PR1,2019-01-03 19:48:05+00:00,9520,00:52:56.500000,,,Europe/Prague,rower,80.0,hwt
|
||||
514,https://rowsandall.com/rowers/workout/3259/emailcsv,https://rowsandall.com/rowers/workout/3259/emailtcx,103,0,PR1,2019-01-03 19:50:06+00:00,9520,00:52:56.500000,,,Europe/Prague,rower,80.0,hwt
|
||||
515,https://rowsandall.com/rowers/workout/3277/emailcsv,https://rowsandall.com/rowers/workout/3277/emailtcx,18,6,None,2019-01-06 13:38:02+00:00,2027,00:14:02.200000,Empower Data,,Europe/Prague,water,80.0,hwt
|
||||
516,https://rowsandall.com/rowers/workout/3278/emailcsv,https://rowsandall.com/rowers/workout/3278/emailtcx,0,2,None,2019-01-11 13:07:18+00:00,500,00:02:00,Sander Roosendaal,,Europe/Prague,rower,80.0,hwt
|
||||
517,https://rowsandall.com/rowers/workout/3293/emailcsv,https://rowsandall.com/rowers/workout/3293/emailtcx,98,134,None,2019-01-13 06:45:51+00:00,8829,00:45:58.700000,RP3 intervals test,,Europe/Prague,dynamic,80.0,hwt
|
||||
|
+3
-4
@@ -260,7 +260,7 @@ urlpatterns = [
|
||||
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/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),
|
||||
@@ -397,8 +397,8 @@ urlpatterns = [
|
||||
url(r'^me/invitation/$',views.rower_invitations_view),
|
||||
url(r'^me/raise500/$',views.raise_500),
|
||||
url(r'^me/invitation/(\w+.*)/$',views.rower_invitations_view),
|
||||
url(r'^me/request/(?P<id>\d+)/revoke',views.request_revoke_view),
|
||||
url(r'^me/request/(?P<id>\d+)/reject',views.request_reject_view),
|
||||
url(r'^me/request/(?P<id>\d+)/revoke/$',views.request_revoke_view),
|
||||
url(r'^me/request/(?P<id>\d+)/reject/$',views.request_reject_view),
|
||||
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),
|
||||
@@ -585,7 +585,6 @@ urlpatterns = [
|
||||
|
||||
if settings.DEBUG:
|
||||
urlpatterns += [
|
||||
url(r'^testreverse/$',views.test_reverse_view),
|
||||
url(r'^c2listug/(?P<page>\d+)/$',views.c2listdebug_view),
|
||||
url(r'^c2listug/$',views.c2listdebug_view),
|
||||
]
|
||||
|
||||
+85
-1109
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user