Private
Public Access
1
0

all a bit neater and now working

This commit is contained in:
Sander Roosendaal
2021-03-02 14:06:15 +01:00
parent c57500fa35
commit 04f823578f
2 changed files with 34 additions and 133 deletions

View File

@@ -3,7 +3,7 @@ from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import unicode_literals, absolute_import
import uuid
from django.utils.encoding import python_2_unicode_compatible
from django.db import models,IntegrityError
@@ -119,6 +119,12 @@ class UserFullnameChoiceField(forms.ModelChoiceField):
class PlannedSessionStepField(models.TextField):
pass
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return filename
# return os.path.join(settings.MEDIA_ROOT, filename)
# model for configurable template field
class TemplateListField(models.TextField):
def __init__(self, *args, **kwargs):
@@ -2311,7 +2317,7 @@ class PlannedSession(models.Model):
is_template = models.BooleanField(default=False)
fitfile = models.FileField(blank=True,null=True)
fitfile = models.FileField(upload_to=get_file_path,blank=True,null=True)
#steps_json = models.TextField(max_length=10000,default=None,blank=True,null=True)
steps = PlannedSessionStepField(default={},null=True)
interval_string = models.TextField(max_length=1000,default=None,blank=True,null=True,
@@ -2354,8 +2360,6 @@ 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(self.interval_string)
@@ -2363,9 +2367,6 @@ class PlannedSession(models.Model):
dct = trainingparser.tofitdict(dct)
self.steps = dct
# sort units
if self.sessionmode == 'distance':
if self.sessionunit not in ['m','km']:
@@ -2403,42 +2404,19 @@ class PlannedSession(models.Model):
self.preferreddate = self.startdate
#super(PlannedSession,self).save(*args, **kwargs)
# read file
if self.fitfile:
if self.fitfile.name == 'False':
self.fitfile = None
else:
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
self.steps = steps
steps = steps_read_fit(os.path.join(settings.MEDIA_ROOT,self.fitfile.name))
self.steps = steps
if self.steps and not self.fitfile:
if self.pk is not None:
filename = 'session'+encoder.encode_hex(self.pk)+'.fit'
else:
file = tempfile.NamedTemporaryFile(mode='w+b',suffix='.fit',dir=settings.MEDIA_ROOT)
filename = file
filename = 'aap.fit'
filename = get_file_path(self,filename)
steps = self.steps
try:
steps['filename'] = settings.MEDIA_ROOT+'/'+filename
except TypeError:
try:
steps['filename'] = filename.name
except TypeError:
steps = json.loads(steps)
steps['filename'] = filename.name
self.steps = steps
steps['filename'] = os.path.join(settings.MEDIA_ROOT,filename)
fitfile = steps_write_fit(steps)
filelist = fitfile.split('/media/')
self.fitfile.name = filelist[-1]
self.fitfile.name = filename
self.steps = steps
print(self.fitfile.name,filename)
# calculate approximate distance
if self.steps:
@@ -2454,11 +2432,13 @@ class PlannedSession(models.Model):
super(PlannedSession,self).save(*args, **kwargs)
#@receiver(models.signals.pre_delete,sender=PlannedSession)
#def auto_delete_fitfile_on_delete(send, instance, **kwargs):
# if instance.fitfile:
# if os.path.isfile(instance.fitfile):
# os.remove(instance.fitfile)
@receiver(models.signals.post_delete,sender=PlannedSession)
def auto_delete_fitfile_on_delete(sender, instance, **kwargs):
# delete CSV file
if instance.fitfile:
filename = os.path.join(settings.MEDIA_ROOT,instance.fitfile.name)
if os.path.isfile(filename):
os.remove(filename)
from django.core.validators import RegexValidator,validate_email

View File

@@ -431,57 +431,18 @@ def plannedsession_create_view(request,
if request.method == 'POST':
sessioncreateform = PlannedSessionForm(request.POST, request.FILES)
if sessioncreateform.is_valid():
cd = sessioncreateform.cleaned_data
startdate = cd['startdate']
enddate = cd['enddate']
preferreddate = cd['preferreddate']
sessiontype = cd['sessiontype']
sessionmode = cd['sessionmode']
criterium = cd['criterium']
sessionsport = cd['sessionsport']
sessionvalue = cd['sessionvalue']
sessionunit = cd['sessionunit']
comment = cd['comment']
course = cd['course']
name = cd['name']
interval_string = cd['interval_string']
fitfile = cd['fitfile']
if sessionunit == 'min':
sessionmode = 'time'
elif sessionunit in ['km','m']:
sessionmode = 'distance'
ps = PlannedSession(
name=name,
startdate=startdate,
enddate=enddate,
preferreddate=preferreddate,
course=course,
sessiontype=sessiontype,
sessionmode=sessionmode,
sessionvalue=sessionvalue,
sessionunit=sessionunit,
sessionsport=sessionsport,
comment=comment,
criterium=criterium,
interval_string=interval_string,
manager=request.user)
ps = sessioncreateform.save(commit=False)
ps.manager = request.user
ps.save()
if sessioncreateform.cleaned_data['fitfile']:
f = sessioncreateform.cleaned_data['fitfile']
filename, path_and_filename = handle_uploaded_file(f)
ps.fitfile = filename
ps.save()
add_rower_session(r,ps)
request.session['fstartdate'] = str(arrow.get(startdate))
request.session['fenddate'] = str(arrow.get(enddate))
request.session['fprefdate'] = str(arrow.get(preferreddate))
request.session['fstartdate'] = str(arrow.get(ps.startdate))
request.session['fenddate'] = str(arrow.get(ps.enddate))
request.session['fprefdate'] = str(arrow.get(ps.preferreddate))
else:
if 'fstartdate' in request.session:
@@ -765,50 +726,10 @@ def plannedsession_teamcreate_view(request,
if sessioncreateform.is_valid() and sessionteamselectform.is_valid():
cd = sessioncreateform.cleaned_data
startdate = cd['startdate']
enddate = cd['enddate']
preferreddate = cd['preferreddate']
sessiontype = cd['sessiontype']
sessionmode = cd['sessionmode']
criterium = cd['criterium']
sessionvalue = cd['sessionvalue']
sessionunit = cd['sessionunit']
sessionsport = cd['sessionsport']
comment = cd['comment']
course = cd['course']
name = cd['name']
interval_string = cd['interval_string']
fitfile = cd['fitfile']
if sessionunit == 'min':
sessionmode = 'time'
elif sessionunit in ['km','m']:
sessionmode = 'distance'
ps = PlannedSession(
name=name,
startdate=startdate,
enddate=enddate,
preferreddate=preferreddate,
sessiontype=sessiontype,
sessionmode=sessionmode,
sessionsport=sessionsport,
sessionvalue=sessionvalue,
sessionunit=sessionunit,
comment=comment,
criterium=criterium,
course=course,
interval_string=interval_string,
fitfile=fitfile,
manager=request.user)
ps = sessioncreateform.save(commit=False)
ps.manager = request.user
ps.save()
if fitfile:
f = sessioncreateform.cleaned_data['fitfile']
filename, path_and_filename = handle_uploaded_file(f)
ps.fitfile.name = filename
ps.save()
cd = sessionteamselectform.cleaned_data
teams = cd['team']
@@ -2235,7 +2156,7 @@ class PlannedSessionDelete(DeleteView):
w.plannedsession = None
w.save()
url = reverse(plannedsessions_view)
next = self.request.GET.get('next',url)