示例#1
0
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,
        )
示例#2
0
def create_or_update_lecture(dossier: Dossier, lecture_ref: LectureRef,
                             user: Optional[User]) -> bool:
    changed = False

    lecture_created = False
    lecture_updated = False

    texte = Texte.get_or_create_from_ref(lecture_ref.texte,
                                         lecture_ref.chambre)

    lecture = Lecture.get_from_ref(lecture_ref, dossier)

    if lecture is not None and lecture.texte is not texte:
        # We probably created the Lecture before a new Texte was adopted
        # by the commission. Time to update with the final one!
        TexteMisAJour.create(lecture=lecture, texte=texte)
        lecture_updated = True

    if lecture is None:
        lecture = Lecture.create_from_ref(lecture_ref, dossier, texte)
        LectureCreee.create(lecture=lecture, user=user)
        lecture_created = True

    if lecture_created or lecture_updated:
        changed = True

        # Make sure the lecture gets its primary key.
        DBSession.flush()

        # Enqueue tasks to fetch articles and amendements.
        huey.enqueue_on_transaction_commit(fetch_articles.s(lecture.pk))
        huey.enqueue_on_transaction_commit(fetch_amendements.s(lecture.pk))

    return changed
示例#3
0
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,
    )
示例#4
0
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&#233;a 36</p><p>Apr&#232;s le mot :</p><p>services</p><p>Ins&#233;rer les mots :</p><p>ou &#224; des partenariats</p><p></p></body>                                                                                                                                                                                                                ",  # noqa
        "Objet ":
        "<body><p>Cet amendement vise &#224; inclure parmi les d&#233;penses pouvant &#234;tre d&#233;duites de la contribution financi&#232;re annuelle, en plus des contrats de sous-traitance et de prestations, les <b>d&#233;penses aff&#233;rentes &#224; des partenariats</b> avec les entreprises adapt&#233;es, les Esat et les travailleurs handicap&#233;s ind&#233;pendants.</p><p>En effet, le nouveau mode de d&#233;duction des montants de ces contrats de la contribution annuelle risque de moins inciter les employeurs &#224; leur conclusion. D'o&#249; l'int&#233;r&#234;t d'&#233;largir cette d&#233;duction aux autres actions qu'ils sont susceptibles de mener aupr&#232;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",
    }
示例#5
0
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),
        )
示例#6
0
文件: plf2018.py 项目: betagouv/zam
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
示例#7
0
文件: essoc2018.py 项目: betagouv/zam
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
示例#8
0
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
示例#9
0
文件: essoc2018.py 项目: betagouv/zam
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
示例#10
0
文件: essoc2018.py 项目: betagouv/zam
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
示例#11
0
文件: essoc2018.py 项目: betagouv/zam
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
示例#12
0
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
示例#13
0
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
示例#14
0
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
示例#15
0
    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"
        ]
示例#16
0
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
示例#17
0
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
示例#18
0
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
示例#19
0
    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",
        ]
示例#20
0
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
示例#21
0
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
示例#22
0
    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"
        ]
示例#23
0
    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",
        ]
示例#24
0
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