Merge branch 'release/v11.06'
This commit is contained in:
@@ -15,6 +15,7 @@ from rowingdata import rowingdata as rrdata
|
||||
|
||||
from rowingdata import rower as rrower
|
||||
|
||||
import yaml
|
||||
import shutil
|
||||
from shutil import copyfile
|
||||
|
||||
@@ -1469,8 +1470,9 @@ def new_workout_from_file(r, f2,
|
||||
title='Workout',
|
||||
boattype='1x',
|
||||
makeprivate=False,
|
||||
notes=''):
|
||||
message = None
|
||||
notes='',
|
||||
uploadoptions={'boattype':'1x','workouttype':'rower'}):
|
||||
message = ""
|
||||
impeller = False
|
||||
try:
|
||||
fileformat = get_file_type(f2)
|
||||
@@ -1483,18 +1485,21 @@ def new_workout_from_file(r, f2,
|
||||
oarlength = 2.89
|
||||
inboard = 0.88
|
||||
if len(fileformat) == 3 and fileformat[0] == 'zip':
|
||||
uploadoptions['fromuploadform'] = True
|
||||
bodyyaml = yaml.safe_dump(uploadoptions,default_flow_style=False)
|
||||
f_to_be_deleted = f2
|
||||
impeller = False
|
||||
workoutsbox = Mailbox.objects.filter(name='workouts')[0]
|
||||
msg = Message(mailbox=workoutsbox,
|
||||
from_header=r.user.email,
|
||||
subject = title)
|
||||
subject = title,body=bodyyaml)
|
||||
msg.save()
|
||||
f3 = 'media/mailbox_attachments/'+f2[6:]
|
||||
copyfile(f2,f3)
|
||||
f3 = f3[6:]
|
||||
a = MessageAttachment(message=msg,document=f3)
|
||||
a.save()
|
||||
message = "Zip file was stored for offline processing"
|
||||
|
||||
return -1, message, f2
|
||||
|
||||
|
||||
@@ -83,6 +83,8 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False):
|
||||
users = User.objects.filter(username=uploadoptions['username'])
|
||||
if len(users)==1:
|
||||
therower = users[0].rower
|
||||
elif uploadoptions['username'] == '':
|
||||
therower = rower
|
||||
else:
|
||||
return 0
|
||||
else:
|
||||
@@ -94,15 +96,10 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False):
|
||||
uploadoptions['file'] = 'media/'+filename
|
||||
uploadoptions['title'] = title
|
||||
|
||||
try:
|
||||
print("Stravaid ",uploadoptions['stravaid'])
|
||||
except KeyError:
|
||||
pass
|
||||
|
||||
|
||||
url = settings.UPLOAD_SERVICE_URL
|
||||
if not testing:
|
||||
response = requests.post(url,data=uploadoptions)
|
||||
# print("Upload response status code",response.status_code, response.json())
|
||||
if response.status_code == 200:
|
||||
response_json = response.json()
|
||||
workoutid = [int(response_json['id'])]
|
||||
@@ -137,21 +134,6 @@ def processattachment(rower, fileobj, title, uploadoptions,testing=False):
|
||||
if testing:
|
||||
print('Workout id = {workoutid}'.format(workoutid=workoutid))
|
||||
|
||||
# if workoutid[0]:
|
||||
# link = settings.SITE_URL+reverse(
|
||||
# therower.defaultlandingpage,
|
||||
# kwargs = {
|
||||
# 'id':encoder.encode_hex(workoutid[0]),
|
||||
# }
|
||||
# )
|
||||
#
|
||||
# if not testing:
|
||||
# if therower.getemailnotifications and not therower.emailbounced:
|
||||
# email_sent = send_confirm(
|
||||
# therower.user, title, link,
|
||||
# uploadoptions
|
||||
# )
|
||||
|
||||
return workoutid
|
||||
|
||||
def get_from_address(message):
|
||||
@@ -258,23 +240,19 @@ class Command(BaseCommand):
|
||||
attachment.delete()
|
||||
for rower in rowers:
|
||||
if 'zip' in extension:
|
||||
try:
|
||||
zip_file = zipfile.ZipFile(attachment.document)
|
||||
for id,filename in enumerate(zip_file.namelist()):
|
||||
datafile = zip_file.extract(
|
||||
filename, path='media/')
|
||||
if id>0:
|
||||
title = name+' ('+str(id+1)+')'
|
||||
else:
|
||||
title = name
|
||||
zip_file = zipfile.ZipFile(attachment.document)
|
||||
for id,filename in enumerate(zip_file.namelist()):
|
||||
datafile = zip_file.extract(
|
||||
filename, path='media/')
|
||||
if id>0:
|
||||
title = name+' ('+str(id+1)+')'
|
||||
else:
|
||||
title = name
|
||||
workoutid = processattachment(
|
||||
rower, datafile, title, uploadoptions,
|
||||
testing=testing
|
||||
)
|
||||
|
||||
workoutid = processattachment(
|
||||
rower, datafile, title, uploadoptions,
|
||||
testing=testing
|
||||
)
|
||||
except:
|
||||
print("Bad ZIP file")
|
||||
print(attachment.document.name)
|
||||
else:
|
||||
# move attachment and make workout
|
||||
if testing:
|
||||
|
||||
@@ -352,7 +352,10 @@ def getboolean(uploadoptions,value,key):
|
||||
return uploadoptions
|
||||
|
||||
def upload_options(body):
|
||||
uploadoptions = {}
|
||||
uploadoptions = {
|
||||
'boattype':'1x',
|
||||
'workouttype': 'rower',
|
||||
}
|
||||
body = cleanbody(body)
|
||||
try:
|
||||
yml = (yaml.safe_load(body))
|
||||
@@ -506,7 +509,7 @@ def make_private(w,options):
|
||||
|
||||
def do_sync(w,options):
|
||||
try:
|
||||
if options['stravaid'] != 0:
|
||||
if options['stravaid'] != 0 and options['stravaid'] != '':
|
||||
w.uploadedtostrava = options['stravaid']
|
||||
options['upload_to_Strava'] = False
|
||||
w.save()
|
||||
|
||||
@@ -19,7 +19,7 @@ def strokedataform(request,id=0):
|
||||
w = Workout.objects.get(id=id)
|
||||
except Workout.DoesNotExist:
|
||||
raise Http404("Workout doesn't exist")
|
||||
|
||||
|
||||
if request.method == 'GET':
|
||||
form = StrokeDataForm()
|
||||
return render(request, 'strokedata_form.html',
|
||||
@@ -52,7 +52,9 @@ def strokedatajson(request,id):
|
||||
POST: Add Stroke data to workout
|
||||
GET: Get stroke data of workout
|
||||
"""
|
||||
row = get_workout_permitted(request.user,id)
|
||||
row = get_object_or_404(Workout,pk=id)
|
||||
if row.user != request.user.rower:
|
||||
raise PermissionDenied("You have no access to this workout")
|
||||
|
||||
try:
|
||||
id = int(id)
|
||||
@@ -61,7 +63,7 @@ def strokedatajson(request,id):
|
||||
|
||||
|
||||
if request.method == 'GET':
|
||||
# currently only returns a subset.
|
||||
# currently only returns a subset.
|
||||
columns = ['spm','time','hr','pace','power','distance']
|
||||
datadf = dataprep.getsmallrowdata_db(columns,ids=[id])
|
||||
with open('media/apilog.log','a') as logfile:
|
||||
@@ -95,7 +97,7 @@ def strokedatajson(request,id):
|
||||
distance = df['distance']
|
||||
if len(distance) != aantal:
|
||||
return HttpResponse("Distance array has incorrect length",status=400)
|
||||
|
||||
|
||||
spm = df['spm']
|
||||
if len(spm) != aantal:
|
||||
return HttpResponse("SPM array has incorrect length",status=400)
|
||||
@@ -103,7 +105,7 @@ def strokedatajson(request,id):
|
||||
res = dataprep.testdata(time,distance,pace,spm)
|
||||
if not res:
|
||||
return HttpResponse("Data are not numerical",status=400)
|
||||
|
||||
|
||||
power = trydf(df,aantal,'power')
|
||||
drivelength = trydf(df,aantal,'drivelength')
|
||||
drivespeed = trydf(df,aantal,'drivespeed')
|
||||
@@ -127,7 +129,7 @@ def strokedatajson(request,id):
|
||||
with open('media/apilog.log','a') as logfile:
|
||||
logfile.write(str(starttime)+": ")
|
||||
logfile.write(request.user.username+"(POST) \r\n")
|
||||
|
||||
|
||||
data = pd.DataFrame({'TimeStamp (sec)':unixtime,
|
||||
' Horizontal (meters)': distance,
|
||||
' Cadence (stokes/min)':spm,
|
||||
@@ -155,7 +157,7 @@ def strokedatajson(request,id):
|
||||
|
||||
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')
|
||||
row.csvfilename = csvfilename
|
||||
@@ -169,14 +171,14 @@ def strokedatajson(request,id):
|
||||
ftp = float(r.ftp)
|
||||
if row.workouttype in mytypes.otwtypes:
|
||||
ftp = ftp*(100.-r.otwslack)/100.
|
||||
|
||||
|
||||
rr = rrower(hrmax=r.max,hrut2=r.ut2,
|
||||
hrut1=r.ut1,hrat=r.at,
|
||||
hrtr=r.tr,hran=r.an,ftp=ftp,
|
||||
powerperc=powerperc,powerzones=r.powerzones)
|
||||
rowdata = rdata(row.csvfilename,rower=rr).df
|
||||
|
||||
datadf = dataprep.dataprep(rowdata,id=row.id,bands=True,barchart=True,otwpower=True,empower=True)
|
||||
|
||||
datadf = dataprep.dataprep(rowdata,id=row.id,bands=True,barchart=True,otwpower=True,empower=True)
|
||||
# mangling
|
||||
|
||||
#
|
||||
|
||||
@@ -82,7 +82,7 @@ def workout_strava_upload_view(request,id=0):
|
||||
return HttpResponseRedirect("/rowers/me/stravaauthorize/")
|
||||
else:
|
||||
# ready to upload. Hurray
|
||||
w = get_workout_permitted(request.user,id)
|
||||
w = get_workout_by_opaqueid(request,id)
|
||||
r = w.user
|
||||
|
||||
try:
|
||||
|
||||
@@ -4406,7 +4406,6 @@ def workout_upload_api(request):
|
||||
except (KeyError,JSONDecodeError):
|
||||
post_data = request.POST
|
||||
|
||||
|
||||
# only allow local host
|
||||
hostt = request.get_host().split(':')
|
||||
if hostt[0] not in ['localhost','127.0.0.1','dev.rowsandall.com','rowsandall.com']:
|
||||
@@ -4491,11 +4490,18 @@ def workout_upload_api(request):
|
||||
makeprivate=makeprivate,
|
||||
title = t,
|
||||
notes=notes,
|
||||
uploadoptions=post_data,
|
||||
)
|
||||
|
||||
if id <= 0:
|
||||
message = {'status':'false','message':'unable to process file'+message}
|
||||
if id == 0:
|
||||
if message is not None:
|
||||
message = {'status':'false','message':'unable to process file'+message}
|
||||
else:
|
||||
message = {'status': 'false', 'message': 'unable to process file'}
|
||||
return JSONResponse(status=400,data=message)
|
||||
if id == -1:
|
||||
message = {'status': 'true', 'message':message}
|
||||
return JSONResponse(status=200,data=message)
|
||||
|
||||
w = Workout.objects.get(id=id)
|
||||
if len(stravaid)>0:
|
||||
|
||||
Reference in New Issue
Block a user