@tricoteuses/senat 2.6.2 → 2.8.1

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.
package/lib/loaders.d.ts CHANGED
@@ -69,6 +69,7 @@ export declare function iterLoadSenatDossiersLegislatifsDocuments(dataDir: strin
69
69
  export declare function iterLoadSenatDossiersLegislatifsRapports(dataDir: string, session: number | undefined, options?: {}): Generator<IterItem<DossierLegislatifDocumentResult>>;
70
70
  export declare function iterLoadSenatDossiersLegislatifsTextes(dataDir: string, session: number | undefined, options?: {}): Generator<IterItem<DossierLegislatifDocumentResult>>;
71
71
  export declare function loadSenatTexteContent(dataDir: string, textePathFromDataset: string): IterItem<FlatTexte | null>;
72
+ export declare function iterLoadSenatAgendas(dataDir: string, session: number | undefined, options?: {}): Generator<IterItem<AgendaEvent[]>>;
72
73
  export declare function iterLoadSenatEvenements(dataDir: string, session: number | undefined, options?: {}): Generator<IterItem<AgendaEvent>>;
73
74
  export declare function iterLoadSenatCirconscriptions(dataDir: string, options?: {}): Generator<IterItem<CirconscriptionResult>>;
74
75
  export declare function iterLoadSenatOrganismes(dataDir: string, options?: {}): Generator<IterItem<OrganismeResult>>;
package/lib/loaders.js CHANGED
@@ -144,6 +144,11 @@ export function loadSenatTexteContent(dataDir, textePathFromDataset) {
144
144
  const texteJson = fs.readFileSync(fullTextePath, { encoding: "utf8" });
145
145
  return { item: JSON.parse(texteJson) };
146
146
  }
147
+ export function* iterLoadSenatAgendas(dataDir, session, options = {}) {
148
+ for (const evenementsItem of iterLoadSenatItems(dataDir, AGENDA_FOLDER, session, DATA_TRANSFORMED_FOLDER, options)) {
149
+ yield evenementsItem;
150
+ }
151
+ }
147
152
  export function* iterLoadSenatEvenements(dataDir, session, options = {}) {
148
153
  for (const evenementsItem of iterLoadSenatItems(dataDir, AGENDA_FOLDER, session, DATA_TRANSFORMED_FOLDER, options)) {
149
154
  for (const evenement of evenementsItem.item) {
@@ -3,6 +3,9 @@ import { DateTime } from "luxon";
3
3
  import path from "path";
4
4
  import { ID_DATE_FORMAT, STANDARD_DATE_FORMAT } from "../scripts/datautil";
5
5
  const FR_TZ = "Europe/Paris";
6
+ function eventIsSeance(eventElement) {
7
+ return eventElement.classList.contains("evt-seance");
8
+ }
6
9
  function getEventType(eventClasses) {
7
10
  const typeClass = [...eventClasses]
8
11
  .find(className => className.startsWith("evt-"))
@@ -26,6 +29,27 @@ function getUrlDossierSenat(lienElements) {
26
29
  .find(lienElement => lienElement.textContent?.includes("dossier législatif"));
27
30
  return urlElement ? urlElement.getAttribute("href") : null;
28
31
  }
32
+ function getQuantieme(eventElement, seancesElements) {
33
+ const seanceIndex = seancesElements.indexOf(eventElement);
34
+ if (seancesElements.length === 1 && seanceIndex === 0) {
35
+ return "Unique";
36
+ }
37
+ else {
38
+ switch (seanceIndex) {
39
+ case 0:
40
+ return "Première";
41
+ case 1:
42
+ return "Deuxième";
43
+ case 2:
44
+ return "Troisième";
45
+ case 3:
46
+ return "Quatrième";
47
+ case 4:
48
+ return "Cinquième";
49
+ }
50
+ }
51
+ return "Non défini";
52
+ }
29
53
  /**
30
54
  * Normalize time string to become a simple start time ("H'h'mm") or a duration ("'de 'H'h'mm' à 'H'h'mm").
31
55
  */
@@ -62,6 +86,7 @@ function getStartAndEndTimes(timeStr) {
62
86
  function transformAgenda(document, fileName) {
63
87
  const agendaEvents = [];
64
88
  const eventElements = document.querySelectorAll(".evt");
89
+ const seanceElements = Array.from(eventElements).filter(eventElement => eventIsSeance(eventElement));
65
90
  for (const eventElement of eventElements) {
66
91
  const id = eventElement.previousElementSibling?.getAttribute("name") || null;
67
92
  if (!id) {
@@ -78,7 +103,8 @@ function transformAgenda(document, fileName) {
78
103
  ?.replace(/^- /, "")
79
104
  || null;
80
105
  const lieu = eventElement.querySelector(".lieu")?.textContent || null;
81
- const url_dossier_senat = getUrlDossierSenat(eventElement.querySelectorAll(".lien a"));
106
+ const videoElement = eventElement.querySelector(".video");
107
+ const urlDossierSenat = getUrlDossierSenat(eventElement.querySelectorAll(".lien a"));
82
108
  agendaEvents.push({
83
109
  id,
84
110
  type,
@@ -90,7 +116,9 @@ function transformAgenda(document, fileName) {
90
116
  organe,
91
117
  objet,
92
118
  lieu,
93
- url_dossier_senat,
119
+ captationVideo: videoElement !== null,
120
+ urlDossierSenat: urlDossierSenat,
121
+ quantieme: eventIsSeance(eventElement) ? getQuantieme(eventElement, seanceElements) : null,
94
122
  });
95
123
  }
96
124
  return agendaEvents;
@@ -9,5 +9,7 @@ export interface AgendaEvent {
9
9
  organe: string | null;
10
10
  objet: string | null;
11
11
  lieu: string | null;
12
- url_dossier_senat: string | null;
12
+ captationVideo: boolean;
13
+ urlDossierSenat: string | null;
14
+ quantieme: string | null;
13
15
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tricoteuses/senat",
3
- "version": "2.6.2",
3
+ "version": "2.8.1",
4
4
  "description": "Handle French Sénat's open data",
5
5
  "keywords": [
6
6
  "France",