add next & previous methods on Mesure. Untested in all cases.

This commit is contained in:
Fred 2016-08-06 21:38:17 +02:00
parent 115b699b08
commit 66cf258ed6
3 changed files with 34 additions and 8 deletions

Binary file not shown.

View File

@ -18,12 +18,16 @@ class Gauge(models.Model):
class Diff(object):
def __init__(self, mesure_1, mesure_2):
self.diff = mesure_1.diff(mesure_2)
self.increase = abs(mesure_1.diff(mesure_2))
self.delta = abs(mesure_1.moment - mesure_2.moment)
class Mesure(models.Model):
moment = models.DateTimeField()
value = models.DecimalField(max_digits=10, decimal_places=4)
gauge = models.ForeignKey(Gauge)
gauge = models.ForeignKey(Gauge, related_name='mesures')
def __str__(self):
return "{} {}".format(self.moment, self.value)
def diff(self, other_mesure):
if self.category != other_mesure.category:
@ -31,9 +35,14 @@ class Mesure(models.Model):
return self.value - other_mesure.value
def diff_number_of_days(self, other_mesure):
max(self.moment, other_mesure.moment) - min(self.moment, other_mesure.moment)
@property
def category(self):
return self.gauge.category
@property
def previous(self):
return self.gauge.mesures.filter(moment__lt=self.moment).order_by('-moment')[0]
@property
def next(self):
return self.gauge.mesures.filter(moment__gt=self.moment).order_by('moment')[0]

View File

@ -36,6 +36,13 @@ class TestGaugeModel(TestCase):
self.assertEqual(gauge_2, gauges_list[2])
self.assertEqual(gauge_3, gauges_list[3])
def test_mesures_related_name(self):
cat_water = Category.objects.create(name='eau')
gauge_1 = Gauge.objects.create(serial_number='undefined', category=cat_water)
self.mesure_1 = Mesure.objects.create(moment=timezone.make_aware(datetime.now()), value=0.001, gauge=gauge_1)
self.assertEqual(1, len(gauge_1.mesures.all()))
class TestMesureModel(TestCase):
def setUp(self):
@ -45,8 +52,11 @@ class TestMesureModel(TestCase):
self.gauge_1 = Gauge.objects.create(serial_number='undefined', category=self.cat_water)
self.gauge_2 = Gauge.objects.create(serial_number='undefined', category=self.cat_gaz)
self.mesure_1 = Mesure.objects.create(moment=timezone.make_aware(datetime.now()), value=0.001, gauge=self.gauge_1)
self.mesure_2 = Mesure.objects.create(moment=timezone.make_aware(datetime.now()), value=0.002, gauge=self.gauge_2)
d1 = timezone.make_aware(datetime(2016, 1, 2))
d2 = timezone.make_aware(datetime(2016, 1, 3))
self.mesure_1 = Mesure.objects.create(moment=d1, value=0.001, gauge=self.gauge_1)
self.mesure_2 = Mesure.objects.create(moment=d2, value=0.002, gauge=self.gauge_2)
self.mesure_3 = Mesure.objects.create(moment=timezone.make_aware(datetime.now()), value=0.003, gauge=self.gauge_1)
def test_category_property(self):
@ -60,3 +70,10 @@ class TestMesureModel(TestCase):
with self.assertRaises(Exception):
mesure_1.diff(mesure_2)
def test_previous(self):
self.assertEqual(self.mesure_1, self.mesure_2.previous)
def test_next(self):
self.assertEqual(self.mesure_2, self.mesure_1.next)