made metrics and strokedata model dynamic
This commit is contained in:
100
rowers/models.py
100
rowers/models.py
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user