@tricoteuses/senat
Version:
Handle French Sénat's open data
79 lines (78 loc) • 3.39 kB
JavaScript
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);
}