Skip to content

Instantly share code, notes, and snippets.

@autrilla
Created March 28, 2015 21:14
Show Gist options
  • Select an option

  • Save autrilla/54d9645f0d64aa8b26f2 to your computer and use it in GitHub Desktop.

Select an option

Save autrilla/54d9645f0d64aa8b26f2 to your computer and use it in GitHub Desktop.
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)
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