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