def statistics(self, start_date, end_date): """From collage snippet group. Brings statistics and collage properties together. """ adapter = self.adapter if adapter is None: return [] # Calc periods based on aggregation period setting. periods = dateperiods.calc_aggregation_periods(start_date, end_date, self.aggregation_period) statistics = [] for period_start_date, period_end_date in periods: if not self.restrict_to_month or ( self.aggregation_period != dateperiods.MONTH) or ( self.aggregation_period == dateperiods.MONTH and self.restrict_to_month == period_start_date.month): # Base statistics for each period. statistics_row = adapter.value_aggregate( self.identifier, {'min': None, 'max': None, 'avg': None, 'count_lt': self.boundary_value, 'count_gte': self.boundary_value, 'percentile': self.percentile_value}, start_date=period_start_date, end_date=period_end_date) # Add name. if statistics_row: statistics_row['name'] = self.name statistics_row['period'] = dateperiods.fancy_period( period_start_date, period_end_date, self.aggregation_period) statistics_row['boundary_value'] = self.boundary_value statistics_row['percentile_value'] = self.percentile_value statistics.append(statistics_row) return statistics
def test_fancy_period(self): start_date = datetime.datetime(1979, 5, 25, tzinfo=pytz.UTC) end_date = datetime.datetime(1979, 7, 15, tzinfo=pytz.UTC) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.ALL)) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.YEAR)) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.QUARTER)) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.MONTH)) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.WEEK)) self.assertTrue(dateperiods.fancy_period( start_date, end_date, dateperiods.DAY))