Private
Public Access
1
0

fit file download ok

This commit is contained in:
Sander Roosendaal
2021-02-24 19:49:03 +01:00
parent 197d6c9464
commit 8496178eee
6 changed files with 77 additions and 26 deletions

View File

@@ -2244,6 +2244,9 @@ class PlannedSession(models.Model):
max_length=150,
verbose_name='Session Type')
sessionsport = models.CharField(default='water',choices=mytypes.workouttypes,
max_length=50,verbose_name='Sport')
sessionvalue = models.IntegerField(default=60,verbose_name='Value')
approximate_distance = models.IntegerField(default=10000,verbose_name='Approximate Distance')
@@ -2322,12 +2325,14 @@ class PlannedSession(models.Model):
"You must be a Self-Coach user or higher to create a planned session"
)
# interval string
if self.interval_string:
dct = trainingparser.parsetodict(interval_string)
dct = trainingparser.parsetodict(self.interval_string)
dct = [item for item in dct if item['value'] != 0]
dct = trainingparser.tofitdict(dct)
ps.steps_json = json.dumps(dct)
self.steps_json = json.dumps(dct)
@@ -2370,6 +2375,7 @@ class PlannedSession(models.Model):
#super(PlannedSession,self).save(*args, **kwargs)
# read file
if self.fitfile:
if self.fitfile.name == 'False':
@@ -2379,8 +2385,12 @@ class PlannedSession(models.Model):
self.steps_json = json.dumps(steps)
if self.steps_json and not self.fitfile:
fitfile = steps_write_fit(settings.MEDIA_ROOT+'/session_'+str(self.id)+'.fit',json.loads(self.steps_json))
filename = settings.MEDIA_ROOT+'/session'+encoder.encode_hex(self.id)+'.fit'
steps = json.loads(self.steps_json)
steps['filename'] = filename
fitfile = steps_write_fit(steps)
self.fitfile = fitfile
self.steps_json = json.dumps(steps)
super(PlannedSession,self).save(*args, **kwargs)
@@ -2532,6 +2542,7 @@ class PlannedSessionForm(ModelForm):
'enddate',
'preferreddate',
'name',
'sessionsport',
'sessiontype',
'sessionmode',
'criterium',

View File

@@ -81,7 +81,6 @@ from rowers.tasks import (
from rowers.utils import totaltime_sec_to_string
def step_to_string(step):
target_dict = {
'heart_rate': {
'name':'Heart Rate between',
@@ -136,24 +135,30 @@ def step_to_string(step):
t = dd['name']
l = ''
h = ''
if dd['low']:
v = step[dd['low']]
if value == 'heart_rate':
if v<100:
v = '{v} \%'.format(v=v)
else:
v = v-100
v = '{v}'.format(v=v)
l = '{v}'.format(v=v)
if dd['high']:
v = step[dd['high']]
if value == 'heart_rate':
if v<100:
v = '{v} \%'.format(v=v)
else:
v = v-100
v = '{v}'.format(v=v)
h = 'and {v}'.format(v=v)
try:
if dd['low']:
v = step[dd['low']]
if value == 'heart_rate':
if v<100:
v = '{v} \%'.format(v=v)
else:
v = v-100
v = '{v}'.format(v=v)
l = '{v}'.format(v=v)
except KeyError:
pass
try:
if dd['high']:
v = step[dd['high']]
if value == 'heart_rate':
if v<100:
v = '{v} \%'.format(v=v)
else:
v = v-100
v = '{v}'.format(v=v)
h = 'and {v}'.format(v=v)
except KeyError:
pass
target = '{t} {l} {h}'.format(
t = t,
@@ -1137,9 +1142,12 @@ def update_plannedsession(ps,cd):
if cd['fitfile']:
f = cd['fitfile']
filename, path_and_filename = handle_uploaded_file(f)
ps.fitfile.name = filename
try:
filename, path_and_filename = handle_uploaded_file(f)
ps.fitfile.name = filename
ps.steps_json = ''
except FileNotFoundError:
pass
ps.save()

View File

@@ -562,7 +562,7 @@ def steps_read_fit(filename,name='',sport='Custom'):
return d
def steps_write_fit(filename,steps):
def steps_write_fit(steps):
authorizationstring = 'Bearer '+settings.WORKOUTS_FIT_TOKEN
url = settings.WORKOUTS_FIT_URL+"/tofit"
headers = {'Authorization':authorizationstring}

View File

@@ -9,6 +9,32 @@ from rq import Queue
from redis import Redis
from rq.job import Job
@login_required()
def download_fit(request,filename=''):
r = getrower(request.user)
pss = PlannedSession.objects.filter(fitfile=filename)
print(filename,pss)
if len(pss) != 1:
raise Http404("Could not find the required file")
ps = pss[0]
owns = False
if ps.manager == request.user or request.user.rower in ps.rower.all():
owns = True
if not owns:
raise PermissionDenied("You are not allowed to download this file")
fitfile = ps.fitfile
response = HttpResponse(fitfile)
response['Content-Disposition'] = 'attachment; filename="%s"' % filename
response['Content-Type'] = 'application/octet-stream'
return response
@login_required()
def failed_queue_view(request):
if not request.user.is_staff:

View File

@@ -435,6 +435,7 @@ def plannedsession_create_view(request,
sessiontype = cd['sessiontype']
sessionmode = cd['sessionmode']
criterium = cd['criterium']
sessionsport = cd['sessionsport']
sessionvalue = cd['sessionvalue']
sessionunit = cd['sessionunit']
comment = cd['comment']
@@ -461,6 +462,7 @@ def plannedsession_create_view(request,
sessionmode=sessionmode,
sessionvalue=sessionvalue,
sessionunit=sessionunit,
sessionsport=sessionsport,
comment=comment,
criterium=criterium,
interval_string=interval_string,
@@ -761,6 +763,7 @@ def plannedsession_teamcreate_view(request,
criterium = cd['criterium']
sessionvalue = cd['sessionvalue']
sessionunit = cd['sessionunit']
sessionsport = cd['sessionsport']
comment = cd['comment']
course = cd['course']
name = cd['name']
@@ -780,6 +783,7 @@ def plannedsession_teamcreate_view(request,
preferreddate=preferreddate,
sessiontype=sessiontype,
sessionmode=sessionmode,
sessionsport=sessionsport,
sessionvalue=sessionvalue,
sessionunit=sessionunit,
comment=comment,
@@ -2125,6 +2129,7 @@ def plannedsession_view(request,id=0,userid=0):
'psdict': psdict,
'attrs':[
'name','startdate','enddate','preferreddate',
'sessionsport',
'sessiontype',
'sessionmode','criterium',
'sessionvalue','sessionunit','comment',