Source code for regulations.generator.notices

[docs]def filter_labeled_children(sxs): """ Some children don't have labels. We display those with their parents. The other children are displayed when they are independently, specifically requested. """ return [s for s in sxs['children'] if 'label' not in s]
[docs]def non_empty_sxs(sxs): has_paragraphs = len(sxs['paragraphs']) > 0 has_unlabeled_children = len(filter_labeled_children(sxs)) > 0 return (has_paragraphs or has_unlabeled_children)
[docs]def add_depths(sxs, starting_depth): """ We use depth numbers in header tags to determine how titles are output. """ sxs['depth'] = starting_depth for s in sxs['children']: add_depths(s, starting_depth+1)
[docs]def find_label_in_sxs(sxs_list, label_id, fr_page=None): """ Given a tree of SXS sections, find a non-empty sxs that matches label_id. Some notices may have the same label appearing multiple times; use fr_page to distinguish, defaulting to the first""" matches = [] for s in sxs_list: if label_id in s.get('labels', [s.get('label')]) and non_empty_sxs(s): matches.append(s) elif s['children']: sxs = find_label_in_sxs(s['children'], label_id, fr_page) if sxs and non_empty_sxs(sxs): matches.append(sxs) perfect_match = [m for m in matches if m.get('page') == fr_page] if perfect_match: return perfect_match[0] if matches: return matches[0]