UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

79 lines (78 loc) 3.39 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["All"] = 63] = "All"; })(EnabledDatasets || (EnabledDatasets = {})); export const datasets = { ameli: { database: "ameli", repairEncoding: false, 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); }, schema: "public", title: "Amendements", url: "https://data.senat.fr/data/ameli/ameli.zip", }, debats: { database: "debats", repairEncoding: true, schema: "public", title: "Informations relatives aux comptes rendus intégraux de la séance publique", url: "https://data.senat.fr/data/debats/debats.zip", }, dosleg: { database: "dosleg", repairEncoding: true, schema: "public", title: "Dossiers législatifs", url: "https://data.senat.fr/data/dosleg/dosleg.zip", }, questions: { database: "questions", repairEncoding: true, schema: "questions", title: "Questions écrites et orales posées par les sénateurs au Gouvernement", url: "https://data.senat.fr/data/questions/questions.zip", }, sens: { database: "sens", repairEncoding: true, 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); }, schema: "public", title: "Sénateurs (y compris organes et présence)", url: "https://data.senat.fr/data/senateurs/export_sens.zip", }, }; export function getEnabledDatasets(categories) { categories.map((datasetName) => assert.notStrictEqual(EnabledDatasets[datasetName], undefined, `Unknown name of dataset: ${datasetName}`)); return categories.reduce((enabledDatasets, datasetName) => enabledDatasets | EnabledDatasets[datasetName], EnabledDatasets.None); } export function getChosenFromEnabledDatasets(categories) { const enabledDatasets = getEnabledDatasets(categories); 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); }