better steps serializer
This commit is contained in:
@@ -207,6 +207,27 @@ class AlternativeEmails(models.TextField):
|
|||||||
value = self._get_val_from_obj(obj)
|
value = self._get_val_from_obj(obj)
|
||||||
return self.get_deb_prep_value(value)
|
return self.get_deb_prep_value(value)
|
||||||
|
|
||||||
|
# model for Planned Session Steps
|
||||||
|
class PlannedSessionStepField(models.TextField):
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
super(PlannedSessionStepField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def to_python(self, value):
|
||||||
|
if not value: return
|
||||||
|
return json.loads(value)
|
||||||
|
|
||||||
|
def from_db_value(self, value, expression, connection):
|
||||||
|
if not value: return
|
||||||
|
return json.loads(value)
|
||||||
|
|
||||||
|
def get_db_prep_value(self, value, connection, prepared=False):
|
||||||
|
if not value: return
|
||||||
|
return json.dumps(value)
|
||||||
|
|
||||||
|
def value_to_string(self, obj):
|
||||||
|
value = self._get_val_from_obj(obj)
|
||||||
|
return self.get_deb_prep_value(value)
|
||||||
|
|
||||||
# model for Power Zone names
|
# model for Power Zone names
|
||||||
class PowerZonesField(models.TextField):
|
class PowerZonesField(models.TextField):
|
||||||
# __metaclass__ = models.SubfieldBase
|
# __metaclass__ = models.SubfieldBase
|
||||||
@@ -2288,7 +2309,8 @@ class PlannedSession(models.Model):
|
|||||||
is_template = models.BooleanField(default=False)
|
is_template = models.BooleanField(default=False)
|
||||||
|
|
||||||
fitfile = models.FileField(blank=True,null=True)
|
fitfile = models.FileField(blank=True,null=True)
|
||||||
steps_json = models.TextField(max_length=10000,default=None,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,
|
interval_string = models.TextField(max_length=1000,default=None,blank=True,null=True,
|
||||||
verbose_name='Interval String (optional)')
|
verbose_name='Interval String (optional)')
|
||||||
|
|
||||||
@@ -2308,11 +2330,11 @@ class PlannedSession(models.Model):
|
|||||||
|
|
||||||
return stri
|
return stri
|
||||||
|
|
||||||
def update_json(self):
|
def update_steps(self):
|
||||||
# read file
|
# read file
|
||||||
if self.fitfile:
|
if self.fitfile:
|
||||||
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
||||||
self.steps_json = json.dumps(steps)
|
self.steps = steps
|
||||||
|
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
@@ -2336,7 +2358,8 @@ class PlannedSession(models.Model):
|
|||||||
dct = trainingparser.parsetodict(self.interval_string)
|
dct = trainingparser.parsetodict(self.interval_string)
|
||||||
dct = [item for item in dct if item['value'] != 0]
|
dct = [item for item in dct if item['value'] != 0]
|
||||||
dct = trainingparser.tofitdict(dct)
|
dct = trainingparser.tofitdict(dct)
|
||||||
self.steps_json = json.dumps(dct)
|
print(dct)
|
||||||
|
self.steps = dct
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -2386,20 +2409,18 @@ class PlannedSession(models.Model):
|
|||||||
self.fitfile = None
|
self.fitfile = None
|
||||||
else:
|
else:
|
||||||
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
steps = steps_read_fit(settings.MEDIA_ROOT+'/'+self.fitfile.name)
|
||||||
self.steps_json = json.dumps(steps)
|
self.steps = steps
|
||||||
|
|
||||||
if self.steps_json and not self.fitfile:
|
if self.steps and not self.fitfile:
|
||||||
if self.pk is not None:
|
if self.pk is not None:
|
||||||
filename = settings.MEDIA_ROOT+'/session'+encoder.encode_hex(self.pk)+'.fit'
|
filename = settings.MEDIA_ROOT+'/session'+encoder.encode_hex(self.pk)+'.fit'
|
||||||
else:
|
else:
|
||||||
file = tempfile.NamedTemporaryFile(mode='w+b',suffix='.fit',dir=settings.MEDIA_ROOT)
|
file = tempfile.NamedTemporaryFile(mode='w+b',suffix='.fit',dir=settings.MEDIA_ROOT)
|
||||||
filename = file.name
|
filename = file.name
|
||||||
steps = json.loads(self.steps_json)
|
steps = self.steps
|
||||||
steps['filename'] = filename
|
steps['filename'] = filename
|
||||||
fitfile = steps_write_fit(steps)
|
fitfile = steps_write_fit(steps)
|
||||||
self.fitfile = fitfile
|
self.fitfile = fitfile
|
||||||
self.steps_json = json.dumps(steps)
|
|
||||||
|
|
||||||
|
|
||||||
super(PlannedSession,self).save(*args, **kwargs)
|
super(PlannedSession,self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
|||||||
@@ -1281,7 +1281,7 @@ def update_plannedsession(ps,cd):
|
|||||||
try:
|
try:
|
||||||
filename, path_and_filename = handle_uploaded_file(f)
|
filename, path_and_filename = handle_uploaded_file(f)
|
||||||
ps.fitfile.name = filename
|
ps.fitfile.name = filename
|
||||||
ps.steps_json = ''
|
ps.steps = {}
|
||||||
except FileNotFoundError:
|
except FileNotFoundError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ class PlannedSessionSerializer(serializers.ModelSerializer):
|
|||||||
'course',
|
'course',
|
||||||
'approximate_distance',
|
'approximate_distance',
|
||||||
'approximate_duration',
|
'approximate_duration',
|
||||||
'steps_json',
|
'steps',
|
||||||
'fitfile'
|
'fitfile'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1927,8 +1927,8 @@ def plannedsession_view(request,id=0,userid=0):
|
|||||||
r = getrequestplanrower(request,userid=userid)
|
r = getrequestplanrower(request,userid=userid)
|
||||||
|
|
||||||
ps = get_object_or_404(PlannedSession,pk=id)
|
ps = get_object_or_404(PlannedSession,pk=id)
|
||||||
if ps.steps_json is not None:
|
if ps.steps is not None:
|
||||||
jsons = json.loads(ps.steps_json)
|
jsons = ps.steps
|
||||||
else:
|
else:
|
||||||
jsons = {}
|
jsons = {}
|
||||||
|
|
||||||
@@ -2143,8 +2143,8 @@ def plannedsession_view(request,id=0,userid=0):
|
|||||||
comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
|
comments = PlannedSessionComment.objects.filter(plannedsession=ps).order_by("created")
|
||||||
|
|
||||||
steps = ''
|
steps = ''
|
||||||
if ps.steps_json:
|
if ps.steps:
|
||||||
d = json.loads(ps.steps_json)
|
d = ps.steps
|
||||||
steps = ps_dict_get_description_html(d)
|
steps = ps_dict_get_description_html(d)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user