Created
March 28, 2015 21:14
-
-
Save autrilla/54d9645f0d64aa8b26f2 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from django.db import models | |
| from django.utils import timezone | |
| class Zone(models.Model): | |
| ''' Generic Zone superclass. ''' | |
| name = models.CharField(max_length=35) | |
| class Farm(Zone): | |
| ''' Farm. Users can have many of these. ''' | |
| class Subzone(Zone): | |
| ''' Subzone, zone within a Farm ''' | |
| farm = models.ForeignKey(Farm) | |
| class Device(models.Model): | |
| ''' Generic device superclass. ''' | |
| name = models.CharField(max_length=35) | |
| zone = models.ForeignKey(Zone) | |
| class TemperatureAlarm(models.Model): | |
| ''' Temperature alarm functionality for the A1. ''' | |
| temperature = models.FloatField() | |
| trigger_type = models.CharField(max_length=35) | |
| def trigger(self): | |
| pass | |
| class A1(Device): | |
| ''' A1 device from FAVEGA. Temperature probe. ''' | |
| alarm = models.ForeignKey(TemperatureAlarm) | |
| def average_temperature(self, start, end=timezone.now()): | |
| temps = list() | |
| for temperature in self.temperature_set.all(): | |
| if temperature.date < end and temperature.date > start: | |
| temps.append(temperature.temperature) | |
| return sum(temps) / len(temps) if len(temps) > 0 else 1 | |
| class Temperature(models.Model): | |
| temperature = models.FloatField() | |
| date = models.DateTimeField(auto_now=True) | |
| device = models.ForeignKey(A1) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from django.test import TestCase | |
| from django.utils import timezone | |
| from datetime import timedelta | |
| from FarmNet.models import A1, TemperatureAlarm, Temperature, Farm | |
| class A1TestCase(TestCase): | |
| def setUp(self): | |
| alarm = TemperatureAlarm.objects.create(temperature=30.0) | |
| alarm.save() | |
| farm = Farm(name='Granja Ejea') | |
| farm.save() | |
| A1.objects.create(name="A1 exterior", alarm=alarm, zone=farm) | |
| def test_add_temperature(self): | |
| a1 = A1.objects.get(name="A1 exterior") | |
| temp = Temperature(device=a1, temperature=30.0, | |
| date=timezone.now()) | |
| a1.save() | |
| temp.save() | |
| self.assertIn(temp, a1.temperature_set.all()) | |
| def test_average_temperature(self): | |
| a1 = A1.objects.get(name="A1 exterior") | |
| temp1 = Temperature(device=a1, temperature=30.0, | |
| date=timezone.now() - | |
| timedelta(hours=8)) | |
| temp2 = Temperature(device=a1, temperature=20.0) | |
| a1.save() | |
| temp1.save() | |
| temp2.save() | |
| self.assertEquals(25.0, a1.average_temperature(timezone.now() - | |
| timedelta(hours=9))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment