def _compute_time_in_period(self, time_type, sessions_by_agent): results = {} for agent, sessions in sessions_by_agent.iteritems(): for time_start, time_end in sessions: if not time_end: time_end = self.end touched_periods = time_utils.get_period_start_for_time_range( self.possible_intervals, time_start, time_end) for period_start in touched_periods: if period_start not in results: results[period_start] = {} period_end = period_start + self.interval_size end_in_interval = min(time_end, period_end) start_in_interval = max(time_start, period_start) delta = end_in_interval - start_in_interval self._add_time_to_agent_in_period( results[period_start], agent, time_type, delta) return results
def test_get_period_start_for_time_range(self): time_list = [ datetime(2012, 1, 1, 1), datetime(2012, 1, 1, 2), datetime(2012, 1, 1, 3), datetime(2012, 1, 1, 4), datetime(2012, 1, 1, 5), ] start = datetime(2012, 1, 1, 2, 0, 0) end = datetime(2012, 1, 1, 5, 0) result = time_utils.get_period_start_for_time_range( time_list, start, end) expected = [ datetime(2012, 1, 1, 2), datetime(2012, 1, 1, 3), datetime(2012, 1, 1, 4), ] self.assertEqual(result, expected)
def test_get_period_start_for_time_range(self): time_list = [ datetime(2012, 1, 1, 1), datetime(2012, 1, 1, 2), datetime(2012, 1, 1, 3), datetime(2012, 1, 1, 4), datetime(2012, 1, 1, 5), ] start = datetime(2012, 1, 1, 2, 0, 0) end = datetime(2012, 1, 1, 5, 0) result = time_utils.get_period_start_for_time_range( time_list, start, end) expected = [ datetime(2012, 1, 1, 2), datetime(2012, 1, 1, 3), datetime(2012, 1, 1, 4), ] self.assertEqual(result, expected)