all a bit neater and now working
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user