Example #1
0
    def regtext_changes_context(cls, amendments, version_info, label_id,
                                doc_number, toc_position):
        """Generate diffs for the changed section"""
        cfr_part = label_id.split('-')[0]
        relevant = []
        for amd in amendments:
            changes = amd.get('changes', [])
            keys = {change[0] for change in changes}
            if any(is_contained_in(key, label_id) for key in keys):
                relevant.append(amd)

        versions = Versions(version_info[cfr_part]['left'],
                            version_info[cfr_part]['right'])
        left_tree = ApiReader().regulation(label_id, versions.older)
        diff_applier = generator.get_diff_applier(
            label_id, versions.older, versions.newer)
        if diff_applier is None:
            raise error_handling.MissingContentException()

        layers = list(generator.diff_layers(versions, label_id))

        builder = CFRChangeHTMLBuilder(
            layers, diff_applier, id_prefix=[str(doc_number), 'cfr'],
            index_prefix=[1, toc_position]
        )
        builder.tree = left_tree or {}
        builder.generate_html()

        return {
            'instructions': [a['instruction'] for a in relevant],
            'subparts': list(cls.subpart_changes(doc_number, relevant,
                                                 label_id)),
            'tree': builder.tree,
        }
    def regtext_changes_context(cls, amendments, version_info, label_id,
                                doc_number, toc_position):
        """Generate diffs for the changed section"""
        cfr_part = label_id.split('-')[0]
        relevant = []
        for amd in amendments:
            changes = amd.get('changes', [])
            keys = {change[0] for change in changes}
            if any(is_contained_in(key, label_id) for key in keys):
                relevant.append(amd)

        versions = Versions(version_info[cfr_part]['left'],
                            version_info[cfr_part]['right'])
        left_tree = ApiReader().regulation(label_id, versions.older)
        diff_applier = generator.get_diff_applier(label_id, versions.older,
                                                  versions.newer)
        if diff_applier is None:
            raise error_handling.MissingContentException()

        layers = list(generator.diff_layers(versions, label_id))

        builder = CFRChangeHTMLBuilder(layers,
                                       diff_applier,
                                       id_prefix=[str(doc_number), 'cfr'],
                                       index_prefix=[1, toc_position])
        builder.tree = left_tree or {}
        builder.generate_html()

        return {
            'instructions': [a['instruction'] for a in relevant],
            'subparts':
            list(cls.subpart_changes(doc_number, relevant, label_id)),
            'tree': builder.tree,
        }
 def test_get_diff_applier_allows_empty(self, get_diff_json):
     diff = {}
     get_diff_json.return_value = diff
     da = generator.get_diff_applier('204', 'old', 'new')
     self.assertEqual(da.diff, diff)
     self.assertEqual(
         ('204', 'old', 'new'),
         get_diff_json.call_args[0])
 def test_get_diff_applier_allows_empty(self, get_diff_json):
     diff = {}
     get_diff_json.return_value = diff
     da = generator.get_diff_applier('204', 'old', 'new')
     self.assertEqual(da.diff, diff)
     self.assertEqual(
         ('204', 'old', 'new'),
         get_diff_json.call_args[0])
Example #5
0
def get_appliers(label_id, older, newer):
    diff = generator.get_diff_applier(label_id, older, newer)

    if diff is None:
        raise error_handling.MissingContentException()

    appliers = utils.handle_diff_layers('graphics,paragraph,keyterms,defined',
                                        label_id, older, newer)
    appliers += (diff, )
    return appliers
Example #6
0
def get_appliers(label_id, versions):
    diff = generator.get_diff_applier(label_id, versions.older, versions.newer)

    if diff is None:
        raise error_handling.MissingContentException()

    layer_creator = generator.DiffLayerCreator(versions.newer)
    layer_creator.add_layers(
        ['graphics', 'paragraph', 'keyterms', 'defined', 'formatting'],
        label_id, versions.older)
    return layer_creator.get_appliers() + (diff, )
Example #7
0
def get_appliers(label_id, versions):
    diff = generator.get_diff_applier(label_id, versions.older, versions.newer)

    if diff is None:
        raise error_handling.MissingContentException()

    appliers = utils.handle_diff_layers(
        'graphics,paragraph,keyterms,defined,formatting',
        label_id, versions.older, versions.newer)
    appliers += (diff,)
    return appliers
Example #8
0
def get_appliers(label_id, versions):
    diff = generator.get_diff_applier(label_id, versions.older, versions.newer)

    if diff is None:
        raise error_handling.MissingContentException()

    layer_creator = generator.DiffLayerCreator(versions.newer)
    layer_creator.add_layers(
        ['graphics', 'paragraph', 'keyterms', 'defined', 'formatting'],
        label_id, versions.older)
    return layer_creator.get_appliers() + (diff, )
Example #9
0
    def get_context_data(self, **kwargs):
        # We don't want to run the content data of PartialView -- it assumes
        # we will be applying layers
        context = super(PartialView, self).get_context_data(**kwargs)

        label_id = context['label_id']
        versions = Versions(context['version'], context['newer_version'],
                            self.request.GET.get('from_version'))

        tree = generator.get_tree_paragraph(label_id, versions.older)

        if tree is None:
            # TODO We need a more complicated check here to see if the diffs
            # add the requested section. If not -> 404
            tree = {}

        diff_applier = generator.get_diff_applier(label_id, versions.older,
                                                  versions.newer)
        if diff_applier is None:
            raise error_handling.MissingContentException()
        layers = list(generator.diff_layers(versions, label_id))

        builder = CFRHTMLBuilder(layers, diff_applier)
        builder.tree = tree
        builder.generate_html()

        child_of_root = builder.tree
        if builder.tree['node_type'] == REGTEXT:
            child_of_root = {
                'node_type': EMPTYPART,
                'children': [builder.tree]
            }
        context['tree'] = {'children': [child_of_root]}
        context['markup_page_type'] = 'diff'

        regpart = label_id.split('-')[0]
        old_toc = fetch_toc(regpart, versions.older)
        diff = generator.get_diff_json(regpart, versions.older, versions.newer)
        context['TOC'] = diff_toc(versions, old_toc, diff)
        context['navigation'] = self.footer_nav(label_id, context['TOC'],
                                                versions)
        return context
Example #10
0
    def get_context_data(self, **kwargs):
        # We don't want to run the content data of PartialView -- it assumes
        # we will be applying layers
        context = super(PartialView, self).get_context_data(**kwargs)

        label_id = context['label_id']
        versions = Versions(context['version'], context['newer_version'],
                            self.request.GET.get('from_version'))

        tree = generator.get_tree_paragraph(label_id, versions.older)

        if tree is None:
            # TODO We need a more complicated check here to see if the diffs
            # add the requested section. If not -> 404
            tree = {}

        diff_applier = generator.get_diff_applier(
            label_id, versions.older, versions.newer)
        if diff_applier is None:
            raise error_handling.MissingContentException()
        layers = list(generator.diff_layers(versions, label_id))

        builder = CFRHTMLBuilder(layers, diff_applier)
        builder.tree = tree
        builder.generate_html()

        child_of_root = builder.tree
        if builder.tree['node_type'] == REGTEXT:
            child_of_root = {
                'node_type': EMPTYPART,
                'children': [builder.tree]}
        context['tree'] = {'children': [child_of_root]}
        context['markup_page_type'] = 'diff'

        regpart = label_id.split('-')[0]
        old_toc = fetch_toc(regpart, versions.older)
        diff = generator.get_diff_json(regpart, versions.older, versions.newer)
        context['TOC'] = diff_toc(versions, old_toc, diff)
        context['navigation'] = self.footer_nav(
            label_id, context['TOC'], versions)
        return context