def create_missing_dossiers_senat() -> None: """ Create new dossiers based on dossier_refs scraped from Sénat web site """ from zam_repondeur.services.data import repository known_senat_ids = _known_senat_ids() existing_senat_ids = _existing_senat_ids() existing_an_ids = _existing_an_ids() missing_senat_ids = known_senat_ids - existing_senat_ids for senat_id in missing_senat_ids: dossier_ref_senat = repository.get_senat_scraping_dossier_ref(senat_id) if dossier_ref_senat is None: continue # Check that we have not already created from the AN dossier_ref dossier_ref_an = find_matching_dossier_ref_an(dossier_ref_senat) if dossier_ref_an: if dossier_ref_an.uid in existing_an_ids: continue an_id = dossier_ref_an.uid if dossier_ref_an else None Dossier.create( an_id=an_id, senat_id=senat_id, titre=dossier_ref_senat.titre, slug=dossier_ref_senat.slug, )
def create_missing_dossiers_an() -> None: """ Create new dossiers based on dossier_refs in AN open data """ from zam_repondeur.services.data import repository known_an_ids = _known_an_ids() existing_an_ids = _existing_an_ids() existing_senat_ids = _existing_senat_ids() missing_an_ids = known_an_ids - existing_an_ids for an_id in missing_an_ids: dossier_ref_an = repository.get_opendata_dossier_ref(an_id) if dossier_ref_an is None: continue # Check that we have not already created from the Sénat dossier_ref dossier_ref_senat = find_matching_dossier_ref_senat(dossier_ref_an) if dossier_ref_senat: if dossier_ref_senat.uid in existing_senat_ids: continue senat_id = dossier_ref_senat.uid if dossier_ref_senat else None Dossier.create( an_id=an_id, senat_id=senat_id, titre=dossier_ref_an.titre, slug=dossier_ref_an.slug, )
def dossier_plf(db): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create(uid="DLR5L15N36733", titre="Budget : loi de finances 2019") return dossier
def dossier_plfss2018(db): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( uid="DLR5L15N36030", titre="Sécurité sociale : loi de financement 2018") return dossier
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 dossier_essoc2018(db): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( uid="DLR5L15N36159", titre= "Fonction publique : un Etat au service d'une société de confiance", ) return dossier
def dossier_plfss2019(db): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( an_id="DLR5L15N36892", titre="Sécurité sociale : loi de financement 2019", slug="plfss-2019", ) return dossier
def dossier_plf_2020(db): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( an_id="DLR5L15N37615", titre="Budget : loi de finances 2020", slug="loi-finances-2020", ) return dossier
def dossier_plfss2018(db, team_zam): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( an_id="DLR5L15N36030", titre="Sécurité sociale : loi de financement 2018", slug="plfss-2018", ) dossier.team = team_zam return dossier
def dossier_plf2018(db, team_zam): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( an_id="DLR5L15N35854", titre="Budget : loi de finances 2018", slug="loi-finances-2018", ) dossier.team = team_zam return dossier
def dossier_essoc2018(db, team_zam): from zam_repondeur.models import Dossier with transaction.manager: dossier = Dossier.create( an_id="DLR5L15N36159", titre= "Fonction publique : un Etat au service d'une société de confiance", slug="etat-service-societe-confiance", ) dossier.team = team_zam return dossier
def post(self) -> Response: dossier_slug = self._get_dossier_slug() if not dossier_slug: self.request.session.flash( Message(cls="error", text="Ce dossier n’existe pas.")) return HTTPFound(location=self.request.resource_url(self.context)) dossier = Dossier.get(slug=dossier_slug) if dossier is None: self.request.session.flash( Message(cls="error", text="Ce dossier n’existe pas.")) return HTTPFound(location=self.request.resource_url(self.context)) if dossier.team: self.request.session.flash( Message(cls="warning", text="Ce dossier appartient à une autre équipe…")) return HTTPFound(location=self.request.resource_url(self.context)) team = Team.create(name=dossier.slug) dossier.team = team for admin in DBSession.query(User).filter( User.admin_at.isnot(None) # type: ignore ): admin.teams.append(team) # Enqueue task to asynchronously add the lectures create_missing_lectures(dossier_pk=dossier.pk, user_pk=self.request.user.pk) DossierActive.create(dossier=dossier, request=self.request) self.request.session.flash( Message( cls="success", text=( "Dossier créé avec succès, lectures en cours de création." ), )) return HTTPFound( location=self.request.resource_url(self.context[dossier.url_key]))
def model(self, *options: Any) -> Dossier: dossier = Dossier.get(self.slug, *options) if dossier is None: raise ResourceNotFound(self) return dossier
def existing_dossier(self, db): from zam_repondeur.models import Dossier return Dossier.create(an_id="existant", titre="Titre initial", slug="titre-initial")