def sort_analyses(analyses): """ Sort the labels, so that the list of section-by-section analyses can be displayed in the correct order. """ if analyses: for a in analyses: label = a['label_id'].split('-') if 'Interp' not in a['label_id']: sortable = sort_regtext_label(label) else: prefix = label[:label.index('Interp')] suffix = label[label.index('Interp') + 1:] prefix_sortable = sort_regtext_label(prefix) suffix_sortable = [make_label_sortable(l)[0] for l in suffix] if len(suffix_sortable) > 1: suffix_sortable[1] = make_label_sortable( suffix_sortable[1], roman=True)[0] sortable = prefix_sortable + suffix_sortable a['sortable'] = tuple(sortable) sorted_analyses = sorted(analyses, key=lambda a: a['sortable']) for a in sorted_analyses: if 'sortable' in a: del a['sortable'] return sorted_analyses
def sort_key(self): if not self.is_interp: return tuple(sort_regtext_label(self.parts)) else: suffix = self.parts[len(self.prefix) + 1:] prefix_sortable = sort_regtext_label(self.prefix) suffix_sortable = [make_label_sortable(l)[0] for l in suffix] if len(suffix_sortable) > 1: suffix_sortable[1] = make_label_sortable(suffix_sortable[1], roman=True)[0] return tuple(prefix_sortable + suffix_sortable)
def sort_key(self): if not self.is_interp: return tuple(sort_regtext_label(self.parts)) else: suffix = self.parts[len(self.prefix) + 1:] prefix_sortable = sort_regtext_label(self.prefix) suffix_sortable = [make_label_sortable(l)[0] for l in suffix] if len(suffix_sortable) > 1: suffix_sortable[1] = make_label_sortable( suffix_sortable[1], roman=True)[0] return tuple(prefix_sortable + suffix_sortable)
def test_make_label_sortable_not_roman(self): label = "iv" sortable = tree_builder.make_label_sortable(label) self.assertEquals(sortable, ('iv', ))
def test_make_label_sortable_roman(self): label = "iv" sortable = tree_builder.make_label_sortable(label, roman=True) self.assertEquals(sortable, (4, ))
def sort_regtext_label(label): """ Make a regtext label sortable """ sortable = [make_label_sortable(l)[0] for l in label] if len(sortable) > 4: sortable[4] = make_label_sortable(sortable[4], roman=True)[0] return sortable
def test_make_label_sortable_not_roman(self): label = "iv" sortable = tree_builder.make_label_sortable(label) self.assertEquals(sortable, ('iv',))
def test_make_label_sortable_roman(self): label = "iv" sortable = tree_builder.make_label_sortable(label, roman=True) self.assertEquals(sortable, 4)