alerts, analysis, api tested
This commit is contained in:
@@ -612,7 +612,7 @@ def histodata(workouts, options):
|
||||
if savedata: # pragma: no cover
|
||||
workstrokesonly = not includereststrokes
|
||||
ids = [int(w.id) for w in workouts]
|
||||
df = dataprep.getsmallrowdata_db([plotfield], ids=ids,
|
||||
df = dataprep.read_data([plotfield], ids=ids,
|
||||
workstrokesonly=workstrokesonly,
|
||||
doclean=True,
|
||||
)
|
||||
@@ -885,7 +885,7 @@ def comparisondata(workouts, options):
|
||||
'time', 'pace', 'workoutstate',
|
||||
'workoutid']
|
||||
|
||||
df = dataprep.getsmallrowdata_db(columns, ids=ids,
|
||||
df = dataprep.read_data(columns, ids=ids,
|
||||
workstrokesonly=workstrokesonly,
|
||||
doclean=True,
|
||||
)
|
||||
|
||||
@@ -68,102 +68,102 @@ def strokedataform(request, id=0):
|
||||
def api_get_dataframe(startdatetime, df):
|
||||
try:
|
||||
time = df['time']/1.e3
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
time = df['t']/10.
|
||||
except KeyError:
|
||||
return 400, "Missing time", pd.DataFrame()
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
return 400, "Missing time", pl.DataFrame()
|
||||
|
||||
try:
|
||||
spm = df['spm']
|
||||
except KeyError: # pragma: no cover
|
||||
return 400, "Missing spm", pd.DataFrame()
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
return 400, "Missing spm", pl.DataFrame()
|
||||
try:
|
||||
distance = df['distance']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
distance = df['d']/10.
|
||||
except KeyError:
|
||||
return 400, "Missing distance", pd.DataFrame()
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
return 400, "Missing distance", pl.DataFrame()
|
||||
|
||||
try:
|
||||
pace = df['pace']/1.e3
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
pace = df['p']/10.
|
||||
except KeyError:
|
||||
return 400, "Missing pace", pd.DataFrame()
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
return 400, "Missing pace", pl.DataFrame()
|
||||
|
||||
|
||||
try:
|
||||
power = df['power']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
power = 0*time
|
||||
try:
|
||||
drivelength = df['drivelength']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
drivelength = 0*time
|
||||
try:
|
||||
dragfactor = df['dragfactor']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
dragfactor = 0*time
|
||||
try:
|
||||
drivetime = df['drivetime']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
drivetime = 0*time
|
||||
try:
|
||||
strokerecoverytime = df['strokerecoverytime']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
strokerecoverytime = 0*time
|
||||
try:
|
||||
averagedriveforce = df['averagedriveforce']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
averagedriveforce = 0*time
|
||||
try:
|
||||
peakdriveforce = df['peakdriveforce']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
peakdriveforce = 0*time
|
||||
try:
|
||||
wash = df['wash']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
wash = 0*time
|
||||
try:
|
||||
catch = df['catch']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
catch = 0*time
|
||||
try:
|
||||
finish = df['finish']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
finish = 0*time
|
||||
try:
|
||||
peakforceangle = df['peakforceangle']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
peakforceangle = 0*time
|
||||
try:
|
||||
driveenergy = df['driveenergy']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
driveenergy = 60.*power/spm
|
||||
try:
|
||||
slip = df['slip']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
slip = 0*time
|
||||
try:
|
||||
lapidx = df['lapidx']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
lapidx = 0*time
|
||||
try:
|
||||
hr = df['hr']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
hr = 0*df['time']
|
||||
|
||||
try:
|
||||
latitude = df['latitude']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
latitude = 0*df['time']
|
||||
|
||||
try:
|
||||
longitude = df['longitude']
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
longitude = 0*df['time']
|
||||
|
||||
starttime = totimestamp(startdatetime)+time[0]
|
||||
@@ -171,7 +171,7 @@ def api_get_dataframe(startdatetime, df):
|
||||
|
||||
dologging('apilog.log',"(strokedatajson_v2/3 POST - data parsed)")
|
||||
|
||||
data = pd.DataFrame({'TimeStamp (sec)': unixtime,
|
||||
data = pl.DataFrame({'TimeStamp (sec)': unixtime,
|
||||
' Horizontal (meters)': distance,
|
||||
' Cadence (stokes/min)': spm,
|
||||
' HRCur (bpm)': hr,
|
||||
@@ -522,7 +522,7 @@ def strokedatajson_v3(request):
|
||||
title = request.data.get('name','')
|
||||
try:
|
||||
elapsedTime = request.data['elapsedTime']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
duration = request.data['duration']
|
||||
try:
|
||||
@@ -534,7 +534,7 @@ def strokedatajson_v3(request):
|
||||
return HttpResponse("Missing Elapsed Time", status=400)
|
||||
try:
|
||||
totalDistance = request.data['distance']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
return HttpResponse("Missing Total Distance", status=400)
|
||||
timeZone = request.data.get('timezone','UTC')
|
||||
workouttype = request.data.get('workouttype','rower')
|
||||
@@ -552,23 +552,21 @@ def strokedatajson_v3(request):
|
||||
dologging('apilog.log',totalDistance)
|
||||
dologging('apilog.log',elapsedTime)
|
||||
|
||||
df = pd.DataFrame()
|
||||
df = pl.DataFrame()
|
||||
try:
|
||||
strokes = request.data['strokes']
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
return HttpResponse("No Stroke Data in JSON", status=400)
|
||||
|
||||
try:
|
||||
df = pd.DataFrame(strokes['data'])
|
||||
except KeyError: # pragma: no cover
|
||||
df = pl.DataFrame(strokes['data'])
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
df = pd.DataFrame(request.data['strokedata'])
|
||||
df = pl.DataFrame(request.data['strokedata'])
|
||||
except:
|
||||
return HttpResponse("No JSON Object could be decoded", status=400)
|
||||
|
||||
df.index = df.index.astype(int)
|
||||
df.sort_index(inplace=True)
|
||||
|
||||
df = df.sort("time")
|
||||
status, comment, data = api_get_dataframe(startdatetime, df)
|
||||
|
||||
if status != 200: # pragma: no cover
|
||||
@@ -576,7 +574,8 @@ def strokedatajson_v3(request):
|
||||
|
||||
|
||||
csvfilename = 'media/{code}.csv.gz'.format(code=uuid4().hex[:16])
|
||||
_ = data.to_csv(csvfilename, index_label='index', compression='gzip')
|
||||
with gzip.open(csvfilename, 'w') as f:
|
||||
_ = data.write_csv(f)
|
||||
|
||||
duration = datetime.time(0,0,1)
|
||||
w = Workout(
|
||||
@@ -667,10 +666,11 @@ def strokedatajson_v2(request, id):
|
||||
|
||||
if request.method == 'GET':
|
||||
columns = ['spm', 'time', 'hr', 'pace', 'power', 'distance']
|
||||
datadf = dataprep.getsmallrowdata_db(columns, ids=[id])
|
||||
datadf = dataprep.read_data(columns, ids=[id])
|
||||
datadf = dataprep.remove_nulls_pl(datadf)
|
||||
dologging('apilog.log',request.user.username+"(strokedatajson_v2 GET)")
|
||||
|
||||
data = datadf.to_json(orient='records')
|
||||
data = datadf.write_json(row_oriented=True)
|
||||
data2 = json.loads(data)
|
||||
data2 = {"data": data2}
|
||||
|
||||
@@ -681,28 +681,27 @@ def strokedatajson_v2(request, id):
|
||||
try:
|
||||
for d in request.data['data']:
|
||||
dologging('apilog.log',json.dumps(d))
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
for d in request.data['strokedata']:
|
||||
dologging('apilog.log',json.dumps(d))
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
dologging('apilog.log','No data in request.data')
|
||||
checkdata, r = dataprep.getrowdata_db(id=row.id)
|
||||
if not checkdata.empty: # pragma: no cover
|
||||
return HttpResponse("Duplicate Error", status=409)
|
||||
|
||||
df = pd.DataFrame()
|
||||
df = pl.DataFrame()
|
||||
|
||||
try:
|
||||
df = pd.DataFrame(request.data['data'])
|
||||
except KeyError: # pragma: no cover
|
||||
df = pl.DataFrame(request.data['data'])
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
try:
|
||||
df = pd.DataFrame(request.data['strokedata'])
|
||||
df = pl.DataFrame(request.data['strokedata'])
|
||||
except:
|
||||
return HttpResponse("No JSON object could be decoded", status=400)
|
||||
|
||||
df.index = df.index.astype(int)
|
||||
df.sort_index(inplace=True)
|
||||
df = df.sort("time")
|
||||
|
||||
status, comment, data = api_get_dataframe(row.startdatetime, df)
|
||||
if status != 200: # pragma: no cover
|
||||
@@ -724,7 +723,8 @@ def strokedatajson_v2(request, id):
|
||||
row.duplicate = True
|
||||
row.save()
|
||||
|
||||
_ = data.to_csv(csvfilename+'.gz', index_label='index', compression='gzip')
|
||||
with gzip.open(csvfilename+'.gz', 'w') as f:
|
||||
_ = data.write_csv(f)
|
||||
row.csvfilename = csvfilename
|
||||
row.save()
|
||||
|
||||
@@ -796,7 +796,11 @@ def strokedatajson(request, id=0):
|
||||
if request.method == 'GET':
|
||||
# currently only returns a subset.
|
||||
columns = ['spm', 'time', 'hr', 'pace', 'power', 'distance']
|
||||
datadf = dataprep.getsmallrowdata_db(columns, ids=[id])
|
||||
|
||||
datadf = dataprep.read_data(columns, ids=[id])
|
||||
datadf = dataprep.remove_nulls_pl(datadf)
|
||||
datadf = datadf.to_pandas()
|
||||
|
||||
dologging("apilog.log",request.user.username+"(strokedatajson GET) ")
|
||||
return JSONResponse(datadf)
|
||||
|
||||
@@ -817,14 +821,13 @@ def strokedatajson(request, id=0):
|
||||
return HttpResponse("No JSON object could be decoded", status=400)
|
||||
|
||||
try:
|
||||
df = pd.DataFrame(strokedata)
|
||||
df = pl.DataFrame(strokedata)
|
||||
except ValueError: # pragma: no cover
|
||||
return HttpResponse("Arrays must all be same length", status=400)
|
||||
df.index = df.index.astype(int)
|
||||
df.sort_index(inplace=True)
|
||||
df = df.sort("time")
|
||||
try:
|
||||
time = df['time']/1.e3
|
||||
except KeyError: # pragma: no cover
|
||||
except (KeyError, ColumnNotFoundError): # pragma: no cover
|
||||
return HttpResponse("There must be time values", status=400)
|
||||
aantal = len(time)
|
||||
pace = df['pace']/1.e3
|
||||
@@ -863,7 +866,7 @@ def strokedatajson(request, id=0):
|
||||
|
||||
dologging("apilog.log",request.user.username+"(POST)")
|
||||
|
||||
data = pd.DataFrame({'TimeStamp (sec)': unixtime,
|
||||
data = pl.DataFrame({'TimeStamp (sec)': unixtime,
|
||||
' Horizontal (meters)': distance,
|
||||
' Cadence (stokes/min)': spm,
|
||||
' HRCur (bpm)': hr,
|
||||
@@ -890,8 +893,8 @@ def strokedatajson(request, id=0):
|
||||
timestr = row.startdatetime.strftime("%Y%m%d-%H%M%S")
|
||||
csvfilename = 'media/Import_'+timestr+'.csv'
|
||||
|
||||
res = data.to_csv(csvfilename+'.gz', index_label='index',
|
||||
compression='gzip')
|
||||
with gzip.open(csvfilename+'.gz','w') as f:
|
||||
res = data.write_csv(f)
|
||||
row.csvfilename = csvfilename
|
||||
row.save()
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ from rowers.utils import (
|
||||
from rowers.celery import result as celery_result
|
||||
from rowers.interactiveplots import *
|
||||
from scipy.interpolate import griddata
|
||||
from rowers.dataprep import getsmallrowdata_db, read_data
|
||||
from rowers.dataprep import getsmallrowdata_pd, read_data
|
||||
from rowers.dataprep import timedeltaconv
|
||||
from scipy.special import lambertw
|
||||
from io import BytesIO
|
||||
@@ -35,6 +35,7 @@ import threading
|
||||
import redis
|
||||
import colorsys
|
||||
import re
|
||||
import gzip
|
||||
import zipfile
|
||||
import bleach
|
||||
import arrow
|
||||
@@ -1345,9 +1346,9 @@ def trydf(df, aantal, column): # pragma: no cover
|
||||
s = df[column]
|
||||
if len(s) != aantal:
|
||||
return np.zeros(aantal)
|
||||
if not np.issubdtype(s, np.number):
|
||||
if not s.dtype in pl.NUMERIC_DTYPES:
|
||||
return np.zeros(aantal)
|
||||
except KeyError:
|
||||
except (KeyError, ColumnNotFoundError):
|
||||
s = np.zeros(aantal)
|
||||
|
||||
return s
|
||||
|
||||
Reference in New Issue
Block a user