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