Private
Public Access
1
0

made metrics and strokedata model dynamic

This commit is contained in:
Sander Roosendaal
2017-09-21 16:47:39 +02:00
parent 79d2c7490a
commit 6db8b17ad6
4 changed files with 292 additions and 80 deletions

View File

@@ -519,57 +519,65 @@ def auto_delete_strokedata_on_delete(sender, instance, **kwargs):
conn.close()
engine.dispose()
from rowers.metrics import rowingmetrics
strokedatafields = {
'workoutid':models.IntegerField(null=True),
'workoutstate':models.IntegerField(null=True,default=1),
'ftime':models.CharField(max_length=30),
'fpace':models.CharField(max_length=30),
'hr_ut2':models.IntegerField(null=True),
'hr_ut1':models.IntegerField(null=True),
'hr_at':models.IntegerField(null=True),
'hr_tr':models.IntegerField(null=True),
'hr_an':models.IntegerField(null=True),
'hr_max':models.IntegerField(null=True),
'hr_bottom':models.IntegerField(null=True),
'x_right':models.FloatField(null=True),
'ergpace':models.FloatField(null=True),
'nowindpace':models.FloatField(null=True),
'equivergpower':models.FloatField(null=True),
'fergpace':models.CharField(max_length=30),
'fnowindpace':models.CharField(max_length=30),
}
for name,d in rowingmetrics:
if d['numtype'] == 'float':
try:
strokedatafields[name] = models.FloatField(
null=d['null'],
default=d['default'],
verbose_name=d['verbose_name'])
except KeyError:
strokedatafields[name] = models.FloatField(
null=d['null'],
verbose_name=d['verbose_name'])
elif d['numtype'] == 'integer':
try:
strokedatafields[name] = models.IntegerField(
null=d['null'],
default=d['default'],
verbose_name=d['verbose_name'])
except KeyError:
strokedatafields[name] = models.IntegerField(
null=d['null'],
verbose_name=d['verbose_name'])
class Meta:
db_table = 'strokedata'
index_together = ['workoutid']
app_label = 'rowers'
attrs = {'__module__': '', 'Meta': Meta}
attrs.update(strokedatafields)
# Model of StrokeData table
# the definition here is used only to enable easy Django migration
# when the StrokeData are expanded.
# No Django Instances of this model are managed. Strokedata table is
# accesssed directly with SQL commands
class StrokeData(models.Model):
class Meta:
db_table = 'strokedata'
index_together = ['workoutid']
workoutid = models.IntegerField(null=True)
time = models.FloatField(null=True,verbose_name='Time')
hr = models.IntegerField(null=True,verbose_name='Heart Rate')
pace = models.FloatField(null=True,verbose_name='Pace')
workoutstate = models.IntegerField(null=True,default=1)
spm = models.FloatField(null=True,verbose_name='Stroke Rate')
cumdist = models.FloatField(null=True,verbose_name='Cumulative Distance')
ftime = models.CharField(max_length=30)
fpace = models.CharField(max_length=30)
driveenergy = models.FloatField(null=True,verbose_name='Work per Stroke')
power = models.FloatField(null=True,verbose_name='Power')
averageforce = models.FloatField(null=True,verbose_name='Average Force')
drivelength = models.FloatField(null=True,verbose_name='Drive Length')
peakforce = models.FloatField(null=True,verbose_name='Peak Force')
forceratio = models.FloatField(null=True,verbose_name='Average/Peak Force Ratio')
distance = models.FloatField(null=True,verbose_name='Distance')
drivespeed = models.FloatField(null=True,verbose_name='Drive Speed',
default=0)
hr_ut2 = models.IntegerField(null=True)
hr_ut1 = models.IntegerField(null=True)
hr_at = models.IntegerField(null=True)
hr_tr = models.IntegerField(null=True)
hr_an = models.IntegerField(null=True)
hr_max = models.IntegerField(null=True)
hr_bottom = models.IntegerField(null=True)
x_right = models.FloatField(null=True)
ergpace = models.FloatField(null=True)
nowindpace = models.FloatField(null=True)
equivergpower = models.FloatField(null=True)
fergpace = models.CharField(max_length=30)
fnowindpace = models.CharField(max_length=30)
catch = models.FloatField(default=0,null=True,verbose_name='Catch Angle')
slip = models.FloatField(default=0,null=True,verbose_name='Slip')
finish = models.FloatField(default=0,null=True,verbose_name='Finish Angle')
wash = models.FloatField(default=0,null=True,verbose_name='Wash')
peakforceangle = models.FloatField(default=0,null=True,verbose_name='Peak Force Angle')
rhythm = models.FloatField(default=1.0,null=True,verbose_name='Rhythm')
totalangle = models.FloatField(default=0.0,null=True,verbose_name='Total Stroke Length (deg)')
effectiveangle = models.FloatField(default=0.0,null=True,verbose_name='Effective Stroke Length (deg)')
efficiency = models.FloatField(default=-1,null=True,verbose_name='OTW Efficiency')
distanceperstroke = models.FloatField(default=-1,null=True,verbose_name='Distance per Stroke')
StrokeData = type(str('StrokeData'), (models.Model,),
attrs
)
# A wrapper around the png files
class GraphImage(models.Model):