further cleaning up
This commit is contained in:
@@ -997,44 +997,6 @@ def updatecpdata_sql(rower_id,delta,cp,table='cpdata',distance=[]):
|
|||||||
conn.close()
|
conn.close()
|
||||||
engine.dispose()
|
engine.dispose()
|
||||||
|
|
||||||
|
|
||||||
def runcpupdate(
|
|
||||||
rower,type='water',
|
|
||||||
startdate=timezone.now()-datetime.timedelta(days=365),
|
|
||||||
enddate=timezone.now()+datetime.timedelta(days=5)
|
|
||||||
):
|
|
||||||
if type == 'water':
|
|
||||||
theworkouts = Workout.objects.filter(
|
|
||||||
user=rower,rankingpiece=True,
|
|
||||||
workouttype='water',
|
|
||||||
startdatetime__gte=startdate,
|
|
||||||
startdatetime__lte=enddate
|
|
||||||
)
|
|
||||||
table = 'cpdata'
|
|
||||||
else:
|
|
||||||
theworkouts = Workout.objects.filter(
|
|
||||||
user=rower,rankingpiece=True,
|
|
||||||
workouttype__in=[
|
|
||||||
'rower',
|
|
||||||
'dynamic',
|
|
||||||
'slides'
|
|
||||||
],
|
|
||||||
startdatetime__gte=startdate,
|
|
||||||
startdatetime__lte=enddate
|
|
||||||
)
|
|
||||||
table = 'cpergdata'
|
|
||||||
|
|
||||||
theids = [w.id for w in theworkouts]
|
|
||||||
|
|
||||||
job = myqueue(
|
|
||||||
queuelow,
|
|
||||||
handle_updatecp,
|
|
||||||
rower.id,
|
|
||||||
theids,
|
|
||||||
table=table)
|
|
||||||
|
|
||||||
return job
|
|
||||||
|
|
||||||
def fetchcperg(rower,theworkouts):
|
def fetchcperg(rower,theworkouts):
|
||||||
theids = [int(w.id) for w in theworkouts]
|
theids = [int(w.id) for w in theworkouts]
|
||||||
thefilenames = [w.csvfilename for w in theworkouts]
|
thefilenames = [w.csvfilename for w in theworkouts]
|
||||||
|
|||||||
@@ -4577,18 +4577,18 @@ def interactive_cum_flex_chart2(theworkouts,promember=0,
|
|||||||
|
|
||||||
# test if we have drive energy
|
# test if we have drive energy
|
||||||
nowork = 1
|
nowork = 1
|
||||||
try:
|
try: # pragma: no cover
|
||||||
test = datadf['driveenergy'].mean()
|
test = datadf['driveenergy'].mean()
|
||||||
nowork = 0
|
nowork = 0
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
datadf['driveenergy'] = 500.
|
datadf['driveenergy'] = 500.
|
||||||
|
|
||||||
# test if we have power
|
# test if we have power
|
||||||
nopower = 1
|
nopower = 1
|
||||||
try:
|
try: # pragma: no cover
|
||||||
test = datadf['power'].mean()
|
test = datadf['power'].mean()
|
||||||
nopower = 0
|
nopower = 0
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
datadf['power'] = 50.
|
datadf['power'] = 50.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
123
rowers/tasks.py
123
rowers/tasks.py
@@ -2182,85 +2182,6 @@ def handle_updateergcp(rower_id,workoutfilenames,debug=False,**kwargs):
|
|||||||
|
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
def cp_from_workoutids(workoutids,debug=False):
|
|
||||||
columns = ['power','workoutid','time']
|
|
||||||
df = getsmallrowdata_db(columns,ids=workoutids,debug=debug)
|
|
||||||
df.dropna(inplace=True,axis=0)
|
|
||||||
|
|
||||||
if df.empty: # pragma: no cover
|
|
||||||
# change this
|
|
||||||
return 0,0,0
|
|
||||||
|
|
||||||
# df is not empty. We continue
|
|
||||||
dfgrouped = df.groupby(['workoutid'])
|
|
||||||
maxt = 1.05*df['time'].max()/1000.
|
|
||||||
|
|
||||||
logarr = datautils.getlogarr(maxt)
|
|
||||||
data = []
|
|
||||||
|
|
||||||
for id in workoutids:
|
|
||||||
cpfile = 'media/cpdata_{id}.parquet.gz'.format(id=id)
|
|
||||||
try:
|
|
||||||
df = pd.read_parquet(cpfile)
|
|
||||||
df['workout'] = str(id)
|
|
||||||
data.append(df)
|
|
||||||
except: # pragma: no cover
|
|
||||||
pass # ignore for now
|
|
||||||
|
|
||||||
if len(data) == 0: # pragma: no cover
|
|
||||||
return 0,0,0
|
|
||||||
if len(data)>1: # pragma: no cover
|
|
||||||
df = pd.concat(data,axis=0)
|
|
||||||
|
|
||||||
|
|
||||||
df = df[df['cp'] == df.groupby(['delta'])['cp'].transform('max')]
|
|
||||||
df = df.sort_values(['delta']).reset_index()
|
|
||||||
|
|
||||||
powerdf = pd.DataFrame({
|
|
||||||
'Delta':df['delta'],
|
|
||||||
'CP':df['cp'],
|
|
||||||
})
|
|
||||||
|
|
||||||
powerdf = powerdf[powerdf['CP']>0]
|
|
||||||
powerdf.dropna(axis=0,inplace=True)
|
|
||||||
powerdf.sort_values(['Delta','CP'],ascending=[1,0],inplace=True)
|
|
||||||
powerdf.drop_duplicates(subset='Delta',keep='first',inplace=True)
|
|
||||||
|
|
||||||
p1,fitt,fitpower,ratio = datautils.cpfit(powerdf)
|
|
||||||
# This is code duplication from datautils -- correct asap
|
|
||||||
fitfunc = lambda pars,x: abs(pars[0])/(1+(x/abs(pars[2]))) + abs(pars[1])/(1+(x/abs(pars[3])))
|
|
||||||
|
|
||||||
powerfourmin = fitfunc(p1,240.)
|
|
||||||
powerhour = fitfunc(p1,3600.)
|
|
||||||
|
|
||||||
# 2k power
|
|
||||||
velofourmin = (powerfourmin/2.8)**(1./3.)
|
|
||||||
dfourmin = 240.*velofourmin
|
|
||||||
dratio = 2000./dfourmin
|
|
||||||
pacefourmin = 500./velofourmin
|
|
||||||
|
|
||||||
# assume 5 sec per doubling drop
|
|
||||||
pace2k = pacefourmin + 5.*np.log10(dratio)/np.log10(2.)
|
|
||||||
velo2k = 500./pace2k
|
|
||||||
t2k = 2000./velo2k
|
|
||||||
pwr2k = fitfunc(p1,t2k)
|
|
||||||
velo2 = (pwr2k/2.8)**(1./3.)
|
|
||||||
if np.isnan(velo2) or velo2 <= 0: # pragma: no cover
|
|
||||||
velo2 = 1.0
|
|
||||||
|
|
||||||
t2 = 2000./velo2
|
|
||||||
|
|
||||||
pwr2k = fitfunc(p1,t2)
|
|
||||||
|
|
||||||
velo3 = (pwr2k/2.8)**(1./3.)
|
|
||||||
|
|
||||||
t3 = 2000./velo3
|
|
||||||
|
|
||||||
power2k = fitfunc(p1,t3)
|
|
||||||
|
|
||||||
|
|
||||||
return powerfourmin,power2k,powerhour
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.task
|
@app.task
|
||||||
@@ -2834,7 +2755,7 @@ def handle_setcp(strokesdf,filename,workoutid,debug=False,**kwargs):
|
|||||||
return 0
|
return 0
|
||||||
try:
|
try:
|
||||||
powermean = strokesdf['power'].mean()
|
powermean = strokesdf['power'].mean()
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
powermean = 0
|
powermean = 0
|
||||||
|
|
||||||
|
|
||||||
@@ -3302,7 +3223,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
'resolution': 'medium',}
|
'resolution': 'medium',}
|
||||||
url = "https://www.strava.com/api/v3/activities/"+str(stravaid)
|
url = "https://www.strava.com/api/v3/activities/"+str(stravaid)
|
||||||
response = requests.get(url,headers=headers)
|
response = requests.get(url,headers=headers)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200: # pragma: no cover
|
||||||
tstamp = time.localtime()
|
tstamp = time.localtime()
|
||||||
timestamp = time.strftime('%b-%d-%Y_%H%M', tstamp)
|
timestamp = time.strftime('%b-%d-%Y_%H%M', tstamp)
|
||||||
with open('strava_webhooks.log','a') as f:
|
with open('strava_webhooks.log','a') as f:
|
||||||
@@ -3329,7 +3250,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
startdatetime = workoutsummary['start_date']
|
startdatetime = workoutsummary['start_date']
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
startdatetime = timezone.now()
|
startdatetime = timezone.now()
|
||||||
|
|
||||||
spm = get_strava_stream(None,'cadence',stravaid,authorizationstring=authorizationstring)
|
spm = get_strava_stream(None,'cadence',stravaid,authorizationstring=authorizationstring)
|
||||||
@@ -3352,7 +3273,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
|
|
||||||
if t is not None:
|
if t is not None:
|
||||||
nr_rows = len(t)
|
nr_rows = len(t)
|
||||||
else:
|
else: # pragma: no cover
|
||||||
try:
|
try:
|
||||||
duration = int(workoutsummary['elapsed_time'])
|
duration = int(workoutsummary['elapsed_time'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -3362,22 +3283,22 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
nr_rows = len(t)
|
nr_rows = len(t)
|
||||||
|
|
||||||
|
|
||||||
if nr_rows == 0:
|
if nr_rows == 0: # pragma: no cover
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
if d is None:
|
if d is None: # pragma: no cover
|
||||||
d = 0*t
|
d = 0*t
|
||||||
|
|
||||||
if spm is None:
|
if spm is None: # pragma: no cover
|
||||||
spm = np.zeros(nr_rows)
|
spm = np.zeros(nr_rows)
|
||||||
|
|
||||||
if power is None:
|
if power is None: # pragma: no cover
|
||||||
power = np.zeros(nr_rows)
|
power = np.zeros(nr_rows)
|
||||||
|
|
||||||
if hr is None:
|
if hr is None: # pragma: no cover
|
||||||
hr = np.zeros(nr_rows)
|
hr = np.zeros(nr_rows)
|
||||||
|
|
||||||
if velo is None:
|
if velo is None: # pragma: no cover
|
||||||
velo = np.zeros(nr_rows)
|
velo = np.zeros(nr_rows)
|
||||||
|
|
||||||
dt = np.diff(t).mean()
|
dt = np.diff(t).mean()
|
||||||
@@ -3389,10 +3310,10 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
try:
|
try:
|
||||||
lat = coords[:,0]
|
lat = coords[:,0]
|
||||||
lon = coords[:,1]
|
lon = coords[:,1]
|
||||||
except IndexError:
|
except IndexError: # pragma: no cover
|
||||||
lat = np.zeros(len(t))
|
lat = np.zeros(len(t))
|
||||||
lon = np.zeros(len(t))
|
lon = np.zeros(len(t))
|
||||||
else:
|
else: # pragma: no cover
|
||||||
lat = np.zeros(len(t))
|
lat = np.zeros(len(t))
|
||||||
lon = np.zeros(len(t))
|
lon = np.zeros(len(t))
|
||||||
|
|
||||||
@@ -3419,13 +3340,13 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
workouttype = mytypes.stravamappinginv[workoutsummary['type']]
|
workouttype = mytypes.stravamappinginv[workoutsummary['type']]
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
workouttype = 'other'
|
workouttype = 'other'
|
||||||
|
|
||||||
if workouttype.lower() == 'rowing':
|
if workouttype.lower() == 'rowing': # pragma: no cover
|
||||||
workouttype = 'rower'
|
workouttype = 'rower'
|
||||||
|
|
||||||
if 'summary_polyline' in workoutsummary['map'] and workouttype=='rower':
|
if 'summary_polyline' in workoutsummary['map'] and workouttype=='rower': # pragma: no cover
|
||||||
workouttype = 'water'
|
workouttype = 'water'
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -3442,7 +3363,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
rowdatetime = iso8601.parse_date(workoutsummary['date_utc'])
|
rowdatetime = iso8601.parse_date(workoutsummary['date_utc'])
|
||||||
except KeyError:
|
except KeyError:
|
||||||
rowdatetime = iso8601.parse_date(workoutsummary['start_date'])
|
rowdatetime = iso8601.parse_date(workoutsummary['start_date'])
|
||||||
except ParseError:
|
except ParseError: # pragma: no cover
|
||||||
rowdatetime = iso8601.parse_date(workoutsummary['date'])
|
rowdatetime = iso8601.parse_date(workoutsummary['date'])
|
||||||
|
|
||||||
|
|
||||||
@@ -3454,7 +3375,7 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
title = workoutsummary['name']
|
title = workoutsummary['name']
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
title = ""
|
title = ""
|
||||||
try:
|
try:
|
||||||
t = data['comments'].split('\n', 1)[0]
|
t = data['comments'].split('\n', 1)[0]
|
||||||
@@ -3476,9 +3397,9 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
try:
|
try:
|
||||||
latcoord = strokedata.loc[:,'lat']
|
latcoord = strokedata.loc[:,'lat']
|
||||||
loncoord = strokedata.loc[:,'lon']
|
loncoord = strokedata.loc[:,'lon']
|
||||||
if latcoord.std() == 0 and loncoord.std() == 0 and workouttype == 'water':
|
if latcoord.std() == 0 and loncoord.std() == 0 and workouttype == 'water': # pragma: no cover
|
||||||
workouttype = 'rower'
|
workouttype = 'rower'
|
||||||
except:
|
except: # pragma: no cover
|
||||||
latcoord = np.zeros(nr_rows)
|
latcoord = np.zeros(nr_rows)
|
||||||
loncoord = np.zeros(nr_rows)
|
loncoord = np.zeros(nr_rows)
|
||||||
if workouttype == 'water':
|
if workouttype == 'water':
|
||||||
@@ -3488,19 +3409,19 @@ def fetch_strava_workout(stravatoken,oauth_data,stravaid,csvfilename,userid,debu
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
strokelength = strokedata.loc[:,'strokelength']
|
strokelength = strokedata.loc[:,'strokelength']
|
||||||
except:
|
except: # pragma: no cover
|
||||||
strokelength = np.zeros(nr_rows)
|
strokelength = np.zeros(nr_rows)
|
||||||
|
|
||||||
dist2 = 0.1*strokedata.loc[:,'d']
|
dist2 = 0.1*strokedata.loc[:,'d']
|
||||||
|
|
||||||
try:
|
try:
|
||||||
spm = strokedata.loc[:,'spm']
|
spm = strokedata.loc[:,'spm']
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
spm = 0*dist2
|
spm = 0*dist2
|
||||||
|
|
||||||
try:
|
try:
|
||||||
hr = strokedata.loc[:,'hr']
|
hr = strokedata.loc[:,'hr']
|
||||||
except KeyError:
|
except KeyError: # pragma: no cover
|
||||||
hr = 0*spm
|
hr = 0*spm
|
||||||
pace = strokedata.loc[:,'p']/10.
|
pace = strokedata.loc[:,'p']/10.
|
||||||
pace = np.clip(pace,0,1e4)
|
pace = np.clip(pace,0,1e4)
|
||||||
|
|||||||
@@ -517,13 +517,6 @@ class AsyncTaskTests(TestCase):
|
|||||||
res = tasks.handle_updateergcp(1,[f1])
|
res = tasks.handle_updateergcp(1,[f1])
|
||||||
self.assertEqual(res,1)
|
self.assertEqual(res,1)
|
||||||
|
|
||||||
@patch('rowers.dataprepnodjango.getsmallrowdata_db')
|
|
||||||
def test_cp_from_workoutids(self,mocked_getsmallrowdata_db):
|
|
||||||
ids = [1]
|
|
||||||
powerfourmin,power2k,powerhour = tasks.cp_from_workoutids(ids)
|
|
||||||
self.assertFalse(powerfourmin==0)
|
|
||||||
self.assertFalse(power2k==0)
|
|
||||||
self.assertFalse(powerhour==0)
|
|
||||||
|
|
||||||
@patch('rowers.dataprepnodjango.getsmallrowdata_db')
|
@patch('rowers.dataprepnodjango.getsmallrowdata_db')
|
||||||
def test_handle_updatecp(self,mocked_getsmallrowdata_db):
|
def test_handle_updatecp(self,mocked_getsmallrowdata_db):
|
||||||
|
|||||||
@@ -4415,9 +4415,6 @@ def workout_edit_view(request,id=0,message="",successmessage=""):
|
|||||||
|
|
||||||
successmessage = "Changes saved"
|
successmessage = "Changes saved"
|
||||||
|
|
||||||
if rankingpiece: # pragma: no cover
|
|
||||||
dataprep.runcpupdate(row.user,type=row.workouttype)
|
|
||||||
|
|
||||||
messages.info(request,successmessage)
|
messages.info(request,successmessage)
|
||||||
else:
|
else:
|
||||||
form = WorkoutForm(instance=row)
|
form = WorkoutForm(instance=row)
|
||||||
|
|||||||
Reference in New Issue
Block a user