def test_filter_by_subterp(self, fetch_toc): nodes = [{'label': ['1005', 'h1', 'Interp']}, {'label': ['1005', '2', 'Interp']}, {'label': ['1005', '3', 'Interp']}, {'label': ['1005', '4', 'Interp']}, {'label': ['1005', 'A', 'Interp']}, {'label': ['1005', 'A_B', 'Interp']}, {'label': ['1005', 'B', 'Interp']}] self.assertEqual(nodes[1:4], subterp.filter_by_subterp( nodes, ['1005', 'Subpart', 'Interp'], 'vvvv')) self.assertFalse(fetch_toc.called) self.assertEqual(nodes[4:], subterp.filter_by_subterp( nodes, ['1005', 'Appendices', 'Interp'], 'vvvv')) self.assertFalse(fetch_toc.called) fetch_toc.return_value = [ {'index': ['1005', 'Subpart', 'A'], 'sub_toc': [{'index': ['1005', '1']}, {'index': ['1005', '2']}]}, {'index': ['1005', 'Subpart', 'B'], 'sub_toc': [{'index': ['1005', '3']}, {'index': ['1005', '4']}]}, {'index': ['1005', 'A']}, {'index': ['1005', 'B']}, {'index': ['1005', 'Interp'], 'sub_toc': [{'index': ['1005', 'Subpart', 'A', 'Interp']}, {'index': ['1005', 'Subpart', 'B', 'Interp']}, {'index': ['1005', 'Appendices', 'Interp']}]}] self.assertEqual(nodes[1:2], subterp.filter_by_subterp( nodes, ['1005', 'Subpart', 'A', 'Interp'], 'vvvv')) self.assertEqual(nodes[2:4], subterp.filter_by_subterp( nodes, ['1005', 'Subpart', 'B', 'Interp'], 'vvvv'))
def get_context_data(self, **kwargs): # skip our parent context = super(PartialView, self).get_context_data(**kwargs) label_id = context['label_id'] label = label_id.split('-') reg_part = label[0] version = context['version'] context['navigation'] = self.section_navigation(label_id, version) interp = generator.get_tree_paragraph(reg_part + '-Interp', version) if not interp: raise Http404 subterp_sects = filter_by_subterp(interp['children'], label, version) if not subterp_sects: raise Http404 context['markup_page_type'] = 'reg-section' html_label = node_types.to_markup_id(label_id.split('-')) interp['children'] = subterp_sects inline_applier, p_applier, s_applier = self.determine_appliers( reg_part + '-Interp', version) builder = generate_html(interp, (inline_applier, p_applier, s_applier)) interp = builder.tree interp['html_label'] = html_label context['tree'] = {'children': [interp]} return context
def get_context_data(self, **kwargs): # skip our parent context = super(PartialView, self).get_context_data(**kwargs) label_id = context['label_id'] label = label_id.split('-') reg_part = label[0] version = context['version'] context['navigation'] = self.section_navigation(label_id, version) interp = generator.get_tree_paragraph(reg_part + '-Interp', version) if not interp: raise Http404 subterp_sects = filter_by_subterp(interp['children'], label, version) if not subterp_sects: raise Http404 context['markup_page_type'] = 'reg-section' html_label = node_types.to_markup_id(label_id.split('-')) interp['children'] = subterp_sects # interp['label] is defined so that the template receives the # appropriate markup ID, matching the rendered subterp and not # the parent node in the tree interp['label'] = label layers = list(self.determine_layers(reg_part + '-Interp', version)) builder = CFRHTMLBuilder(layers) builder.tree = interp builder.generate_html() interp = builder.tree interp['html_label'] = html_label context['tree'] = {'children': [interp]} return context
def _get_node_trees(self, client, label, version): """If using subterps, we might be getting a list of relevant trees rather than a single node.""" tree_nodes = [] if 'Interp' in label and ('Subpart' in label or 'Appendices' in label): # Subterp interp = client.regulation(label[0] + '-Interp', version) if interp: tree_nodes = filter_by_subterp(interp['children'], label, version) else: node = client.regulation('-'.join(label), version) if node: tree_nodes.append(node) return tree_nodes
def check_tree(self, context): """We can't defer to Chrome's check because Subterps are constructed -site side""" version, label_id = context['version'], context['label_id'] label = label_id.split('-') reg_part = label[0] interp = generator.get_tree_paragraph(reg_part + '-Interp', version) if not interp: raise error_handling.MissingSectionException(label_id, version, context) subterp_sects = filter_by_subterp(interp['children'], label, version) if not subterp_sects: raise error_handling.MissingSectionException(label_id, version, context)
def fetch_relevant_trees(self, http_client): """If using subterps, we might be getting a list of relevant trees rather than a single node.""" is_interp = 'Interp' in self.label_parts is_complex = set(['Subpart', 'Appendices']) & set(self.label_parts) is_subterp = is_interp and is_complex if is_subterp: interp = http_client.regulation(self.cfr_part + '-Interp', self.version) if interp: for tree_node in filter_by_subterp(interp['children'], self.label_parts, self.version): yield tree_node else: node = http_client.regulation(self.label_id, self.version) if node: yield node
def test_filter_by_subterp(self, fetch_toc): nodes = [{ 'label': ['1005', 'h1', 'Interp'] }, { 'label': ['1005', '2', 'Interp'] }, { 'label': ['1005', '3', 'Interp'] }, { 'label': ['1005', '4', 'Interp'] }, { 'label': ['1005', 'A', 'Interp'] }, { 'label': ['1005', 'A_B', 'Interp'] }, { 'label': ['1005', 'B', 'Interp'] }] self.assertEqual( nodes[1:4], subterp.filter_by_subterp(nodes, ['1005', 'Subpart', 'Interp'], 'vvvv')) self.assertFalse(fetch_toc.called) self.assertEqual( nodes[4:], subterp.filter_by_subterp(nodes, ['1005', 'Appendices', 'Interp'], 'vvvv')) self.assertFalse(fetch_toc.called) fetch_toc.return_value = [{ 'index': ['1005', 'Subpart', 'A'], 'sub_toc': [{ 'index': ['1005', '1'] }, { 'index': ['1005', '2'] }] }, { 'index': ['1005', 'Subpart', 'B'], 'sub_toc': [{ 'index': ['1005', '3'] }, { 'index': ['1005', '4'] }] }, { 'index': ['1005', 'A'] }, { 'index': ['1005', 'B'] }, { 'index': ['1005', 'Interp'], 'sub_toc': [{ 'index': ['1005', 'Subpart', 'A', 'Interp'] }, { 'index': ['1005', 'Subpart', 'B', 'Interp'] }, { 'index': ['1005', 'Appendices', 'Interp'] }] }] self.assertEqual( nodes[1:2], subterp.filter_by_subterp(nodes, ['1005', 'Subpart', 'A', 'Interp'], 'vvvv')) self.assertEqual( nodes[2:4], subterp.filter_by_subterp(nodes, ['1005', 'Subpart', 'B', 'Interp'], 'vvvv'))