def parse_from_json(amend: dict, position: int, session: str, num_texte: int, organe: str, subdiv: dict) -> Amendement: num, rectif = Amendement.parse_num(amend["num"]) subdiv_type, subdiv_num, subdiv_mult, subdiv_pos = _parse_subdiv( subdiv["libelle_subdivision"]) return Amendement( # type: ignore chambre="senat", session=session, num_texte=num_texte, organe=organe, subdiv_type=subdiv_type, subdiv_num=subdiv_num, subdiv_mult=subdiv_mult, subdiv_pos=subdiv_pos, num=num, rectif=rectif, alinea=amend["libelleAlinea"], auteur=amend["auteur"], matricule=(extract_matricule(amend["urlAuteur"]) if amend["auteur"] != "LE GOUVERNEMENT" else None), sort=amend.get("sort"), position=position, identique=parse_bool(amend["isIdentique"]), discussion_commune=(int(amend["idDiscussionCommune"]) if parse_bool( amend["isDiscussionCommune"]) else None), )
def _enrich_one(amend: Amendement, amend_discussion: Optional[Amendement]) -> Amendement: if amend_discussion is None: return amend return amend.replace({ "position": amend_discussion.position, "discussion_commune": amend_discussion.discussion_commune, "identique": amend_discussion.identique, })
def test_fetch_amendement(app): from zam_repondeur.fetch.an.amendements import fetch_amendement from zam_repondeur.fetch.models import Amendement responses.add( responses.GET, build_url(14, 4072, 177), body=read_sample_data("an_177.xml"), status=200, ) amendement = fetch_amendement( legislature=14, texte=4072, numero=177, organe="PO717460", groups_folder=SAMPLE_DATA_DIR, position=1, ) assert amendement == Amendement( chambre="an", session="14", num_texte=4072, organe="PO717460", subdiv_type="article", subdiv_num="3", subdiv_mult="", subdiv_pos="", alinea="", num=177, rectif=0, auteur="Door Jean-Pierre", matricule="267289", groupe="Les Républicains", date_depot=None, sort="rejeté", position=1, discussion_commune=None, identique=None, parent_num=0, parent_rectif=0, dispositif="<p>Supprimer cet article.</p>", objet= "<p>Amendement d’appel.</p>\n<p>Pour couvrir les dépassements attendus de l’ONDAM pour 2016, cet article prévoit un prélèvement de 200 millions d’€ sur les fonds de roulement de l’association nationale pour la formation permanente du personnel hospitalier (ANFH) et du fonds pour l’emploi hospitalier (FEH) pour financer le <span>fonds pour la modernisation des établissements de santé publics et privés</span>(FMESPP) en remplacement de crédit de l’ONDAM. Il participe donc à la présentation insincère de la construction de l’ONDAM, dénoncée par le Comité d’alerte le 12 octobre dernier.</p>", # noqa resume=None, avis=None, observations=None, reponse=None, ) assert amendement.parent is None
def test_subdiv_disp(type_, pos, num, mult, output): from zam_repondeur.fetch.models import Amendement amendement = Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO717460", subdiv_type=type_, subdiv_num=num, subdiv_mult=mult, subdiv_pos=pos, num=num, ) assert amendement.subdiv_disp == output
def parse_from_csv(row: dict, session: str, num_texte: int, organe: str) -> Amendement: num, rectif = Amendement.parse_num(row["Numéro "]) subdiv_type, subdiv_num, subdiv_mult, subdiv_pos = _parse_subdiv( row["Subdivision "]) return Amendement( # type: ignore chambre="senat", session=session, num_texte=num_texte, organe=organe, num=num, rectif=rectif, subdiv_type=subdiv_type, subdiv_num=subdiv_num, subdiv_mult=subdiv_mult, subdiv_pos=subdiv_pos, alinea=row["Alinéa"].strip(), auteur=row["Auteur "], matricule=extract_matricule(row["Fiche Sénateur"]), date_depot=parse_date(row["Date de dépôt "]), sort=row["Sort "], dispositif=clean_html(row["Dispositif "]), objet=clean_html(row["Objet "]), )
def test_num_disp(text, num, rectif): from zam_repondeur.fetch.models import Amendement amendement = Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO717460", subdiv_type="article", subdiv_num="1", alinea="", num=num, rectif=rectif, auteur="M. Dupont", ) assert amendement.num_disp == text assert amendement.subdiv_disp == "Art. 1"
def _make_amendement(node: etree.Element, uid_map: Dict[str, Amendement]) -> 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") auteur_uid = extract("signataires", "auteur", "acteurRef") if auteur_uid is None: raise ValueError("Missing auteur acteurRef") groupe_uid = extract("signataires", "auteur", "groupePolitiqueRef") if groupe_uid is None: raise ValueError("Missing auteur groupePolitiqueRef") parent_num, parent_rectif = get_parent(extract("amendementParent"), uid_map) return Amendement( # type: ignore chambre=Chambre.AN.value, session=extract("identifiant", "legislature"), num_texte=get_texte_number(texte_uid), organe=extract("identifiant", "saisine", "organeExamen"), subdiv_type=subdiv.type_, subdiv_num=subdiv.num, subdiv_mult=subdiv.mult, subdiv_pos=subdiv.pos, alinea=to_int(extract("pointeurFragmentTexte", "alinea", "numero")), num=to_int(extract("identifiant", "numero")), auteur=get_auteur_name(auteur_uid), matricule=auteur_uid, groupe=get_groupe_name(groupe_uid), date_depot=to_date(extract("dateDepot")), sort=get_sort(sort=extract("sort", "sortEnSeance"), etat=extract("etat")), parent_num=parent_num, parent_rectif=parent_rectif, dispositif=clean_html(extract("corps", "dispositif") or ""), objet=clean_html(extract("corps", "exposeSommaire") or ""), )
def amendements(): from zam_repondeur.fetch.models import Amendement return [ Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO78718", subdiv_type="article", subdiv_num="1", alinea="", num=42, auteur="M. DUPONT", groupe="RDSE", matricule="000000", dispositif="<p>L'article 1 est supprimé.</p>", objet="<p>Cet article va à l'encontre du principe d'égalité.</p>", resume="Suppression de l'article", ), Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO78718", subdiv_type="article", subdiv_num="1", subdiv_pos="avant", alinea="", num=57, auteur="M. DURAND", groupe="Les Républicains", matricule="000001", objet="baz", dispositif="qux", ), Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO78718", subdiv_type="article", subdiv_num="7", subdiv_mult="bis", alinea="", num=21, auteur="M. MARTIN", groupe=None, matricule="000002", objet="quux", dispositif="quuz", ), Amendement( chambre="senat", session="2017-2018", num_texte=63, organe="PO78718", subdiv_type="article", subdiv_num="1", alinea="", num=43, auteur="M. JEAN", groupe="Les Indépendants", matricule="000003", objet="corge", dispositif="grault", ), ]
def test_parse_num_commissions(text, num, rectif): from zam_repondeur.fetch.models import Amendement assert Amendement.parse_num(text) == (num, rectif)