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
예제 #4
0
    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
예제 #5
0
    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
예제 #6
0
 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
예제 #7
0
    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)
예제 #8
0
    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)
예제 #9
0
 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
예제 #10
0
 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
예제 #11
0
    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'))