Esempio n. 1
0
def test_whitespace_is_stripped():
    from zam_repondeur.services.clean import clean_html

    assert clean_html(" foo   ") == "foo"
Esempio n. 2
0
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"
Esempio n. 3
0
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>')
Esempio n. 4
0
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>"
Esempio n. 5
0
    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)
Esempio n. 6
0
 def render_details(self) -> str:
     return Markup(
         clean_html(
             htmldiff(self.template_vars["old_value"],
                      self.template_vars["new_value"])))
Esempio n. 7
0
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