def test_key_range_normalization(self): keys = sources.normalize_key_ranges(('id', key_range.SourceKeyRange)) self.assertEqual(len(keys), 1) self.assertEqual(len(keys[0]), 2) self.assertEqual(keys[0][0], 'id') self.assert_(isinstance(keys[0][1], key_range.SourceKeyRange)) keys = sources.normalize_key_ranges([ ('id', key_range.SourceKeyRange), ('date', key_range.EpochKeyRange('start', 'end')), ]) self.assertEqual(len(keys), 2) self.assertEqual(len(keys[0]), 2) self.assertEqual(len(keys[1]), 2) self.assertEqual(keys[0][0], 'id') self.assertEqual(keys[1][0], 'date') self.assert_(isinstance(keys[0][1], key_range.SourceKeyRange)) self.assert_(isinstance(keys[1][1], key_range.EpochKeyRange))
def __init__(self, cache, merge=False): self.cache = cache # Grab an instance of each of the source types implied by the columns self.columns_dict = dict(self.columns) report_sources = set([c.source for c in self.columns_dict.values()]) self._sources = [source(self) for source in report_sources] # Set default format labels for name, column in self.columns: if column.format.label is None: column.format.label = get_display_name(name) # Some defaults for optional settings self._init_footer() self.keys = sources.normalize_key_ranges(self.keys) self.cache_time = getattr(self, 'cache_time', DEFAULT_CACHE_TIME) fallback_sort = (self.columns[0][0], 'desc') if self.columns else None self.default_sort = getattr(self, 'default_sort', fallback_sort) self.dirty_inputs = {} self.clean_inputs = {} if not merge: self.clean_user_inputs() # Triggers validation for no inputs