Private
Public Access
1
0

Merge branch 'feature/editentry' into develop

This commit is contained in:
Sander Roosendaal
2020-10-16 18:07:10 +02:00
6 changed files with 79 additions and 47 deletions

View File

@@ -170,6 +170,7 @@ pytest-django==3.4.8
pytest-forked==1.0.2
pytest-runner==4.4
pytest-sugar==0.9.2
pytest-timeout==1.4.2
pytest-xdist==1.27.0
python-dateutil==2.8.0
python-memcached==1.59

View File

@@ -60,7 +60,7 @@ def updatecp(delta,cpvalues,r,workouttype='water'):
return 1
def cpfit(powerdf):
def cpfit(powerdf,fraclimit=0.0001,nmax=1000):
# Fit the data to thee parameter CP model
fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
errfunc = lambda pars,x,y: fitfunc(pars,x)-y
@@ -96,11 +96,13 @@ def cpfit(powerdf):
frac = abs(ddmin)/fitpoints.mean()
while frac>0.0001:
counter = 0
while frac>fraclimit and counter<nmax:
fitpoints = fitpoints*(fitpoints.mean()-ddmin)/(fitpoints.mean())
dd = fitpoints-theavpower
ddmin = dd.min()
frac = abs(ddmin)/fitpoints.mean()
counter += 1
ratio = fitpoints.mean()/fitpoints0.mean()
@@ -111,7 +113,7 @@ def getlogarr(maxt):
#print(maxlog10,round(maxlog10))
aantal = 10*round(maxlog10)
logarr = np.arange(aantal+1)/10.
res = []
for la in logarr:
try:

View File

@@ -1064,6 +1064,26 @@ def race_can_submit(r,race):
return False
def race_can_editentry(r,race):
start_time = race.start_time
start_date = race.startdate
startdatetime = datetime.combine(start_date,start_time)
startdatetime = pytz.timezone(race.timezone).localize(
startdatetime
)
evaluation_closure = race.evaluation_closure
if timezone.now() < evaluation_closure:
is_complete,has_registered = race_rower_status(r,race)
if is_complete == False:
return True
else:
return False
else:
return False
return False
def race_can_resubmit(r,race):
records = VirtualRaceResult.objects.filter(
userid=r.id,

View File

@@ -158,6 +158,8 @@ class BoxPlotTest(TestCase):
options['userid'] = 1
options['plotfield'] = 'spm'
options['rankingonly'] = False
options['cpfit'] = 'data'
options['piece'] = 4
session = self.c.session
session['options'] = options
@@ -1065,6 +1067,8 @@ class WorkoutStatsTestNew(TestCase):
'spmmax':55,
'workmin':0,
'workmax':1500,
'cpfit':'data',
'piece': 4,
'includereststrokes':False,
'modality':'all',
'waterboattype':['1x','2x','4x'],

View File

@@ -4,6 +4,7 @@ from __future__ import print_function
from __future__ import unicode_literals
from .statements import *
from django.db import transaction
nu = datetime.datetime.now()
@@ -144,57 +145,59 @@ class WorkoutViewTest(TestCase):
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
@pytest.mark.django_db(transaction=True)
def test_joins(self, mocked_sqlalchemy, mocked_getsmallrowdata_db):
login = self.c.login(username=self.u.username, password=self.password)
self.assertTrue(login)
with transaction.atomic():
login = self.c.login(username=self.u.username, password=self.password)
self.assertTrue(login)
url = reverse('workouts_join_select')
response = self.c.get(url)
self.assertEqual(response.status_code,200)
url = reverse('workouts_join_select')
response = self.c.get(url)
self.assertEqual(response.status_code,200)
d1 = self.werg1.date-datetime.timedelta(days=2)
d2 = self.werg2.date+datetime.timedelta(days=2)
d1 = self.werg1.date-datetime.timedelta(days=2)
d2 = self.werg2.date+datetime.timedelta(days=2)
date_form_data = {
'startdate': d1.strftime('%Y-%m%d'),
'enddate': d2.strftime('%Y-%m%d')
}
date_form_data = {
'startdate': d1.strftime('%Y-%m%d'),
'enddate': d2.strftime('%Y-%m%d')
}
response = self.c.post(url,date_form_data)
self.assertEqual(response.status_code,200)
response = self.c.post(url,date_form_data)
self.assertEqual(response.status_code,200)
url = reverse('workouts_join_view')
url = reverse('workouts_join_view')
response = self.c.get(url,follow=True)
self.assertEqual(response.status_code,200)
response = self.c.get(url,follow=True)
self.assertEqual(response.status_code,200)
expected_url = reverse('workouts_join_select')
self.assertRedirects(response,
expected_url = reverse('workouts_join_select')
self.assertRedirects(response,
expected_url=expected_url,
status_code=302,
target_status_code=200)
form_data = {
'workout_name': 'joined',
'set_private': False,
'workouts': [str(self.werg1.id),str(self.werg2.id),str(self.werg3.id)],
form_data = {
'workout_name': 'joined',
'set_private': False,
'workouts': [str(self.werg1.id),str(self.werg2.id),str(self.werg3.id)],
}
form = WorkoutMultipleCompareForm(form_data)
self.assertTrue(form.is_valid())
form = WorkoutMultipleCompareForm(form_data)
self.assertTrue(form.is_valid())
form = WorkoutJoinParamForm(form_data)
self.assertTrue(form.is_valid())
form = WorkoutJoinParamForm(form_data)
self.assertTrue(form.is_valid())
response = self.c.post(url,form_data,follow=True)
self.assertEqual(response.status_code,200)
response = self.c.post(url,form_data,follow=True)
self.assertEqual(response.status_code,200)
expected_url = reverse(self.r.defaultlandingpage,
expected_url = reverse(self.r.defaultlandingpage,
kwargs = {
'id':encoder.encode_hex(12)
})
self.assertRedirects(response,
self.assertRedirects(response,
expected_url=expected_url,
status_code=302,target_status_code=200)
@@ -485,27 +488,29 @@ class WorkoutViewTest(TestCase):
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getsmallrowdata_db')
@patch('rowers.dataprep.getrowdata_db',side_effect=mocked_getrowdata_db)
@pytest.mark.django_db(transaction=True)
def test_workout_split(self, mocked_sqlalchemy, mocked_getsmallrowdata_db,
mocked_getrowdata_db):
login = self.c.login(username=self.u.username, password=self.password)
self.assertTrue(login)
with transaction.atomic():
login = self.c.login(username=self.u.username, password=self.password)
self.assertTrue(login)
url = reverse('workout_split_view',kwargs={'id':encoder.encode_hex(self.werg1.id)})
url = reverse('workout_split_view',kwargs={'id':encoder.encode_hex(self.werg1.id)})
response = self.c.get(url)
self.assertEqual(response.status_code,200)
response = self.c.get(url)
self.assertEqual(response.status_code,200)
form_data = {
'splittime': '2:00',
'splitmode': ['keep original','keep first','keep second']
}
form_data = {
'splittime': '2:00',
'splitmode': ['keep original','keep first','keep second']
}
form = WorkoutSplitForm(form_data)
form = WorkoutSplitForm(form_data)
self.assertTrue(form.is_valid())
self.assertTrue(form.is_valid())
response = self.c.post(url, form_data,follow=True)
self.assertEqual(response.status_code,200)
response = self.c.post(url, form_data,follow=True)
self.assertEqual(response.status_code,200)
@patch('rowers.dataprep.create_engine')
@patch('rowers.dataprep.getrowdata_db',side_effect=mocked_getrowdata_db)

View File

@@ -3380,7 +3380,7 @@ def virtualevent_entry_edit_view(request,id=0,entryid=0):
except VirtualRace.DoesNotExist:
raise Http404("Virtual Challenge does not exist")
if not race_can_submit(r,race):
if not race_can_editentry(r,race):
messages.error(request,'You cannot change your entries for this challenge')
url = reverse('virtualevent_view',
kwargs={'id':race.id}