@tricoteuses/senat
Version:
Handle French Sénat's open data
45 lines (44 loc) • 2.22 kB
JavaScript
import assert from "assert";
import commandLineArgs from "command-line-args";
import fs from "fs-extra";
import path from "path";
import { iterFilePaths, TEXTE_FOLDER, DATA_ORIGINAL_FOLDER, DATA_TRANSFORMED_FOLDER, } from "../loaders";
import { parseExposeDesMotifsFromFile, parseTexteFromFile, } from "../model/texte";
import { commonOptions } from "./shared/cli_helpers";
import { ensureAndClearDir } from "./shared/util";
const optionsDefinitions = [...commonOptions];
const options = commandLineArgs(optionsDefinitions);
async function main() {
const dataDir = options["dataDir"];
assert(dataDir, "Missing argument: data directory");
const transformedTextesDir = path.join(options["dataDir"], TEXTE_FOLDER, DATA_TRANSFORMED_FOLDER);
ensureAndClearDir(transformedTextesDir);
for (const filePath of iterFilePaths(path.join(dataDir, TEXTE_FOLDER, DATA_ORIGINAL_FOLDER))) {
const parsedFilePath = path.parse(filePath);
if (parsedFilePath.ext !== ".xml") {
continue;
}
const texteDirFromOriginal = parsedFilePath.dir.substring(filePath.indexOf(DATA_ORIGINAL_FOLDER) + DATA_ORIGINAL_FOLDER.length);
const transformedTexteDir = path.join(transformedTextesDir, texteDirFromOriginal);
fs.ensureDirSync(transformedTexteDir);
if (!options["silent"]) {
console.log(`Parsing texte ${parsedFilePath.name}.xml…`);
}
const parsedTexte = await parseTexteFromFile(filePath);
const exposeDesMotifsFileName = `${parsedFilePath.name}-expose`;
const exposeDesMotifsFilePath = path.join(parsedFilePath.dir, `${exposeDesMotifsFileName}.html`);
if (parsedTexte && fs.existsSync(exposeDesMotifsFilePath)) {
if (!options["silent"]) {
console.log(`Parsing exposé des motifs ${exposeDesMotifsFileName}.html…`);
}
parsedTexte.exposeDesMotifs = await parseExposeDesMotifsFromFile(exposeDesMotifsFilePath);
}
fs.writeJSONSync(path.join(transformedTexteDir, `${parsedFilePath.name}.json`), parsedTexte, { spaces: 2 });
}
}
main()
.then(() => process.exit(0))
.catch((error) => {
console.log(error);
process.exit(1);
});