def monthly_density_list(self): municipality = self.request.context # parse date from request if any date_string = self.request.GET.get('period') if date_string: try: date = datetime.datetime.strptime(date_string, '%Y-%m') except ValueError: return HTTPBadRequest("Couldn't understand the date format") else: date = datetime.datetime.now() # determine the date ranges start, end = get_month_start_end(date) criterion = and_(MonthlyDensity.date >= start, MonthlyDensity.date <= end) municipality_submissions = MunicipalitySubmission.get_items( municipality, MonthlyDensity, criterion) monthly_densities = [s for ms, s in municipality_submissions] average_density = MonthlyDensity.get_average_density(date) return { 'municipality': municipality, 'items': monthly_densities, 'average_density': average_density, 'date': date }
def test_density(self): monthly_density = MonthlyDensity(json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'yes', MonthlyDensity.FILLED_WEIGHT_FIELD: '20', MonthlyDensity.EMPTY_WEIGHT_FIELD: '12', MonthlyDensity.VOLUME_FIELD: '20.0' }) self.assertEqual(monthly_density.density, 0.4)
def test_calculate_average_density(self): average_density = MonthlyDensity.calculate_average_density([ MonthlyDensity(json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'yes', MonthlyDensity.FILLED_WEIGHT_FIELD: '20', MonthlyDensity.EMPTY_WEIGHT_FIELD: '12', MonthlyDensity.VOLUME_FIELD: '20.0' }), # density = 0.8 MonthlyDensity(json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'yes', MonthlyDensity.FILLED_WEIGHT_FIELD: '20', MonthlyDensity.EMPTY_WEIGHT_FIELD: '12', MonthlyDensity.VOLUME_FIELD: '10.0' }) # density = 0.4 ]) self.assertAlmostEqual(average_density, 0.6)
def test_volume_returns_none_if_skip_not_found(self): monthly_density = MonthlyDensity( json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'no', MonthlyDensity.SKIP_TYPE_FIELD: 'Z', MonthlyDensity.WASTE_HEIGHT_FIELD: '20.0' }, municipality_submission=MunicipalitySubmission( municipality=self.municipality )) self.assertIsNone(monthly_density.volume)
def test_volume_when_not_compressor(self): monthly_density = MonthlyDensity( json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'no', MonthlyDensity.SKIP_TYPE_FIELD: 'A', MonthlyDensity.WASTE_HEIGHT_FIELD: '20.0' }, municipality_submission=MunicipalitySubmission( municipality=self.municipality )) self.assertEqual(monthly_density.volume, 6500.0)
def test_get_average_density_returns_avg_if_above_threshold(self): MonthlyDensity.THRESHOLD_MIN = 2 date = datetime.date(2014, 04, 07) average_density = MonthlyDensity.get_average_density(date) self.assertAlmostEqual(average_density, 0.000226923)
def test_get_average_density_returns_none_if_below_threshold(self): # this also checks that PENDING and REJECTED submissions are not # considered date = datetime.date(2014, 05, 07) average_density = MonthlyDensity.get_average_density(date) self.assertIsNone(average_density)
def test_net_weight(self): monthly_density = MonthlyDensity(json_data={ MonthlyDensity.FILLED_WEIGHT_FIELD: '20', MonthlyDensity.EMPTY_WEIGHT_FIELD: '12' }) self.assertEqual(monthly_density.net_weight, 8.0)
def test_volume_when_compressor(self): monthly_density = MonthlyDensity(json_data={ MonthlyDensity.COMPRESSOR_TRUCK_FIELD: 'yes', MonthlyDensity.VOLUME_FIELD: '20.0' }) self.assertEqual(monthly_density.volume, 20.0)
def monthly_density(self): self._monthly_density = (self._monthly_density or MonthlyDensity.get_average_density(self.date)) return self._monthly_density