@tricoteuses/senat 2.22.16 → 2.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/README.md +168 -0
  2. package/lib/aggregates.d.ts +52 -0
  3. package/lib/aggregates.js +930 -0
  4. package/lib/aggregates.mjs +713 -0
  5. package/lib/aggregates.ts +833 -0
  6. package/lib/config.d.ts +10 -0
  7. package/lib/config.js +16 -0
  8. package/lib/config.mjs +16 -0
  9. package/lib/config.ts +26 -0
  10. package/lib/databases.d.ts +2 -0
  11. package/lib/databases.js +26 -0
  12. package/lib/databases.mjs +57 -0
  13. package/lib/databases.ts +71 -0
  14. package/lib/datasets.d.ts +34 -0
  15. package/lib/datasets.js +233 -0
  16. package/lib/datasets.mjs +78 -0
  17. package/lib/datasets.ts +118 -0
  18. package/lib/fields.d.ts +10 -0
  19. package/lib/fields.js +68 -0
  20. package/lib/fields.mjs +22 -0
  21. package/lib/fields.ts +29 -0
  22. package/lib/git.d.ts +26 -0
  23. package/lib/git.js +167 -0
  24. package/lib/index.d.ts +13 -0
  25. package/lib/index.js +1 -0
  26. package/lib/index.mjs +7 -0
  27. package/lib/index.ts +64 -0
  28. package/lib/inserters.d.ts +98 -0
  29. package/lib/inserters.js +500 -0
  30. package/lib/inserters.mjs +360 -0
  31. package/lib/inserters.ts +521 -0
  32. package/lib/legislatures.json +38 -0
  33. package/lib/loaders.d.ts +58 -0
  34. package/lib/loaders.js +286 -0
  35. package/lib/loaders.mjs +158 -0
  36. package/lib/loaders.ts +271 -0
  37. package/lib/model/agenda.d.ts +6 -0
  38. package/lib/model/agenda.js +148 -0
  39. package/lib/model/ameli.d.ts +51 -0
  40. package/lib/model/ameli.js +149 -0
  41. package/lib/model/ameli.mjs +84 -0
  42. package/lib/model/ameli.ts +100 -0
  43. package/lib/model/commission.d.ts +18 -0
  44. package/lib/model/commission.js +269 -0
  45. package/lib/model/debats.d.ts +67 -0
  46. package/lib/model/debats.js +95 -0
  47. package/lib/model/debats.mjs +43 -0
  48. package/lib/model/debats.ts +68 -0
  49. package/lib/model/documents.d.ts +12 -0
  50. package/lib/model/documents.js +151 -0
  51. package/lib/model/dosleg.d.ts +7 -0
  52. package/lib/model/dosleg.js +326 -0
  53. package/lib/model/dosleg.mjs +196 -0
  54. package/lib/model/dosleg.ts +240 -0
  55. package/lib/model/index.d.ts +7 -0
  56. package/lib/model/index.js +7 -0
  57. package/lib/model/index.mjs +5 -0
  58. package/lib/model/index.ts +15 -0
  59. package/lib/model/questions.d.ts +45 -0
  60. package/lib/model/questions.js +89 -0
  61. package/lib/model/questions.mjs +71 -0
  62. package/lib/model/questions.ts +93 -0
  63. package/lib/model/scrutins.d.ts +13 -0
  64. package/lib/model/scrutins.js +114 -0
  65. package/lib/model/seance.d.ts +3 -0
  66. package/lib/model/seance.js +267 -0
  67. package/lib/model/sens.d.ts +146 -0
  68. package/lib/model/sens.js +454 -0
  69. package/lib/model/sens.mjs +415 -0
  70. package/lib/model/sens.ts +516 -0
  71. package/lib/model/texte.d.ts +7 -0
  72. package/lib/model/texte.js +256 -0
  73. package/lib/model/texte.mjs +208 -0
  74. package/lib/model/texte.ts +229 -0
  75. package/lib/model/util.d.ts +9 -0
  76. package/lib/model/util.js +38 -0
  77. package/lib/model/util.mjs +19 -0
  78. package/lib/model/util.ts +32 -0
  79. package/lib/parsers/texte.d.ts +7 -0
  80. package/lib/parsers/texte.js +228 -0
  81. package/lib/raw_types/ameli.d.ts +914 -0
  82. package/lib/raw_types/ameli.js +5 -0
  83. package/lib/raw_types/ameli.mjs +163 -0
  84. package/lib/raw_types/debats.d.ts +207 -0
  85. package/lib/raw_types/debats.js +5 -0
  86. package/lib/raw_types/debats.mjs +58 -0
  87. package/lib/raw_types/dosleg.d.ts +1619 -0
  88. package/lib/raw_types/dosleg.js +5 -0
  89. package/lib/raw_types/dosleg.mjs +438 -0
  90. package/lib/raw_types/questions.d.ts +419 -0
  91. package/lib/raw_types/questions.js +5 -0
  92. package/lib/raw_types/questions.mjs +11 -0
  93. package/lib/raw_types/senat.d.ts +11368 -0
  94. package/lib/raw_types/senat.js +5 -0
  95. package/lib/raw_types/sens.d.ts +8248 -0
  96. package/lib/raw_types/sens.js +5 -0
  97. package/lib/raw_types/sens.mjs +508 -0
  98. package/lib/raw_types_kysely/ameli.d.ts +915 -0
  99. package/lib/raw_types_kysely/ameli.js +7 -0
  100. package/lib/raw_types_kysely/ameli.mjs +5 -0
  101. package/lib/raw_types_kysely/ameli.ts +951 -0
  102. package/lib/raw_types_kysely/debats.d.ts +207 -0
  103. package/lib/raw_types_kysely/debats.js +7 -0
  104. package/lib/raw_types_kysely/debats.mjs +5 -0
  105. package/lib/raw_types_kysely/debats.ts +222 -0
  106. package/lib/raw_types_kysely/dosleg.d.ts +3532 -0
  107. package/lib/raw_types_kysely/dosleg.js +7 -0
  108. package/lib/raw_types_kysely/dosleg.mjs +5 -0
  109. package/lib/raw_types_kysely/dosleg.ts +3621 -0
  110. package/lib/raw_types_kysely/questions.d.ts +414 -0
  111. package/lib/raw_types_kysely/questions.js +7 -0
  112. package/lib/raw_types_kysely/questions.mjs +5 -0
  113. package/lib/raw_types_kysely/questions.ts +426 -0
  114. package/lib/raw_types_kysely/sens.d.ts +4394 -0
  115. package/lib/raw_types_kysely/sens.js +7 -0
  116. package/lib/raw_types_kysely/sens.mjs +5 -0
  117. package/lib/raw_types_kysely/sens.ts +4499 -0
  118. package/lib/raw_types_schemats/ameli.d.ts +539 -0
  119. package/lib/raw_types_schemats/ameli.js +2 -0
  120. package/lib/raw_types_schemats/ameli.mjs +2 -0
  121. package/lib/raw_types_schemats/ameli.ts +601 -0
  122. package/lib/raw_types_schemats/debats.d.ts +127 -0
  123. package/lib/raw_types_schemats/debats.js +2 -0
  124. package/lib/raw_types_schemats/debats.mjs +2 -0
  125. package/lib/raw_types_schemats/debats.ts +145 -0
  126. package/lib/raw_types_schemats/dosleg.d.ts +977 -0
  127. package/lib/raw_types_schemats/dosleg.js +2 -0
  128. package/lib/raw_types_schemats/dosleg.mjs +2 -0
  129. package/lib/raw_types_schemats/dosleg.ts +2193 -0
  130. package/lib/raw_types_schemats/questions.d.ts +235 -0
  131. package/lib/raw_types_schemats/questions.js +2 -0
  132. package/lib/raw_types_schemats/questions.mjs +2 -0
  133. package/lib/raw_types_schemats/questions.ts +249 -0
  134. package/lib/raw_types_schemats/sens.d.ts +6915 -0
  135. package/lib/raw_types_schemats/sens.js +2 -0
  136. package/lib/raw_types_schemats/sens.mjs +2 -0
  137. package/lib/raw_types_schemats/sens.ts +2907 -0
  138. package/lib/scripts/convert_data.d.ts +1 -0
  139. package/lib/scripts/convert_data.js +354 -0
  140. package/lib/scripts/convert_data.mjs +181 -0
  141. package/lib/scripts/convert_data.ts +243 -0
  142. package/lib/scripts/data-download.d.ts +1 -0
  143. package/lib/scripts/data-download.js +12 -0
  144. package/lib/scripts/datautil.d.ts +8 -0
  145. package/lib/scripts/datautil.js +34 -0
  146. package/lib/scripts/datautil.mjs +16 -0
  147. package/lib/scripts/datautil.ts +19 -0
  148. package/lib/scripts/images/transparent_150x192.jpg +0 -0
  149. package/lib/scripts/images/transparent_155x225.jpg +0 -0
  150. package/lib/scripts/parse_textes.d.ts +1 -0
  151. package/lib/scripts/parse_textes.js +44 -0
  152. package/lib/scripts/parse_textes.mjs +46 -0
  153. package/lib/scripts/parse_textes.ts +65 -0
  154. package/lib/scripts/retrieve_agenda.d.ts +1 -0
  155. package/lib/scripts/retrieve_agenda.js +132 -0
  156. package/lib/scripts/retrieve_cr_commission.d.ts +1 -0
  157. package/lib/scripts/retrieve_cr_commission.js +364 -0
  158. package/lib/scripts/retrieve_cr_seance.d.ts +6 -0
  159. package/lib/scripts/retrieve_cr_seance.js +347 -0
  160. package/lib/scripts/retrieve_documents.d.ts +3 -0
  161. package/lib/scripts/retrieve_documents.js +219 -0
  162. package/lib/scripts/retrieve_documents.mjs +249 -0
  163. package/lib/scripts/retrieve_documents.ts +298 -0
  164. package/lib/scripts/retrieve_open_data.d.ts +1 -0
  165. package/lib/scripts/retrieve_open_data.js +315 -0
  166. package/lib/scripts/retrieve_open_data.mjs +217 -0
  167. package/lib/scripts/retrieve_open_data.ts +268 -0
  168. package/lib/scripts/retrieve_senateurs_photos.d.ts +1 -0
  169. package/lib/scripts/retrieve_senateurs_photos.js +147 -0
  170. package/lib/scripts/retrieve_senateurs_photos.mjs +147 -0
  171. package/lib/scripts/retrieve_senateurs_photos.ts +177 -0
  172. package/lib/scripts/retrieve_videos.d.ts +1 -0
  173. package/lib/scripts/retrieve_videos.js +461 -0
  174. package/lib/scripts/shared/cli_helpers.d.ts +95 -0
  175. package/lib/scripts/shared/cli_helpers.js +91 -0
  176. package/lib/scripts/shared/cli_helpers.ts +36 -0
  177. package/lib/scripts/shared/util.d.ts +4 -0
  178. package/lib/scripts/shared/util.js +35 -0
  179. package/lib/scripts/shared/util.ts +33 -0
  180. package/lib/scripts/test_iter_load.d.ts +1 -0
  181. package/lib/scripts/test_iter_load.js +12 -0
  182. package/lib/src/config.d.ts +22 -0
  183. package/lib/src/config.js +17 -7
  184. package/lib/src/conversion_textes.js +5 -1
  185. package/lib/src/databases.d.ts +2 -1
  186. package/lib/src/databases_postgres.d.ts +4 -0
  187. package/lib/src/databases_postgres.js +23 -0
  188. package/lib/src/datasets.d.ts +4 -0
  189. package/lib/src/datasets.js +16 -2
  190. package/lib/src/git.d.ts +1 -0
  191. package/lib/src/git.js +45 -11
  192. package/lib/src/loaders.js +10 -4
  193. package/lib/src/model/agenda.js +2 -2
  194. package/lib/src/model/ameli.d.ts +64 -52
  195. package/lib/src/model/ameli.js +147 -145
  196. package/lib/src/model/ameli_postgres.d.ts +67 -0
  197. package/lib/src/model/ameli_postgres.js +150 -0
  198. package/lib/src/model/commission.d.ts +3 -2
  199. package/lib/src/model/commission.js +2 -2
  200. package/lib/src/model/debats.d.ts +38 -66
  201. package/lib/src/model/debats.js +110 -93
  202. package/lib/src/model/documents.d.ts +32 -12
  203. package/lib/src/model/documents.js +171 -130
  204. package/lib/src/model/dosleg.d.ts +142 -5
  205. package/lib/src/model/dosleg.js +298 -156
  206. package/lib/src/model/questions.d.ts +54 -45
  207. package/lib/src/model/questions.js +89 -87
  208. package/lib/src/model/scrutins.d.ts +48 -13
  209. package/lib/src/model/scrutins.js +118 -111
  210. package/lib/src/model/seance.js +3 -3
  211. package/lib/src/model/sens.d.ts +109 -179
  212. package/lib/src/model/sens.js +384 -484
  213. package/lib/src/model/util.d.ts +0 -8
  214. package/lib/src/model/util.js +0 -23
  215. package/lib/src/parsers/texte.js +7 -7
  216. package/lib/src/raw_types_schemats/ameli.d.ts +4 -2
  217. package/lib/src/raw_types_schemats/debats.d.ts +2 -2
  218. package/lib/src/raw_types_schemats/dosleg.d.ts +2 -2
  219. package/lib/src/raw_types_schemats/questions.d.ts +2 -2
  220. package/lib/src/raw_types_schemats/sens.d.ts +10 -4216
  221. package/lib/src/scripts/convert_data.js +7 -6
  222. package/lib/src/scripts/convert_xml_to_html.js +2 -2
  223. package/lib/src/scripts/data-download.js +3 -2
  224. package/lib/src/scripts/retrieve_agenda.js +21 -9
  225. package/lib/src/scripts/retrieve_cr_commission.js +17 -17
  226. package/lib/src/scripts/retrieve_cr_seance.d.ts +14 -1
  227. package/lib/src/scripts/retrieve_cr_seance.js +10 -11
  228. package/lib/src/scripts/retrieve_documents.d.ts +11 -2
  229. package/lib/src/scripts/retrieve_documents.js +25 -14
  230. package/lib/src/scripts/retrieve_open_data.js +400 -145
  231. package/lib/src/scripts/retrieve_senateurs_photos.js +25 -11
  232. package/lib/src/scripts/retrieve_videos.js +12 -11
  233. package/lib/src/scripts/shared/cli_helpers.d.ts +1 -6
  234. package/lib/src/scripts/shared/cli_helpers.js +9 -8
  235. package/lib/src/scripts/shared/incremental_import_sql.d.ts +2 -0
  236. package/lib/src/scripts/shared/incremental_import_sql.js +894 -0
  237. package/lib/src/scripts/shared/prefixed_tables.d.ts +7 -0
  238. package/lib/src/scripts/shared/prefixed_tables.js +30 -0
  239. package/lib/src/scripts/shared/schema_version.d.ts +3 -0
  240. package/lib/src/scripts/shared/schema_version.js +97 -0
  241. package/lib/src/scripts/shared/staging_import.d.ts +3 -0
  242. package/lib/src/scripts/shared/staging_import.js +80 -0
  243. package/lib/src/scripts/shared/staging_metadata_sql.d.ts +1 -0
  244. package/lib/src/scripts/shared/staging_metadata_sql.js +221 -0
  245. package/lib/src/scripts/validate_prefixed_tables.d.ts +1 -0
  246. package/lib/src/scripts/validate_prefixed_tables.js +102 -0
  247. package/lib/src/types/texte.d.ts +1 -1
  248. package/lib/src/utils/cr_spliting.d.ts +9 -6
  249. package/lib/src/utils/cr_spliting.js +6 -101
  250. package/lib/src/utils/reunion_odj_building.d.ts +7 -3
  251. package/lib/src/utils/reunion_parsing.d.ts +2 -1
  252. package/lib/src/utils/reunion_parsing.js +2 -2
  253. package/lib/src/videos/match.js +8 -5
  254. package/lib/src/videos/pipeline.d.ts +6 -2
  255. package/lib/src/videos/pipeline.js +21 -8
  256. package/lib/src/videos/search.js +6 -2
  257. package/lib/strings.d.ts +1 -0
  258. package/lib/strings.js +18 -0
  259. package/lib/strings.mjs +18 -0
  260. package/lib/strings.ts +26 -0
  261. package/lib/tests/incrementalImportSql.test.d.ts +1 -0
  262. package/lib/tests/incrementalImportSql.test.js +155 -0
  263. package/lib/tests/prefixedTables.test.d.ts +1 -0
  264. package/lib/tests/prefixedTables.test.js +29 -0
  265. package/lib/tests/schemaVersion.test.d.ts +1 -0
  266. package/lib/tests/schemaVersion.test.js +23 -0
  267. package/lib/tests/validatePrefixedTables.test.d.ts +1 -0
  268. package/lib/tests/validatePrefixedTables.test.js +14 -0
  269. package/lib/types/agenda.d.ts +44 -0
  270. package/lib/types/agenda.js +1 -0
  271. package/lib/types/ameli.d.ts +5 -0
  272. package/lib/types/ameli.js +1 -0
  273. package/lib/types/ameli.mjs +13 -0
  274. package/lib/types/ameli.ts +21 -0
  275. package/lib/types/compte_rendu.d.ts +83 -0
  276. package/lib/types/compte_rendu.js +1 -0
  277. package/lib/types/debats.d.ts +2 -0
  278. package/lib/types/debats.js +1 -0
  279. package/lib/types/debats.mjs +2 -0
  280. package/lib/types/debats.ts +6 -0
  281. package/lib/types/dosleg.d.ts +70 -0
  282. package/lib/types/dosleg.js +1 -0
  283. package/lib/types/dosleg.mjs +151 -0
  284. package/lib/types/dosleg.ts +284 -0
  285. package/lib/types/questions.d.ts +2 -0
  286. package/lib/types/questions.js +1 -0
  287. package/lib/types/questions.mjs +1 -0
  288. package/lib/types/questions.ts +3 -0
  289. package/lib/types/sens.d.ts +10 -0
  290. package/lib/types/sens.js +1 -0
  291. package/lib/types/sens.mjs +1 -0
  292. package/lib/types/sens.ts +12 -0
  293. package/lib/types/sessions.d.ts +5 -0
  294. package/lib/types/sessions.js +84 -0
  295. package/lib/types/sessions.mjs +43 -0
  296. package/lib/types/sessions.ts +42 -0
  297. package/lib/types/texte.d.ts +74 -0
  298. package/lib/types/texte.js +16 -0
  299. package/lib/types/texte.mjs +16 -0
  300. package/lib/types/texte.ts +76 -0
  301. package/lib/typings/windows-1252.d.js +2 -0
  302. package/lib/typings/windows-1252.d.mjs +2 -0
  303. package/lib/typings/windows-1252.d.ts +11 -0
  304. package/lib/utils/cr_spliting.d.ts +28 -0
  305. package/lib/utils/cr_spliting.js +265 -0
  306. package/lib/utils/date.d.ts +10 -0
  307. package/lib/utils/date.js +100 -0
  308. package/lib/utils/nvs-timecode.d.ts +7 -0
  309. package/lib/utils/nvs-timecode.js +79 -0
  310. package/lib/utils/reunion_grouping.d.ts +9 -0
  311. package/lib/utils/reunion_grouping.js +361 -0
  312. package/lib/utils/reunion_odj_building.d.ts +5 -0
  313. package/lib/utils/reunion_odj_building.js +154 -0
  314. package/lib/utils/reunion_parsing.d.ts +23 -0
  315. package/lib/utils/reunion_parsing.js +209 -0
  316. package/lib/utils/scoring.d.ts +14 -0
  317. package/lib/utils/scoring.js +147 -0
  318. package/lib/utils/string_cleaning.d.ts +7 -0
  319. package/lib/utils/string_cleaning.js +57 -0
  320. package/lib/validators/config.d.ts +9 -0
  321. package/lib/validators/config.js +10 -0
  322. package/lib/validators/config.mjs +54 -0
  323. package/lib/validators/config.ts +79 -0
  324. package/lib/validators/senat.d.ts +0 -0
  325. package/lib/validators/senat.js +28 -0
  326. package/lib/validators/senat.mjs +24 -0
  327. package/lib/validators/senat.ts +26 -0
  328. package/package.json +6 -10
@@ -1,14 +1,15 @@
1
- import assert from "assert";
2
1
  import { execSync } from "child_process";
3
2
  import commandLineArgs from "command-line-args";
4
3
  import fs from "fs-extra";
5
4
  // import fetch from "node-fetch"
6
5
  import path from "path";
6
+ import { fileURLToPath } from "url";
7
7
  // import stream from "stream"
8
8
  // import util from "util"
9
+ import * as git from "../git";
9
10
  import { findActif as findActifSenateurs } from "../model/sens";
10
11
  import { slugify } from "../strings";
11
- import { commonOptions } from "./shared/cli_helpers";
12
+ import { assertExistingDirectory, commonOptions } from "./shared/cli_helpers";
12
13
  const optionsDefinitions = [
13
14
  ...commonOptions,
14
15
  {
@@ -18,22 +19,32 @@ const optionsDefinitions = [
18
19
  type: Boolean,
19
20
  },
20
21
  ];
22
+ let exitCode = 10; // 0: some data changed, 10: no modification
21
23
  const options = commandLineArgs(optionsDefinitions);
22
24
  // const pipeline = util.promisify(stream.pipeline)
25
+ const scriptDir = path.dirname(fileURLToPath(import.meta.url));
26
+ function commitAndPushGit(datasetDir, options) {
27
+ if (options.commit) {
28
+ const errorCode = git.commitAndPush(datasetDir, "Nouvelle moisson", options.remote);
29
+ if ((exitCode === 10 && errorCode !== 10) || (exitCode === 0 && errorCode !== 0 && errorCode !== 10)) {
30
+ exitCode = errorCode;
31
+ }
32
+ }
33
+ }
23
34
  async function retrievePhotosSenateurs() {
24
- const dataDir = options["dataDir"];
25
- assert(dataDir, "Missing argument: data directory");
35
+ const dataDir = assertExistingDirectory(options["dataDir"], "data directory");
26
36
  const photosDir = path.join(dataDir, "photos_senateurs");
27
- const missingPhotoFilePath = path.resolve(__dirname, "images", "transparent_155x225.jpg");
37
+ const missingPhotoFilePath = path.resolve(scriptDir, "images", "transparent_155x225.jpg");
28
38
  const sens = await Array.fromAsync(findActifSenateurs());
29
39
  // Download photos.
30
40
  fs.ensureDirSync(photosDir);
31
41
  if (options["fetch"]) {
32
42
  for (const sen of sens) {
33
- const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
34
- const photoFilename = photoStem + ".jpg";
43
+ const nom = sen.sennomuse ?? "";
44
+ const safePhotoStem = `${slugify(nom, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
45
+ const photoFilename = safePhotoStem + ".jpg";
35
46
  const photoFilePath = path.join(photosDir, photoFilename);
36
- const photoTempFilename = photoStem + "_temp.jpg";
47
+ const photoTempFilename = safePhotoStem + "_temp.jpg";
37
48
  const photoTempFilePath = path.join(photosDir, photoTempFilename);
38
49
  const urlPhoto = `https://www.senat.fr/senimg/${photoFilename}`;
39
50
  if (!options["silent"]) {
@@ -81,7 +92,8 @@ async function retrievePhotosSenateurs() {
81
92
  }
82
93
  // Resize photos to 155x225, because some haven't exactly this size.
83
94
  for (const sen of sens) {
84
- const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
95
+ const nom = sen.sennomuse ?? "";
96
+ const photoStem = `${slugify(nom, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
85
97
  const photoFilename = photoStem + ".jpg";
86
98
  const photoFilePath = path.join(photosDir, photoFilename);
87
99
  if (fs.existsSync(photoFilePath)) {
@@ -109,7 +121,8 @@ async function retrievePhotosSenateurs() {
109
121
  const row = sens.slice(senIndex, senIndex + 25);
110
122
  const photosFilenames = [];
111
123
  for (const [columnIndex, sen] of row.entries()) {
112
- const photoStem = `${slugify(sen.sennomuse, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
124
+ const nom = sen.sennomuse ?? "";
125
+ const photoStem = `${slugify(nom, "_")}_${slugify(sen.senprenomuse, "_")}${slugify(sen.senmat, "_")}`;
113
126
  const photoFilename = `${photoStem}_155x225.jpg`;
114
127
  photosFilenames.push(photoFilename);
115
128
  photoBySenmat[sen.senmat] = {
@@ -138,9 +151,10 @@ async function retrievePhotosSenateurs() {
138
151
  }
139
152
  const jsonFilePath = path.join(photosDir, "senateurs.json");
140
153
  fs.writeFileSync(jsonFilePath, JSON.stringify(photoBySenmat, null, 2));
154
+ commitAndPushGit(photosDir, options);
141
155
  }
142
156
  retrievePhotosSenateurs()
143
- .then(() => process.exit(0))
157
+ .then(() => process.exit(exitCode))
144
158
  .catch((error) => {
145
159
  console.log(error);
146
160
  process.exit(1);
@@ -1,13 +1,12 @@
1
1
  // scripts/retrieve_senat_videos_from_agendas.ts
2
- import assert from "assert";
3
2
  import commandLineArgs from "command-line-args";
4
3
  import fs from "fs-extra";
5
4
  import fsp from "fs/promises";
6
5
  import path from "path";
7
6
  import * as git from "../git.js";
8
7
  import { AGENDA_FOLDER, iterLoadSenatAgendas } from "../loaders";
9
- import { getSessionsFromStart } from "../types/sessions";
10
- import { commonOptions } from "./shared/cli_helpers";
8
+ import { getSessionsFromStart, UNDEFINED_SESSION } from "../types/sessions";
9
+ import { assertExistingDirectory, commonOptions } from "./shared/cli_helpers";
11
10
  import { getAgendaSegmentTimecodes, buildSenatVodMasterM3u8FromNvs } from "../utils/nvs-parsing";
12
11
  import { epochToParisDateTime, isAmbiguousTimeOriginal, toTargetEpoch } from "../utils/date";
13
12
  import { pathToFileURL } from "url";
@@ -17,6 +16,7 @@ import { SENAT_DATAS_ROOT, STATS, VIDEOS_ROOT_FOLDER, weights } from "../videos/
17
16
  import { processBisIfNeeded, processOneReunionMatch, writeIfChanged } from "../videos";
18
17
  const optionsDefinitions = [...commonOptions];
19
18
  const options = commandLineArgs(optionsDefinitions);
19
+ let exitCode = 10; // 0: some data changed, 10: no modification
20
20
  function shouldSkipAgenda(agenda) {
21
21
  if (!agenda.captationVideo)
22
22
  return true;
@@ -164,8 +164,9 @@ async function processAll(dataDir, sessions) {
164
164
  try {
165
165
  await processGroupedReunion(agenda, session, dataDir, lastByVideo);
166
166
  }
167
- catch (e) {
168
- console.error(`[error] ${agenda?.uid ?? "unknown-uid"}:`, e?.message || e);
167
+ catch (error) {
168
+ const message = error instanceof Error ? error.message : String(error);
169
+ console.error(`[error] ${agenda?.uid ?? "unknown-uid"}:`, message);
169
170
  }
170
171
  }
171
172
  }
@@ -173,18 +174,16 @@ async function processAll(dataDir, sessions) {
173
174
  commitAndPushGit(debatsDir, options);
174
175
  }
175
176
  function commitAndPushGit(datasetDir, options) {
176
- let exitCode = 10; // 0: some data changed, 10: no modification
177
177
  if (options.commit) {
178
- const errorCode = git.commitAndPush(datasetDir, "Nouvelle moisson", options.remote);
178
+ const errorCode = git.commitAndPush(datasetDir, "Nouvelle moisson", options["remote"]);
179
179
  if ((exitCode === 10 && errorCode !== 10) || (exitCode === 0 && errorCode !== 0 && errorCode !== 10)) {
180
180
  exitCode = errorCode;
181
181
  }
182
182
  }
183
183
  }
184
184
  async function main() {
185
- const dataDir = options["dataDir"];
186
- assert(dataDir, "Missing argument: data directory");
187
- const sessions = getSessionsFromStart(options["fromSession"]);
185
+ const dataDir = assertExistingDirectory(options["dataDir"], "data directory");
186
+ const sessions = getSessionsFromStart((options["fromSession"] ?? UNDEFINED_SESSION));
188
187
  const TIMER = "senat-agendas→videos processing time";
189
188
  console.time(TIMER);
190
189
  await processAll(dataDir, sessions);
@@ -194,7 +193,9 @@ async function main() {
194
193
  console.log(`[summary] accepted=${accepted} / total=${total} (${ratio}%)`);
195
194
  }
196
195
  if (import.meta.url === pathToFileURL(process.argv[1]).href) {
197
- main().catch((err) => {
196
+ main()
197
+ .then(() => process.exit(exitCode))
198
+ .catch((err) => {
198
199
  console.error(err);
199
200
  process.exit(1);
200
201
  });
@@ -58,12 +58,6 @@ export declare const remoteOption: {
58
58
  name: string;
59
59
  type: StringConstructor;
60
60
  };
61
- export declare const pullOption: {
62
- alias: string;
63
- help: string;
64
- name: string;
65
- type: BooleanConstructor;
66
- };
67
61
  export declare const fetchDocumentsOption: {
68
62
  help: string;
69
63
  name: string;
@@ -93,3 +87,4 @@ export declare const commonOptions: ({
93
87
  name: string;
94
88
  type: StringConstructor;
95
89
  })[];
90
+ export declare function assertExistingDirectory(directoryPath: string | undefined, description: string): string;
@@ -1,3 +1,5 @@
1
+ import assert from "assert";
2
+ import fs from "fs-extra";
1
3
  export const categoriesOption = {
2
4
  alias: "k",
3
5
  defaultValue: ["All"],
@@ -53,17 +55,11 @@ export const commitOption = {
53
55
  };
54
56
  export const remoteOption = {
55
57
  alias: "r",
56
- help: "push commit to given remote",
58
+ help: "pull before proceeding and push commit to given remote",
57
59
  multiple: true,
58
60
  name: "remote",
59
61
  type: String,
60
62
  };
61
- export const pullOption = {
62
- alias: "p",
63
- help: "pull repositories before proceeding",
64
- name: "pull",
65
- type: Boolean,
66
- };
67
63
  export const fetchDocumentsOption = {
68
64
  help: "download documents",
69
65
  name: "fetchDocuments",
@@ -85,7 +81,12 @@ export const commonOptions = [
85
81
  cloneOption,
86
82
  commitOption,
87
83
  remoteOption,
88
- pullOption,
89
84
  fetchDocumentsOption,
90
85
  parseDocumentsOption,
91
86
  ];
87
+ export function assertExistingDirectory(directoryPath, description) {
88
+ assert(directoryPath, `Missing argument: ${description}`);
89
+ assert(fs.existsSync(directoryPath), `${description} does not exist: ${directoryPath}`);
90
+ assert(fs.statSync(directoryPath).isDirectory(), `${description} is not a directory: ${directoryPath}`);
91
+ return directoryPath;
92
+ }
@@ -0,0 +1,2 @@
1
+ export declare function buildNormalizeStagingSchemaSql(datasetName: string): string;
2
+ export declare function buildIncrementalDatasetImportSql(datasetName: string, dbUser: string, mergeKeys?: Record<string, string[]>, rowMultisetMergeTables?: string[]): string;