def test_whitespace_is_stripped(): from zam_repondeur.services.clean import clean_html assert clean_html(" foo ") == "foo"
def test_not_allowed_tags_are_removed(tag): from zam_repondeur.services.clean import clean_html html = f"<{tag}>foo</{tag}>" assert clean_html(html) == "foo"
def test_table_colspan_attributes_are_preserved(): from zam_repondeur.services.clean import clean_html html = '<table><tr><td colspan="2">foo</td></tr></table>' assert (clean_html(html) == '<table><tbody><tr><td colspan="2">foo</td></tr></tbody></table>')
def test_table_tags_are_preserved(): from zam_repondeur.services.clean import clean_html html = "<table><tr><td>foo</td></tr></table>" assert clean_html( html) == "<table><tbody><tr><td>foo</td></tr></tbody></table>"
def post(self) -> Response: avis = self.request.POST.get("avis", "") objet = clean_html(self.request.POST.get("objet", "")) reponse = clean_html(self.request.POST.get("reponse", "")) comments = clean_html(self.request.POST.get("comments", "")) avis_changed = avis != (self.amendement.user_content.avis or "") objet_changed = objet != (self.amendement.user_content.objet or "") reponse_changed = reponse != (self.amendement.user_content.reponse or "") comments_changed = comments != (self.amendement.user_content.comments or "") if not self.is_on_my_table: message = ("Les modifications n’ont PAS été enregistrées " "car l’amendement n’est plus sur votre table.") if self.amendement.location.user_table: message += (f" Il est actuellement sur la table de " f"{self.amendement.location.user_table.user}.") self.request.session.flash(Message(cls="danger", text=message)) return HTTPFound(location=self.my_table_url) for amendement in self.amendements: if avis_changed: AvisAmendementModifie.create(amendement=amendement, avis=avis, request=self.request) if objet_changed: ObjetAmendementModifie.create(amendement=amendement, objet=objet, request=self.request) if reponse_changed: ReponseAmendementModifiee.create(amendement=amendement, reponse=reponse, request=self.request) if comments_changed: CommentsAmendementModifie.create(amendement=amendement, comments=comments, request=self.request) amendement.stop_editing() self.request.session.flash( Message(cls="success", text="Les modifications ont bien été enregistrées.")) if "save-and-transfer" in self.request.POST: return HTTPFound(location=self.request.resource_url( self.context.lecture_resource, "transfer_amendements", query={ "n": [amendement.num for amendement in self.amendements], "from_save": 1, "back": self.back_url, }, )) else: self.request.session["highlighted_amdt"] = self.amendements[0].slug return HTTPFound(location=self.back_url)
def render_details(self) -> str: return Markup( clean_html( htmldiff(self.template_vars["old_value"], self.template_vars["new_value"])))
def _make_amendement(node: RestrictedElement, uid_map: Dict[str, Amendement], lecture: Lecture) -> Amendement: extract = partial(extract_from_node, node) subdiv = _parse_division(node) texte_uid = extract("identifiant", "saisine", "refTexteLegislatif") if texte_uid is None: raise ValueError("Missing refTexteLegislatif") is_gouvernemental = extract("signataires", "auteur", "typeAuteur") == "Gouvernement" if is_gouvernemental: auteur_name = Amendement.AUTEUR_GOUVERNEMENT groupe_name = None matricule = None else: auteur_uid = extract("signataires", "auteur", "acteurRef") if auteur_uid is None: raise ValueError("Missing auteur acteurRef") auteur_name = get_auteur_name(auteur_uid) matricule = auteur_uid groupe_uid = extract("signataires", "auteur", "groupePolitiqueRef") if groupe_uid is None: raise ValueError("Missing auteur groupePolitiqueRef") groupe_name = get_groupe_name(groupe_uid) check_same_lecture( lecture=lecture, texte_uid=texte_uid, partie=extract_partie(node), organe=extract("identifiant", "saisine", "organeExamen"), ) article, created = get_one_or_create( Article, lecture=lecture, type=subdiv.type_, num=subdiv.num, mult=subdiv.mult, pos=subdiv.pos, ) parent = get_parent(extract("amendementParent"), uid_map, lecture) amendement, created = get_one_or_create( Amendement, create_kwargs={ "article": article, "parent": parent }, lecture=lecture, num=to_int(extract("identifiant", "numero")), ) if not created: amendement.article = article amendement.parent = parent amendement.alinea = extract("pointeurFragmentTexte", "alinea", "numero") amendement.auteur = auteur_name amendement.matricule = matricule amendement.groupe = groupe_name amendement.date_depot = to_date(extract("dateDepot")) amendement.sort = get_sort(sort=extract("sort", "sortEnSeance"), etat=extract("etat")) amendement.corps = clean_html(extract("corps", "dispositif") or "") amendement.expose = clean_html(extract("corps", "exposeSommaire") or "") return amendement