Attention ! Gitlab fournissant maintenant nativement des certificats Let’s Encrypt aux domaines personnalisés des Gitlab Pages, nous avons coupé notre service qui le faisait automatiquement pour vous.

Il est impératif, pour que votre domaine personnalisé continue à avoir un certificat Let’s Encrypt à jour, d’activer la fonctionnalité native dans les paramètres de votre projet. Cette activation remplacera votre certificat actuel par un nouveau certificat Let’s Encrypt géré par Gitlab.

Voir les détails sur https://docs.framasoft.org/fr/gitlab/gitlab-pages-le.html

Commit 0e6e1ed7 authored by Emmanuel Raviart's avatar Emmanuel Raviart

Repair "collaborateurs" in JSON before importing JSON with serde.

parent dfb1a473
Pipeline #118301 passed with stage
in 2 minutes and 16 seconds
......@@ -34,6 +34,7 @@ mod types_organes;
use chrono::prelude::Utc;
use regex::Regex;
use serde_json::json;
use std::collections::HashMap;
use std::fs::{self, File};
use std::path::Path;
......@@ -101,12 +102,60 @@ pub fn load(
json_file_path.to_string_lossy()
);
}
let json_file = File::open(json_file_path).expect("JSON file not found");
let json_file = File::open(&json_file_path).expect("JSON file not found");
// First cleanup and simplify JSON.
let mut export_wrapper: serde_json::Value = serde_json::from_reader(json_file).unwrap();
let acteurs = export_wrapper["export"]["acteurs"]["acteur"]
.as_array_mut()
.unwrap();
for ref mut acteur in acteurs {
let mandat = &acteur["mandats"]["mandat"];
if mandat.is_object() {
acteur["mandats"]["mandat"] = json!(vec![mandat]);
};
let mandats = acteur["mandats"]["mandat"].as_array_mut().unwrap();
for ref mut mandat in mandats {
let type_mandat = mandat["@xsi:type"].as_str().unwrap();
if type_mandat == "MandatParlementaire_type" {
// Replace collaborateurs with an array of collaborateurs.
let collaborateurs = match mandat.get("collaborateurs") {
None => vec![],
Some(collaborateurs) => match collaborateurs.get("collaborateur") {
None => vec![],
Some(collaborateur) => {
if collaborateur.is_array() {
collaborateur
.as_array()
.unwrap()
.iter()
.filter(|collaborateur| !collaborateur.is_null())
.collect::<Vec<&serde_json::Value>>()
} else if collaborateur.is_null() {
vec![]
} else {
// Collaborateur is an object: a single collaborateur.
vec![collaborateur]
}
}
},
};
mandat["collaborateurs"] = json!(collaborateurs);
}
}
}
// Save clean JSON.
let repaired_json_filename = &dataset.filename.replace(".json", "_repaired.json");
let repaired_json_file_path = data_dir.join(&repaired_json_filename);
let repaired_json_file = File::create(&repaired_json_file_path)
.expect("Unable to create repaired JSON file");
serde_json::to_writer_pretty(repaired_json_file, &export_wrapper).unwrap();
// Convert clean JSON to Rust structure.
let repaired_json_file =
File::open(&repaired_json_file_path).expect("Repaired JSON file not found");
let export_wrapper: acteurs_et_organes::ExportJsonWrapper =
serde_json::from_reader(json_file).unwrap();
// Check data integrity.
// checks::check_data(&export_wrapper);
serde_json::from_reader(repaired_json_file).unwrap();
acteurs_et_organes_wrappers.push(export_wrapper);
}
......
......@@ -17,13 +17,6 @@ pub struct Collaborateur {
qualite: String,
}
#[derive(Clone, Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Collaborateurs {
#[serde(deserialize_with = "map_to_vec", rename = "collaborateur")]
pub collaborateurs: Vec<Collaborateur>,
}
#[derive(Clone, Debug, Deserialize, GraphQLObject)]
#[serde(deny_unknown_fields)]
pub struct Election {
......@@ -512,7 +505,7 @@ pub struct MandatParlementaire {
#[serde(rename = "acteurRef")]
pub acteur_ref: String,
chambre: Option<EmptyChoice>,
collaborateurs: Option<Collaborateurs>,
collaborateurs: Vec<Collaborateur>,
#[serde(rename = "dateDebut")]
// TODO: Date<FixedOffset> type is not able to deserialize dates (`YYYY-MM-DD`).
pub date_debut: String,
......@@ -540,13 +533,6 @@ pub struct MandatParlementaire {
}
impl MandatParlementaire {
pub fn collaborateurs(&self) -> Option<&Vec<Collaborateur>> {
match &self.collaborateurs {
None => None,
Some(ref collaborateurs) => Some(&collaborateurs.collaborateurs),
}
}
pub fn suppleant(&self) -> Option<&Suppleant> {
match &self.suppleants {
None => None,
......@@ -574,8 +560,8 @@ graphql_object!(MandatParlementaire: Context |&self| {
&self.acteur_ref
}
field collaborateurs() -> Option<&Vec<Collaborateur>> {
self.collaborateurs()
field collaborateurs() -> &Vec<Collaborateur> {
&self.collaborateurs
}
field date_debut() -> &str {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment