def get_context_data(self, **kwargs): context = super(ParagraphSXSView, self).get_context_data(**kwargs) label_id = context['label_id'] notice_id = context['notice_id'] fr_page = context.get('fr_page') notice = generator.get_notice(notice_id) if not notice: raise error_handling.MissingContentException() notice = convert_to_python(notice) paragraph_sxs = generator.get_sxs(label_id, notice, fr_page) if paragraph_sxs is None: raise error_handling.MissingContentException() notices.add_depths(paragraph_sxs, 3) paragraph_sxs['children'] =\ notices.filter_labeled_children(paragraph_sxs) self.footnote_refs(paragraph_sxs) context['sxs'] = paragraph_sxs # Template assumes a single label context['sxs']['label'] = context['label_id'] context['sxs']['header'] = label_to_text(label_id.split('-'), include_marker=True) context['sxs']['all_footnotes'] = self.footnotes(notice, paragraph_sxs) context['notice'] = notice context['further_analyses'] = self.further_analyses( label_id, notice_id, paragraph_sxs['page'], context['version']) return context
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 fill_kwargs(self, kwargs): """Add the version and replace the label_id for the chrome context""" reg_part = kwargs['label_id'] if not regulation_exists(reg_part): raise error_handling.MissingContentException() current, _ = get_versions(kwargs['label_id']) kwargs['version'] = current['version'] kwargs['label_id'] = utils.first_section(reg_part, current['version']) return kwargs
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
def get_context_data(self, **kwargs): """Add the version and replace the label_id for the chrome context""" reg_part = kwargs['label_id'] if not regulation_exists(reg_part): raise error_handling.MissingContentException() current, _ = get_versions(kwargs['label_id']) kwargs['version'] = current['version'] kwargs['label_id'] = utils.first_section(reg_part, current['version']) return super(ChromeLandingView, self).get_context_data(**kwargs)
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, )
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
def get_context_data(self, **kwargs): context = super(ParagraphSXSView, self).get_context_data(**kwargs) label_id = context['label_id'] part = label_id.split('-')[0] notice_id = context['notice_id'] fr_page = context.get('fr_page') version = context.get('version', notice_id) # Try first to get the notice and SxS with the version. try: notice, paragraph_sxs = generator.get_notice_and_sxs( part, version, label_id, fr_page) except TypeError: raise Http404 if notice is None or paragraph_sxs is None: # If that didn't work, try again with the notice_id notice, paragraph_sxs = generator.get_notice_and_sxs( part, notice_id, label_id, fr_page) if notice is None or paragraph_sxs is None: raise error_handling.MissingContentException() notices.add_depths(paragraph_sxs, 3) paragraph_sxs['children'] =\ notices.filter_labeled_children(paragraph_sxs) self.footnote_refs(paragraph_sxs) context['sxs'] = paragraph_sxs # Template assumes a single label context['sxs']['label'] = context['label_id'] context['sxs']['header'] = label_to_text(label_id.split('-'), include_marker=True) context['sxs']['all_footnotes'] = self.footnotes(notice, paragraph_sxs) context['notice'] = notice context['further_analyses'] = self.further_analyses( label_id, notice_id, context['version'], paragraph_sxs.get('page')) return context
def set_chrome_context(self, context, reg_part, version): context['reg_part'] = reg_part context['history'] = fetch_grouped_history(reg_part) toc = fetch_toc(reg_part, version) for el in toc: el['url'] = SectionUrl().of(el['index'], version, self.partial_class.sectional_links) for sub in el.get('sub_toc', []): sub['url'] = SectionUrl().of( sub['index'], version, self.partial_class.sectional_links) context['TOC'] = toc context['meta'] = utils.regulation_meta(reg_part, version) # Throw 404 if regulation doesn't exist if not context['meta']: raise error_handling.MissingContentException() context['version_span'] = version_span( context['history'], context['meta']['effective_date']) context['version_switch_view'] = self.version_switch_view context['diff_redirect_label'] = self.diff_redirect_label( context['label_id'], toc)