diff --git a/rowers/models.py b/rowers/models.py index 8ab4eb1f..f9d3f0a2 100644 --- a/rowers/models.py +++ b/rowers/models.py @@ -578,12 +578,16 @@ def course_length(course): totaldist += 1000.*dist[0] - vector = get_dir_vector(polygons[0],polygons[1]) - deltastart = get_delta(vector,polygons[0]) + try: + vector = get_dir_vector(polygons[0],polygons[1]) + deltastart = get_delta(vector,polygons[0]) - polygons = polygons.reverse() - vector = get_dir_vector(polygons[0],polygons[1]) - deltafinish = get_delta(vector,polygons[0]) + polygons = polygons.reverse() + vector = get_dir_vector(polygons[0],polygons[1]) + deltafinish = get_delta(vector,polygons[0]) + except IndexError: + deltastart = 0 + deltafinish = 0 return int(totaldist-deltastart-deltafinish) @@ -2644,14 +2648,31 @@ class VirtualRaceForm(ModelForm): startdatetime ) - end_time = cd['end_time'] + try: + end_time = cd['end_time'] + except KeyError: + raise forms.ValidationError( + 'Must have end time', + code='missing endtime' + ) + + if end_time is None: raise forms.ValidationError( 'Must have end time', code='missing endtime' ) - end_date = cd['enddate'] + try: + end_date = cd['enddate'] + except KeyError: + raise forms.ValidationError( + 'Missing or invalid end date', + code='missing end date' + ) + + + enddatetime = datetime.datetime.combine(end_date,end_time) enddatetime = pytz.timezone(timezone_str).localize( enddatetime diff --git a/rowers/rower_rules.py b/rowers/rower_rules.py index f7e84f80..b41bf069 100644 --- a/rowers/rower_rules.py +++ b/rowers/rower_rules.py @@ -147,8 +147,10 @@ def is_protrial(user): return False + ispromember = is_promember | is_protrial + can_have_teams = ispromember | is_coach @rules.predicate @@ -202,8 +204,13 @@ def can_add_session(user): def can_plan(user): if user.is_anonymous: return False - - return user.rower.rowerplan in ['plan','coach','freecoach'] + if user.rower.rowerplan in ['plan','coach']: + return True + if user.rower.rowerplan in ['basic','pro']: + return user.rower.plantrialexpires >= datetime.date.today() + if user.rower.rowerplan == 'freecoach': + if user.rower.mycoachgroup is not None: + return len(user.rower.mycoachgroup)>=4 # checks if rower is coach of user (or is user himself) @rules.predicate diff --git a/rowers/templates/developers.html b/rowers/templates/developers.html index 51dd5ce6..50b3e667 100644 --- a/rowers/templates/developers.html +++ b/rowers/templates/developers.html @@ -194,7 +194,7 @@
The payload is application/json data and looks as follows:
- {'data':
+ {"data":
[
{"distance":5, "power": 112, "hr": 132, "pace": 145800, "spm": 11, "time": 0},
{"distance":12, "power": 221, "hr": 131, "pace": 116400, "spm": 41, "time": 2200},
diff --git a/rowers/underarmourstuff.py b/rowers/underarmourstuff.py
index 7d68d2c3..68623782 100644
--- a/rowers/underarmourstuff.py
+++ b/rowers/underarmourstuff.py
@@ -152,8 +152,8 @@ def createunderarmourworkoutdata(w):
haslatlon=1
try:
- lat = row.df[' latitude'].tolist()
- lon = row.df[' longitude'].tolist()
+ lat = row.df[' latitude']
+ lon = row.df[' longitude']
if not lat.std() and not lon.std():
haslatlon = 0
except KeyError:
diff --git a/rowers/views/apiviews.py b/rowers/views/apiviews.py
index c0290179..c6e068d8 100644
--- a/rowers/views/apiviews.py
+++ b/rowers/views/apiviews.py
@@ -96,7 +96,7 @@ def strokedatajson_v2(request,id):
try:
id = int(id)
except ValueError:
- return HttpResponse("Not a valid workout number",stauts=400)
+ return HttpResponse("Not a valid workout number",status=400)
if request.method == 'GET':
columns = ['spm','time','hr','pace','power','distance']
@@ -112,9 +112,10 @@ def strokedatajson_v2(request,id):
if request.method == 'POST':
checkdata, r = dataprep.getrowdata_db(id=row.id)
if not checkdata.empty:
- return HttpResponse("Duplicate Error",400)
+ return HttpResponse("Duplicate Error",status=400)
df = pd.DataFrame()
+ print(request.POST)
try:
df = pd.read_json(request.POST['data'],orient='split')
@@ -122,7 +123,7 @@ def strokedatajson_v2(request,id):
try:
df = pd.read_json(request.POST['strokedata'],orient='split')
except:
- return HttpResponse("No JSON object could be decoded",400)
+ return HttpResponse("No JSON object could be decoded",status=400)
df.index = df.index.astype(int)
df.sort_index(inplace=True)
@@ -134,12 +135,12 @@ def strokedatajson_v2(request,id):
try:
time = df['t']/10.
except KeyError:
- return HttpResponse("Missing time",400)
+ return HttpResponse("Missing time",status=400)
try:
spm = df['spm']
except KeyError:
- return HttpResponse("Missing spm",400)
+ return HttpResponse("Missing spm",status=400)
try:
distance = df['distance']
@@ -147,7 +148,7 @@ def strokedatajson_v2(request,id):
try:
distance = df['d']/10.
except KeyError:
- return HttpResponse("Missing distance",400)
+ return HttpResponse("Missing distance",status=400)
try:
pace = df['pace']/1.e3
@@ -155,7 +156,7 @@ def strokedatajson_v2(request,id):
try:
pace = df['p']/10.
except KeyError:
- return HttpResponse("Missing pace",400)
+ return HttpResponse("Missing pace",status=400)
@@ -320,13 +321,13 @@ def strokedatajson(request,id):
if request.method == 'POST':
checkdata,r = dataprep.getrowdata_db(id=row.id)
if not checkdata.empty:
- return HttpResponse("Duplicate Error",409)
+ return HttpResponse("Duplicate Error",status=409)
# strokedata = request.POST['strokedata']
# checking/validating and cleaning
try:
strokedata = json.loads(request.POST['strokedata'])
except:
- return HttpResponse("No JSON object could be decoded",400)
+ return HttpResponse("No JSON object could be decoded",status=400)
df = pd.DataFrame(strokedata)
df.index = df.index.astype(int)