UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

234 lines (233 loc) 11.1 kB
import fs from "fs-extra"; import path from "path"; import assert from "assert"; export var EnabledDatasets; (function (EnabledDatasets) { EnabledDatasets[EnabledDatasets["None"] = 0] = "None"; EnabledDatasets[EnabledDatasets["Ameli"] = 1] = "Ameli"; EnabledDatasets[EnabledDatasets["Debats"] = 2] = "Debats"; EnabledDatasets[EnabledDatasets["DosLeg"] = 4] = "DosLeg"; EnabledDatasets[EnabledDatasets["Questions"] = 8] = "Questions"; EnabledDatasets[EnabledDatasets["Sens"] = 16] = "Sens"; EnabledDatasets[EnabledDatasets["PhotosSenateurs"] = 32] = "PhotosSenateurs"; EnabledDatasets[EnabledDatasets["Agenda"] = 64] = "Agenda"; EnabledDatasets[EnabledDatasets["All"] = 127] = "All"; })(EnabledDatasets || (EnabledDatasets = {})); export const datasets = { ameli: { database: "ameli", repairEncoding: true, repairZip: (dataset, dataDir) => { const sqlFilename = `${dataset.database}.sql`; const sqlFilePath = path.join(dataDir, sqlFilename); fs.removeSync(sqlFilePath); fs.moveSync(path.join(dataDir, "var", "opt", "opendata", sqlFilename), sqlFilePath); }, title: "Amendements", url: "https://data.senat.fr/data/ameli/ameli.zip", indexes: { amdsen: [ { name: "idx_amdid", columns: ["amdid"] }, { name: "idx_senid", columns: ["senid"] }, { name: "idx_grpid", columns: ["grpid"] }, ], sen_ameli: [{ name: "idx_entid", columns: ["entid"] }], grppol_ameli: [{ name: "idx_entid", columns: ["entid"] }], sub: [ { name: "idx_id", columns: ["id"] }, { name: "idx_typid", columns: ["typid"] }, { name: "idx_merid", columns: ["merid"] }, { name: "idx_comdelid", columns: ["comdelid"] }, ], typsub: [{ name: "idx_id", columns: ["id"] }], typrect: [{ name: "idx_id", columns: ["id"] }], txt_ameli: [ { name: "idx_id", columns: ["id"] }, { name: "idx_txtetaid", columns: ["txtetaid"] }, { name: "idx_sesdepid", columns: ["sesdepid"] }, { name: "idx_natid", columns: ["natid"] }, { name: "idx_lecid", columns: ["lecid"] }, ], etatxt: [{ name: "idx_id", columns: ["id"] }], ses: [ { name: "idx_id", columns: ["id"] }, { name: "idx_typid", columns: ["typid"] }, { name: "idx_ann", columns: ["ann"] }, ], typses: [{ name: "idx_id", columns: ["id"] }], nat: [{ name: "idx_id", columns: ["id"] }], lec_ameli: [{ name: "idx_id", columns: ["id"] }], mot: [{ name: "idx_id", columns: ["id"] }], avicom: [{ name: "idx_id", columns: ["id"] }], avigvt: [{ name: "idx_id", columns: ["id"] }], sor: [{ name: "idx_id", columns: ["id"] }], irr: [{ name: "idx_id", columns: ["id"] }], com_ameli: [{ name: "idx_entid", columns: ["entid"] }], cab: [{ name: "idx_entid", columns: ["entid"] }], amd: [ { name: "idx_subid", columns: ["subid"] }, { name: "idx_typrectid", columns: ["typrectid"] }, { name: "idx_txtid", columns: ["txtid"] }, { name: "idx_motid", columns: ["motid"] }, { name: "idx_avcid", columns: ["avcid"] }, { name: "idx_avgid", columns: ["avgid"] }, { name: "idx_sorid", columns: ["sorid"] }, { name: "idx_irrid", columns: ["irrid"] }, { name: "idx_nomentid", columns: ["nomentid"] }, ], }, }, debats: { database: "debats", repairEncoding: false, title: "Informations relatives aux comptes rendus intégraux de la séance publique", url: "https://data.senat.fr/data/debats/debats.zip", indexes: { secdis: [ { name: "idx_datsea", columns: ["datsea"] }, { name: "idx_typseccod", columns: ["typseccod"] }, ], intpjl: [{ name: "idx_secdiscle", columns: ["secdiscle"] }], secdivers: [ { name: "idx_datsea", columns: ["datsea"] }, { name: "idx_typseccod", columns: ["typseccod"] }, ], intdivers: [{ name: "idx_intdiverscle", columns: ["intdiverscle"] }], lecassdeb: [{ name: "idx_datsea", columns: ["datsea"] }], }, }, dosleg: { database: "dosleg", repairEncoding: false, title: "Dossiers législatifs", url: "https://data.senat.fr/data/dosleg/dosleg.zip", indexes: { amescr: [{ name: "idx_scrnum", columns: ["scrnum"] }], auteur: [{ name: "idx_autcod", columns: ["autcod"] }], corscr: [{ name: "idx_scrnum", columns: ["scrnum"] }], date_seance: [ { name: "idx_code", columns: ["code"] }, { name: "idx_lecidt", columns: ["lecidt"] }, ], deccoc: [{ name: "idx_deccoccod", columns: ["deccoccod"] }], etaloi: [{ name: "idx_etaloicod", columns: ["etaloicod"] }], lecass: [ { name: "idx_lecidt", columns: ["lecidt"] }, { name: "idx_codass", columns: ["codass"] }, { name: "idx_orgcod", columns: ["orgcod"] }, { name: "idx_orippr", columns: ["orippr"] }, ], lecassrap: [ { name: "idx_rapcod", columns: ["rapcod"] }, { name: "idx_lecassidt", columns: ["lecassidt"] }, ], lecture: [ { name: "idx_loicod", columns: ["loicod"] }, { name: "idx_typleccod", columns: ["typleccod"] }, { name: "idx_lecidt", columns: ["lecidt"] }, ], loi: [ { name: "idx_typloicod", columns: ["typloicod"] }, { name: "idx_etaloicod", columns: ["etaloicod"] }, { name: "idx_deccoccod", columns: ["deccoccod"] }, { name: "idx_loicod", columns: ["loicod"] }, ], loithe: [ { name: "idx_thecle", columns: ["thecle"] }, { name: "idx_loicod", columns: ["loicod"] }, ], posvot: [{ name: "idx_posvotcod", columns: ["posvotcod"] }], rap: [ { name: "idx_rapcod", columns: ["rapcod"] }, { name: "idx_coddenrap", columns: ["coddenrap"] }, ], rolsig: [{ name: "idx_signataire", columns: ["signataire"] }], scr: [ { name: "idx_code", columns: ["code"] }, { name: "idx_scrnum", columns: ["scrnum"] }, { name: "idx_sesann", columns: ["sesann"] }, ], stavot: [{ name: "idx_stavotidt", columns: ["stavotidt"] }], texte: [ { name: "idx_lecassidt", columns: ["lecassidt"] }, { name: "idx_oritxtcod", columns: ["oritxtcod"] }, { name: "idx_typtxtcod", columns: ["typtxtcod"] }, { name: "idx_texcod", columns: ["texcod"] }, ], the: [{ name: "idx_thecle", columns: ["thecle"] }], titsen: [{ name: "idx_titsencod", columns: ["titsencod"] }], typloi: [{ name: "idx_typloicod", columns: ["typloicod"] }], typtxt: [{ name: "idx_typtxtcod", columns: ["typtxtcod"] }], votsen: [ { name: "idx_scrnum", columns: ["scrnum"] }, { name: "idx_sesann", columns: ["sesann"] }, { name: "idx_titsencod", columns: ["titsencod"] }, { name: "idx_stavotidt", columns: ["stavotidt"] }, { name: "idx_posvotcod", columns: ["posvotcod"] }, { name: "idx_senmat", columns: ["senmat"] }, ], }, }, questions: { database: "questions", repairEncoding: false, title: "Questions écrites et orales posées par les sénateurs au Gouvernement", url: "https://data.senat.fr/data/questions/questions.zip", indexes: { tam_reponses: [{ name: "idx_idque", columns: ["idque"] }], tam_questions: [ { name: "idx_sorquecod", columns: ["sorquecod"] }, { name: "idx_etaquecod", columns: ["etaquecod"] }, ], the: [{ name: "idx_thenouidt", columns: ["thenouidt"] }], sortquestion: [{ name: "idx_sorquecod", columns: ["sorquecod"] }], etatquestion: [{ name: "idx_etaquecod", columns: ["etaquecod"] }], }, }, sens: { database: "sens", repairEncoding: false, repairZip: (dataset, dataDir) => { const sqlFilename = `${dataset.database}.sql`; const sqlFilePath = path.join(dataDir, sqlFilename); fs.removeSync(sqlFilePath); fs.moveSync(path.join(dataDir, "export_sens.sql"), sqlFilePath); }, title: "Sénateurs (y compris organes et présence)", url: "https://data.senat.fr/data/senateurs/export_sens.zip", indexes: { dpt: [ { name: "idx_dptnum", columns: ["dptnum"] }, { name: "idx_regcod", columns: ["regcod"] }, ], activite_loi: [{ name: "idx_actid", columns: ["actid"] }], activite_delegation: [{ name: "idx_actid", columns: ["actid"] }], activite_participant: [{ name: "idx_senmat", columns: ["senmat"] }], activite_senateur: [{ name: "idx_senmat", columns: ["senmat"] }], senbur: [ { name: "idx_senmat", columns: ["senmat"] }, { name: "idx_burcod", columns: ["burcod"] }, ], elucan: [ { name: "idx_senmat", columns: ["senmat"] }, { name: "idx_typmancod", columns: ["typmancod"] }, ], }, }, }; export function getEnabledDatasets(categories) { categories.map((datasetName) => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`)); return categories.reduce((enabledDatasets, datasetName) => { const enabledDataset = EnabledDatasets[datasetName]; return enabledDatasets | (enabledDataset || EnabledDatasets.None); }, EnabledDatasets.None); } export function getChosenDatasets(enabledDatasets) { return [ enabledDatasets & EnabledDatasets.Ameli ? datasets.ameli : null, enabledDatasets & EnabledDatasets.Debats ? datasets.debats : null, enabledDatasets & EnabledDatasets.DosLeg ? datasets.dosleg : null, enabledDatasets & EnabledDatasets.Questions ? datasets.questions : null, enabledDatasets & EnabledDatasets.Sens ? datasets.sens : null, ].filter((dataset) => dataset !== null); }