def create_missing_textes(all_textes: Set[str]) -> None: from zam_repondeur.services.data import repository existing_textes = set( DBSession.query(Texte.chambre, Texte.session, Texte.legislature, Texte.numero) ) texte_refs = {repository.get_opendata_texte(uid) for uid in all_textes} new_texte_refs = { texte_ref for texte_ref in texte_refs if ( texte_ref.chambre, texte_ref.session, texte_ref.legislature, texte_ref.numero, ) not in existing_textes } for texte_ref in new_texte_refs: if texte_ref.date_depot is None: logger.warning("missing date_depot in TexteRef(uid=%r)", texte_ref.uid) continue Texte.create( type_=texte_ref.type_, chambre=texte_ref.chambre, session=texte_ref.session, legislature=texte_ref.legislature, numero=texte_ref.numero, date_depot=texte_ref.date_depot, )
def existing_texte(db): from zam_repondeur.models import Chambre, Texte, TypeTexte return Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.AN, numero=123, date_depot=date(2019, 9, 6), legislature=15, )
def test_fetch_all_commission(db): from zam_repondeur.models import Chambre, Dossier, Lecture, Phase, Texte, TypeTexte from zam_repondeur.services.fetch.senat.amendements import _fetch_all with transaction.manager: dossier = Dossier.create( senat_id="pjl17-583", titre="Liberté de choisir son avenir professionnel", slug="liberte-choisir-avenir-professionnel", ) texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=583, date_depot=date(2018, 6, 20), ) lecture = Lecture.create( phase=Phase.PREMIERE_LECTURE, texte=texte, titre="Première lecture – Commissions", organe=None, dossier=dossier, ) sample_data = read_sample_data("jeu_complet_commission_2017-2018_583.csv") responses.add( responses.GET, "https://www.senat.fr/amendements/commissions/2017-2018/583/jeu_complet_commission_2017-2018_583.csv", # noqa body=sample_data, status=200, ) items = _fetch_all(lecture) assert len(items) == 434 assert items[0] == { "Nature ": "Amt", "Numéro ": "COM-1", "Subdivision ": "Article 40", "Alinéa": "36", "Auteur ": "M. FORISSIER, rapporteur", "Au nom de ": "", "Date de dépôt ": "2018-06-21", "Dispositif ": "<body><p>Alinéa 36</p><p>Après le mot :</p><p>services</p><p>Insérer les mots :</p><p>ou à des partenariats</p><p></p></body> ", # noqa "Objet ": "<body><p>Cet amendement vise à inclure parmi les dépenses pouvant être déduites de la contribution financière annuelle, en plus des contrats de sous-traitance et de prestations, les <b>dépenses afférentes à des partenariats</b> avec les entreprises adaptées, les Esat et les travailleurs handicapés indépendants.</p><p>En effet, le nouveau mode de déduction des montants de ces contrats de la contribution annuelle risque de moins inciter les employeurs à leur conclusion. D'où l'intérêt d'élargir cette déduction aux autres actions qu'ils sont susceptibles de mener auprès des EA et des Esat notamment.</p></body> ", # noqa "Sort ": "Adopté", "Url amendement ": "//www.senat.fr/amendements/commissions/2017-2018/583/Amdt_COM-1.html", # noqa "Fiche Sénateur": "//www.senat.fr/senfic/forissier_michel14087w.html", }
def texte_plf_2020(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: return Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2019, numero=139, date_depot=date(2019, 11, 21), )
def texte_essoc2018_senat_premiere_lecture_commission_fond(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=259, date_depot=date(2018, 1, 31), ) return texte
def texte_plf2018_an_premiere_lecture(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=235, date_depot=date(2017, 9, 27), ) return texte
def texte_plfss2018_senat_premiere_lecture(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=63, date_depot=date(2017, 11, 6), ) return texte
def texte_essoc2018_an_premiere_lecture_seance_publique(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=575, date_depot=date(2018, 1, 18), ) return texte
def texte_essoc2018_an_premier_lecture_commission_fond(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=424, date_depot=date(2017, 11, 27), ) return texte
def texte_essoc2018_senat_premiere_lecture_seance_publique(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=330, date_depot=date(2018, 2, 22), ) return texte
def texte_plfss2018_an_lecture_definitive(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=434, date_depot=date(2017, 12, 1), ) return texte
def texte_plf2018_senat_nouvelle_lecture(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLSNR5S299B0172", type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=172, titre_long="projet de loi de finances pour 2018", titre_court="PLF pour 2018", date_depot=date(2017, 12, 18), ) return texte
def texte_plf2018_an_lecture_definitive(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLANR5L15B0506", type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=506, titre_long="projet de loi de finances pour 2018", titre_court="PLF pour 2018", date_depot=date(2017, 12, 19), ) return texte
def test_senat_ppl(self, db): from zam_repondeur.models import Chambre, Texte, TypeTexte from zam_repondeur.services.fetch.articles import get_possible_texte_urls with transaction.manager: texte = Texte.create( type_=TypeTexte.PROPOSITION, chambre=Chambre.SENAT, session=2017, numero=63, date_depot=date(2017, 10, 11), ) assert get_possible_texte_urls(texte) == [ "https://www.senat.fr/leg/ppl17-063.html" ]
def texte_senat(db): # TODO: reuse existing texte or better, create fixtures for PLF2019. from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="baz", type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=63, titre_long="long", titre_court="court", date_depot=date(2017, 10, 11), ) return texte
def texte_plfss2018_an_premiere_lecture(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLANR5L15B0269", type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=269, titre_long= "projet de loi de financement de la sécurité sociale pour 2018", titre_court="PLFSS pour 2018", date_depot=date(2017, 10, 11), ) return texte
def texte_plfss2018_senat_premiere_lecture(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLSNR5S299B0063", type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=63, titre_long= "projet de loi de financement de la sécurité sociale pour 2018", titre_court="PLFSS pour 2018", date_depot=date(2017, 11, 6), ) return texte
def test_assemblee_nationale_ppl(self, db): from zam_repondeur.models import Chambre, Texte, TypeTexte from zam_repondeur.services.fetch.articles import get_possible_texte_urls with transaction.manager: texte = Texte.create( type_=TypeTexte.PROPOSITION, chambre=Chambre.AN, legislature=15, numero=269, date_depot=date(2017, 10, 11), ) assert get_possible_texte_urls(texte) == [ "http://www.assemblee-nationale.fr/15/propositions/pion0269.asp", "http://www.assemblee-nationale.fr/15/ta-commission/r0269-a0.asp", ]
def texte_essoc2018_an_premiere_lecture_seance_publique(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLANR5L15BTC0575", type_=TypeTexte.PROJET, chambre=Chambre.AN, legislature=15, numero=575, titre_long= "projet de loi renforçant l'efficacité de l'administration pour une relation de confiance avec le public", # noqa titre_court= "Renforcement de l'efficacité de l'administration pour une relation de confiance avec le public", # noqa date_depot=date(2018, 1, 18), ) return texte
def texte_essoc2018_senat_premiere_lecture_seance_publique(db): from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="PRJLSNR5S299BTC0330", type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2017, numero=330, titre_long= "projet de loi renforçant l'efficacité de l'administration pour une relation de confiance avec le public", # noqa titre_court= "Renforcement de l'efficacité de l'administration pour une relation de confiance avec le public", # noqa date_depot=date(2018, 2, 22), ) return texte
def test_senat_ppl(self, db): from zam_repondeur.fetch.articles import get_possible_texte_urls from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="dummy-ppl-senat", type_=TypeTexte.PROPOSITION, chambre=Chambre.SENAT, session=2017, numero=63, titre_long="proposition de loi fictive", titre_court="PPL fictive", date_depot=date(2017, 10, 11), ) assert get_possible_texte_urls(texte) == [ "https://www.senat.fr/leg/ppl17-063.html" ]
def test_assemblee_nationale_ppl(self, db): from zam_repondeur.fetch.articles import get_possible_texte_urls from zam_repondeur.models import Chambre, Texte, TypeTexte with transaction.manager: texte = Texte.create( uid="dummy-ppl-an", type_=TypeTexte.PROPOSITION, chambre=Chambre.AN, legislature=15, numero=269, titre_long="proposition de loi fictive", titre_court="PPL fictive", date_depot=date(2017, 10, 11), ) assert get_possible_texte_urls(texte) == [ "http://www.assemblee-nationale.fr/15/propositions/pion0269.asp", "http://www.assemblee-nationale.fr/15/ta-commission/r0269-a0.asp", ]
def test_fetch_discussion_details(dossier_plfss2018): from zam_repondeur.models import ( Chambre, DBSession, Lecture, Phase, Texte, TypeTexte, ) from zam_repondeur.services.fetch.senat.derouleur import _fetch_discussion_details with transaction.manager: texte = Texte.create( type_=TypeTexte.PROJET, chambre=Chambre.SENAT, session=2016, numero=610, date_depot=date(2017, 1, 1), ) lecture = Lecture.create( phase=Phase.PREMIERE_LECTURE, texte=texte, titre="Numéro lecture – Titre lecture sénat", organe="PO744107", dossier=dossier_plfss2018, ) DBSession.add(lecture) json_data = json.loads(read_sample_data("liste_discussion_610.json")) responses.add( responses.GET, "https://www.senat.fr/encommission/2016-2017/610/liste_discussion.json", json=json_data, status=200, ) data = list(_fetch_discussion_details(lecture)) assert len(data) == 1 assert data[0][0] == json_data