flake8 integration

This commit is contained in:
Fred Pauchet 2016-08-08 08:42:22 +02:00
parent 37f389d593
commit 028e95ab5e
6 changed files with 38 additions and 19 deletions

View File

@ -5,5 +5,6 @@ test:python-3.4:
stage: test stage: test
image: python:3.4-slim image: python:3.4-slim
script: script:
- flake8 src/
- coverage run src/manage.py test sherlock - coverage run src/manage.py test sherlock
- coverage report -m - coverage report -m

View File

@ -1,3 +1,4 @@
-r base.txt -r base.txt
coverage coverage
django_coverage_plugin django_coverage_plugin
flake8

View File

@ -1,7 +1,9 @@
from django.contrib import admin from django.contrib import admin
from .models import Category, Gauge, Mesure from .models import Category, Gauge, Mesure
class MesureAdmin(admin.ModelAdmin): class MesureAdmin(admin.ModelAdmin):
model = Mesure model = Mesure

View File

@ -1,34 +1,39 @@
from django.db import models from django.db import models
class Category(models.Model): class Category(models.Model):
name = models.CharField(max_length=255, unique=True) name = models.CharField(max_length=255, unique=True)
def __str__(self): def __str__(self):
return self.name return self.name
class Gauge(models.Model): class Gauge(models.Model):
serial_number = models.CharField(max_length=40) serial_number = models.CharField(max_length=40)
category = models.ForeignKey(Category) category = models.ForeignKey(Category)
def __str__(self): def __str__(self):
return '{} ({})'.format(self.category, self.serial_number) return '{} ({})'.format(self.category, self.serial_number)
class Meta: class Meta:
ordering = ['category'] ordering = ['category']
class Diff(object): class Diff(object):
def __init__(self, mesure_1, mesure_2): def __init__(self, mesure_1, mesure_2):
self.increase = abs(mesure_1.diff(mesure_2)) self.increase = abs(mesure_1.diff(mesure_2))
self.timedelta = abs(mesure_1.moment - mesure_2.moment) self.timedelta = abs(mesure_1.moment - mesure_2.moment)
class MesureManager(models.Manager): class MesureManager(models.Manager):
def create(self, moment, value, gauge_sn, category_label): def create(self, moment, value, gauge_sn, category_label):
category, cat_created = Category.objects.get_or_create(name=category_label) cat, cat_created = Category.objects.get_or_create(name=category_label)
gauge, gauge_created = Gauge.objects.get_or_create(serial_number=gauge_sn, category=category) gauge, gauge_created = Gauge.objects.get_or_create(serial_number=gauge_sn, category=cat)
mesure = Mesure.objects.create(moment=moment, value=value, gauge=gauge) mesure = Mesure.objects.create(moment=moment, value=value, gauge=gauge)
return mesure return mesure
class Mesure(models.Model): class Mesure(models.Model):
moment = models.DateTimeField() moment = models.DateTimeField()
value = models.DecimalField(max_digits=10, decimal_places=4) value = models.DecimalField(max_digits=10, decimal_places=4)
@ -40,23 +45,23 @@ class Mesure(models.Model):
def diff(self, other_mesure): def diff(self, other_mesure):
if self.category != other_mesure.category: if self.category != other_mesure.category:
raise Exception('Cannot diff on two different categories') raise Exception('Cannot diff on two different categories')
return self.value - other_mesure.value return self.value - other_mesure.value
@property @property
def category(self): def category(self):
return self.gauge.category return self.gauge.category
@property @property
def previous(self): def previous(self):
try: try:
return self.gauge.mesures.filter(moment__lt=self.moment).order_by('-moment')[0] return self.gauge.mesures.filter(moment__lt=self.moment).order_by('-moment')[0]
except IndexError: except IndexError:
return None return None
@property @property
def next(self): def next(self):
try: try:
return self.gauge.mesures.filter(moment__gt=self.moment).order_by('moment')[0] return self.gauge.mesures.filter(moment__gt=self.moment).order_by('moment')[0]
except IndexError: except IndexError:
return None return None

View File

@ -1,10 +1,13 @@
from datetime import datetime from datetime import datetime
from django.test import TestCase from django.test import TestCase
from django.utils import timezone from django.utils import timezone
from .models import Category, Gauge, Mesure from .models import Category, Gauge, Mesure
class TestCategoryModel(TestCase): class TestCategoryModel(TestCase):
def test_str(self): def test_str(self):
@ -12,6 +15,7 @@ class TestCategoryModel(TestCase):
self.assertEqual('test', str(cat)) self.assertEqual('test', str(cat))
class TestGaugeModel(TestCase): class TestGaugeModel(TestCase):
def test_str(self): def test_str(self):
@ -19,7 +23,7 @@ class TestGaugeModel(TestCase):
gauge = Gauge.objects.create(serial_number='test', category=cat) gauge = Gauge.objects.create(serial_number='test', category=cat)
self.assertEqual('eau (test)', str(gauge)) self.assertEqual('eau (test)', str(gauge))
def test_default_ordering(self): def test_default_ordering(self):
cat_water = Category.objects.create(name='eau') cat_water = Category.objects.create(name='eau')
cat_gaz = Category.objects.create(name='gaz') cat_gaz = Category.objects.create(name='gaz')
@ -35,18 +39,22 @@ class TestGaugeModel(TestCase):
self.assertEqual(gauge_4, gauges_list[1]) self.assertEqual(gauge_4, gauges_list[1])
self.assertEqual(gauge_2, gauges_list[2]) self.assertEqual(gauge_2, gauges_list[2])
self.assertEqual(gauge_3, gauges_list[3]) self.assertEqual(gauge_3, gauges_list[3])
def test_mesures_related_name(self): def test_mesures_related_name(self):
now = timezone.make_aware(datetime.now())
cat_water = Category.objects.create(name='eau') cat_water = Category.objects.create(name='eau')
gauge_1 = Gauge.objects.create(serial_number='undefined', category=cat_water) 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.mesure_1 = Mesure.objects.create(moment=now, value=0.001, gauge=gauge_1)
self.assertEqual(1, len(gauge_1.mesures.all())) self.assertEqual(1, len(gauge_1.mesures.all()))
class TestMesureManager(TestCase): class TestMesureManager(TestCase):
def test_create(self): def test_create(self):
raise Exception('not implemented yet') raise Exception('not implemented yet')
class TestMesureModel(TestCase): class TestMesureModel(TestCase):
def setUp(self): def setUp(self):
@ -55,7 +63,7 @@ class TestMesureModel(TestCase):
self.gauge_1 = Gauge.objects.create(serial_number='undefined', category=self.cat_water) 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.gauge_2 = Gauge.objects.create(serial_number='undefined', category=self.cat_gaz)
d1 = timezone.make_aware(datetime(2016, 1, 1)) d1 = timezone.make_aware(datetime(2016, 1, 1))
d2 = timezone.make_aware(datetime(2016, 1, 2)) d2 = timezone.make_aware(datetime(2016, 1, 2))
d3 = timezone.make_aware(datetime(2016, 1, 3)) d3 = timezone.make_aware(datetime(2016, 1, 3))
@ -63,8 +71,8 @@ class TestMesureModel(TestCase):
self.mesure_1 = Mesure.objects.create(moment=d1, value=0.001, gauge=self.gauge_1) 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_2 = Mesure.objects.create(moment=d2, value=0.002, gauge=self.gauge_2)
self.mesure_3 = Mesure.objects.create(moment=d3, value=0.003, gauge=self.gauge_1) self.mesure_3 = Mesure.objects.create(moment=d3, value=0.003, gauge=self.gauge_1)
def test_category_property(self): def test_category_property(self):
self.assertEqual(self.cat_water, self.mesure_1.category) self.assertEqual(self.cat_water, self.mesure_1.category)
def test_diff_value(self): def test_diff_value(self):
@ -74,13 +82,12 @@ class TestMesureModel(TestCase):
def test_diff_raises_exception(self): def test_diff_raises_exception(self):
with self.assertRaises(Exception): with self.assertRaises(Exception):
mesure_1.diff(mesure_2) self.mesure_1.diff(self.mesure_2)
def test_previous(self): def test_previous(self):
self.assertEqual(self.mesure_1, self.mesure_3.previous) self.assertEqual(self.mesure_1, self.mesure_3.previous)
self.assertIsNone(self.mesure_1.previous) self.assertIsNone(self.mesure_1.previous)
def test_next(self): def test_next(self):
self.assertEqual(self.mesure_3, self.mesure_1.next) self.assertEqual(self.mesure_3, self.mesure_1.next)
self.assertIsNone(self.mesure_3.next) self.assertIsNone(self.mesure_3.next)

3
tox.ini Normal file
View File

@ -0,0 +1,3 @@
[flake8]
max-line-length = 100
exclude = migrations, manage.py