UNPKG

@tricoteuses/senat

Version:

Handle French Sénat's open data

45 lines (44 loc) 2.22 kB
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); });