mdel: order xml elements (#35145)

And handle a possible attribute in the root element.
This commit is contained in:
Emmanuel Cazenave 2019-07-31 19:55:48 +02:00
parent ff87ebb7c2
commit e65e5fc711
7 changed files with 659 additions and 111 deletions

View File

@ -249,59 +249,87 @@ class Data(MDELBase):
@property
def xml(self):
elements = {}
elements = []
for key, value in self.data.items():
# ignore non mapped keys
if self.mapping.get(key, None):
elements[self.mapping[key]] = value
for key, path in self.mapping:
if key in self.data:
elements.append((path, self.data[key]))
root = ElementFactory(self.root_element)
root = ElementFactory(self.root_element, **self.root_attributes)
for key, value in elements.items():
path = key.split('_')
root.append(json_to_xml(path, value, root), allow_new=False)
for path, value in elements:
path_splitted = path.split('_')
root.append(json_to_xml(path_splitted, value, root), allow_new=False)
return root
class ILEData(Data):
mapping = {
'nom_famille': 'Inscription_Electeur_Noms_NomFamille',
'nom_usage': 'Inscription_Electeur_Noms_NomUsage',
'prenoms': 'Inscription_Electeur_Prenoms_Prenom',
'date_naissance': 'Inscription_Electeur_DateDeNaissance',
'lieunaiss_localite': 'Inscription_Electeur_LieuDeNaissance_Localite',
'lieunaiss_division_territoriale': 'Inscription_Electeur_LieuDeNaissance_DivisionTerritoriale',
'lieunaiss_code_postal': 'Inscription_Electeur_LieuDeNaissance_CodePostal',
'lieunaiss_pays_raw': 'Inscription_Electeur_LieuDeNaissance_Pays',
'sexe_raw': 'Inscription_Electeur_Sexe',
'nationalite_raw': 'Inscription_Electeur_Nationalite',
'adresse_num_voie': 'Inscription_Electeur_AdresseDeLElecteur_NumeroVoie',
'adresse_type_voie': 'Inscription_Electeur_AdresseDeLElecteur_TypeVoie',
'adresse_nom_voie': 'Inscription_Electeur_AdresseDeLElecteur_NomVoie',
'adresse_complement': 'Inscription_Electeur_AdresseDeLElecteur_Complement',
'adresse_code_postal': 'Inscription_Electeur_AdresseDeLElecteur_CodePostal',
'adresse_localite': 'Inscription_Electeur_AdresseDeLElecteur_Localite',
'adresse_division_territoriale': 'Inscription_Electeur_AdresseDeLElecteur_DivisionTerritoriale',
'contact_uri': 'Inscription_Electeur_MethodeDeContact_URI',
'contact_code': 'Inscription_Electeur_MethodeDeContact_CanalCode',
'inscription_liste_type_raw': 'Inscription_TypeDeListe',
'inscription_localite': 'CommuneDInscription_Localite',
'inscription_division_territoriale': 'CommuneDInscription_DivisionTeritoriale',
'insription_code_insee': 'CommuneDInscription_CodeInsee',
'inscription_date': 'DateDInscription',
'inscription_type': 'TypeDInscription',
'anterieur_situation_raw': 'SituationElectoraleAnterieure_SituationDeLElecteur',
'anterieur_consulat': 'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_AmbassadeOuPosteConsulaire',
'anterieur_consulat_pays_raw': 'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_Pays',
'anterieur_localite': 'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_Localite',
'anterieur_division_territoriale': 'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_DivisionTerritoriale',
'anterieur_ue_localite': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_Localite',
'anterieur_ue_division_territoriale': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_DivisionTerritoriale',
'anterieur_ue_localite_pays_raw': 'SituationElectoraleAnterieure_PaysUeDerniereInscription_Pays'
}
mapping = [
('nom_famille', 'Inscription_Electeur_Noms_NomFamille'),
('nom_usage', 'Inscription_Electeur_Noms_NomUsage'),
('prenoms', 'Inscription_Electeur_Prenoms_Prenom'),
('date_naissance', 'Inscription_Electeur_DateDeNaissance'),
('lieunaiss_localite', 'Inscription_Electeur_LieuDeNaissance_Localite'),
(
'lieunaiss_division_territoriale',
'Inscription_Electeur_LieuDeNaissance_DivisionTerritoriale'
),
('lieunaiss_code_postal', 'Inscription_Electeur_LieuDeNaissance_CodePostal'),
('lieunaiss_pays_raw', 'Inscription_Electeur_LieuDeNaissance_Pays'),
('sexe_raw', 'Inscription_Electeur_Sexe'),
('nationalite_raw', 'Inscription_Electeur_Nationalite'),
('adresse_complement', 'Inscription_Electeur_AdresseDeLElecteur_Complement'),
('adresse_num_voie', 'Inscription_Electeur_AdresseDeLElecteur_NumeroVoie'),
('adresse_type_voie', 'Inscription_Electeur_AdresseDeLElecteur_TypeVoie'),
('adresse_nom_voie', 'Inscription_Electeur_AdresseDeLElecteur_NomVoie'),
('adresse_code_postal', 'Inscription_Electeur_AdresseDeLElecteur_CodePostal'),
('adresse_localite', 'Inscription_Electeur_AdresseDeLElecteur_Localite'),
(
'adresse_division_territoriale',
'Inscription_Electeur_AdresseDeLElecteur_DivisionTerritoriale'
),
('contact_code', 'Inscription_Electeur_MethodeDeContact_CanalCode'),
('contact_uri', 'Inscription_Electeur_MethodeDeContact_URI'),
('inscription_liste_type_raw', 'Inscription_TypeDeListe'),
('inscription_localite', 'Inscription_CommuneDInscription_Localite'),
(
'inscription_division_territoriale',
'Inscription_CommuneDInscription_DivisionTerritoriale'),
('inscription_code_insee', 'Inscription_CommuneDInscription_CodeInsee'),
('inscription_date', 'DateDInscription'),
('inscription_type', 'TypeDInscription'),
('anterieur_situation_raw', 'SituationElectoraleAnterieure_SituationDeLElecteur'),
(
'anterieur_consulat',
'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription'
'_AmbassadeOuPosteConsulaire'
),
(
'anterieur_consulat_pays_raw',
'SituationElectoraleAnterieure_ConsulatDePrecedenteInscription_Pays'
),
(
'anterieur_localite',
'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_Localite'
),
(
'anterieur_ue_localite',
'SituationElectoraleAnterieure_PaysUeDerniereInscription_Localite'
),
(
'anterieur_division_territoriale',
'SituationElectoraleAnterieure_CommuneDePrecedenteInscription_DivisionTerritoriale'
),
(
'anterieur_ue_division_territoriale',
'SituationElectoraleAnterieure_PaysUeDerniereInscription_DivisionTerritoriale'
),
(
'anterieur_ue_localite_pays_raw',
'SituationElectoraleAnterieure_PaysUeDerniereInscription_Pays'
)
]
required = [
'nom_famille',
@ -323,7 +351,7 @@ class ILEData(Data):
def __init__(self, demand_id, data):
self.root_element = 'AvisDInscription'
self.root_attributes = {}
# only possible value : vol as 'Inscription Volontaire'
data['inscription_type'] = 'vol'
@ -332,59 +360,59 @@ class ILEData(Data):
class AECData(Data):
mapping = {
'aec_nature': 'DemandeActe_NatureActe_Libelle',
'aec_nature_raw': 'DemandeActe_NatureActe_Code',
'aec_type': 'DemandeActe_TypeActe_Libelle',
'aec_type_raw': 'DemandeActe_TypeActe_Code',
'code_insee': 'DemandeActe_LieuActe_CodeINSEE',
'code_postal': 'DemandeActe_LieuActe_CodePostal',
'demandeur_adresse_adresse': 'DemandeActe_Demandeur_AdresseEtrangere_Adresse',
'demandeur_adresse_batiment': 'DemandeActe_Demandeur_AdresseFrancaise_Batiment',
'demandeur_adresse_boite_postal': 'DemandeActe_Demandeur_AdresseFrancaise_BoitePostale',
'demandeur_adresse_code_postal': 'DemandeActe_Demandeur_AdresseFrancaise_CodePostal',
'demandeur_adresse_etage': 'DemandeActe_Demandeur_AdresseFrancaise_Etage',
'demandeur_adresse_ville': 'DemandeActe_Demandeur_AdresseFrancaise_Ville',
'demandeur_adresse_etrangere': 'DemandeActe_Demandeur_AdresseEtrangere_Adresse',
'demandeur_adresse_etrangere_pays_raw': 'DemandeActe_Demandeur_AdresseEtrangere_Pays',
'demandeur_adresse_voie': 'DemandeActe_Demandeur_AdresseFrancaise_Voie',
'demandeur_civilite': 'DemandeActe_Demandeur_Civilite',
'demandeur_email': 'DemandeActe_Demandeur_Courriel',
'demandeur_nom': 'DemandeActe_Demandeur_Nom',
'demandeur_prenom': 'DemandeActe_Demandeur_Prenom',
'demandeur_telephone': 'DemandeActe_Demandeur_Telephone',
'nombre_exemplaires': 'DemandeActe_NombreExemplaires',
'motif_demande': 'DemandeActe_MotifDemande_Libelle',
'motif_demande_raw': 'DemandeActe_MotifDemande_Commentaire',
'qualite_demandeur': 'DemandeActe_Demandeur_QualiteDemandeur_Libelle',
'qualite_demandeur_raw': 'DemandeActe_Demandeur_QualiteDemandeur_Code',
'date_acte': 'DemandeActe_DateActe',
'titulaire_civilite': 'DemandeActe_Titulaire_Civilite',
'titulaire_mere_nom': 'DemandeActe_Titulaire_Filiation_Mere_Nom',
'titulaire_mere_prenoms': 'DemandeActe_Titulaire_Filiation_Mere_Prenoms',
'titulaire_naiss_date': 'DemandeActe_Titulaire_DateDeNaissance',
'titulaire_naiss_departement_raw': 'DemandeActe_Titulaire_DepartementDeNaissance',
'titulaire_nationalite_raw': 'DemandeActe_Titulaire_Nationalite',
'titulaire_naiss_pays_raw': 'DemandeActe_Titulaire_PaysDeNaissance',
'titulaire_naiss_ville': 'DemandeActe_Titulaire_LieuDeNaissance',
'titulaire_nom': 'DemandeActe_Titulaire_NomNaissance',
'titulaire_pere_nom': 'DemandeActe_Titulaire_Filiation_Pere_Nom',
'titulaire_pere_prenoms': 'DemandeActe_Titulaire_Filiation_Pere_Prenoms',
'titulaire_prenoms': 'DemandeActe_Titulaire_Prenoms',
'titulaire2_civilite': 'DemandeActe_Titulaire2_Civilite',
'titulaire2_mere_nom': 'DemandeActe_Titulaire2_Filiation_Mere_Nom',
'titulaire2_mere_prenoms': 'DemandeActe_Titulaire2_Filiation_Mere_Prenoms',
'titulaire2_naiss_date': 'DemandeActe_Titulaire2_DateDeNaissance',
'titulaire2_naiss_departement_raw': 'DemandeActe_Titulaire2_DepartementDeNaissance',
'titulaire2_nationalite_raw': 'DemandeActe_Titulaire2_Nationalite',
'titulaire2_naiss_pays_raw': 'DemandeActe_Titulaire2_PaysDeNaissance',
'titulaire2_naiss_ville': 'DemandeActe_Titulaire2_LieuDeNaissance',
'titulaire2_nom': 'DemandeActe_Titulaire2_NomNaissance',
'titulaire2_pere_nom': 'DemandeActe_Titulaire2_Filiation_Pere_Nom',
'titulaire2_pere_prenoms': 'DemandeActe_Titulaire2_Filiation_Pere_Prenoms',
'titulaire2_prenoms': 'DemandeActe_Titulaire2_Prenoms',
'ville': 'DemandeActe_LieuActe_Ville'
}
mapping = [
('aec_type_raw', 'DemandeActe_TypeActe_Code'),
('aec_type', 'DemandeActe_TypeActe_Libelle'),
('aec_nature_raw', 'DemandeActe_NatureActe_Code'),
('aec_nature', 'DemandeActe_NatureActe_Libelle'),
('date_acte', 'DemandeActe_DateActe'),
('code_postal', 'DemandeActe_LieuActe_CodePostal'),
('ville', 'DemandeActe_LieuActe_Ville'),
('code_insee', 'DemandeActe_LieuActe_CodeINSEE'),
('nombre_exemplaires', 'DemandeActe_NombreExemplaires'),
('motif_demande', 'DemandeActe_MotifDemande_Libelle'),
('motif_demande_raw', 'DemandeActe_MotifDemande_Commentaire'),
('qualite_demandeur_raw', 'DemandeActe_Demandeur_QualiteDemandeur_Code'),
('qualite_demandeur', 'DemandeActe_Demandeur_QualiteDemandeur_Libelle'),
('demandeur_civilite', 'DemandeActe_Demandeur_Civilite'),
('demandeur_nom', 'DemandeActe_Demandeur_Nom'),
('demandeur_prenom', 'DemandeActe_Demandeur_Prenom'),
('demandeur_adresse_etage', 'DemandeActe_Demandeur_AdresseFrancaise_Etage'),
('demandeur_adresse_batiment', 'DemandeActe_Demandeur_AdresseFrancaise_Batiment'),
('demandeur_adresse_voie', 'DemandeActe_Demandeur_AdresseFrancaise_Voie'),
('demandeur_adresse_boite_postal', 'DemandeActe_Demandeur_AdresseFrancaise_BoitePostale'),
('demandeur_adresse_code_postal', 'DemandeActe_Demandeur_AdresseFrancaise_CodePostal'),
('demandeur_adresse_ville', 'DemandeActe_Demandeur_AdresseFrancaise_Ville'),
('demandeur_adresse_adresse', 'DemandeActe_Demandeur_AdresseEtrangere_Adresse'),
('demandeur_adresse_etrangere', 'DemandeActe_Demandeur_AdresseEtrangere_Adresse'),
('demandeur_adresse_etrangere_pays_raw', 'DemandeActe_Demandeur_AdresseEtrangere_Pays'),
('demandeur_email', 'DemandeActe_Demandeur_Courriel'),
('demandeur_telephone', 'DemandeActe_Demandeur_Telephone'),
('titulaire_civilite', 'DemandeActe_Titulaire_Civilite'),
('titulaire_nom', 'DemandeActe_Titulaire_NomNaissance'),
('titulaire_prenoms', 'DemandeActe_Titulaire_Prenoms'),
('titulaire_pere_nom', 'DemandeActe_Titulaire_Filiation_Pere_Nom'),
('titulaire_pere_prenoms', 'DemandeActe_Titulaire_Filiation_Pere_Prenoms'),
('titulaire_mere_nom', 'DemandeActe_Titulaire_Filiation_Mere_Nom'),
('titulaire_mere_prenoms', 'DemandeActe_Titulaire_Filiation_Mere_Prenoms'),
('titulaire_naiss_date', 'DemandeActe_Titulaire_DateDeNaissance'),
('titulaire_naiss_ville', 'DemandeActe_Titulaire_LieuDeNaissance'),
('titulaire_naiss_departement_raw', 'DemandeActe_Titulaire_DepartementDeNaissance'),
('titulaire_naiss_pays_raw', 'DemandeActe_Titulaire_PaysDeNaissance'),
('titulaire_nationalite_raw', 'DemandeActe_Titulaire_Nationalite'),
('titulaire2_civilite', 'DemandeActe_Titulaire2_Civilite'),
('titulaire2_nom', 'DemandeActe_Titulaire2_NomNaissance'),
('titulaire2_prenoms', 'DemandeActe_Titulaire2_Prenoms'),
('titulaire2_pere_nom', 'DemandeActe_Titulaire2_Filiation_Pere_Nom'),
('titulaire2_pere_prenoms', 'DemandeActe_Titulaire2_Filiation_Pere_Prenoms'),
('titulaire2_mere_nom', 'DemandeActe_Titulaire2_Filiation_Mere_Nom'),
('titulaire2_mere_prenoms', 'DemandeActe_Titulaire2_Filiation_Mere_Prenoms'),
('titulaire2_naiss_date', 'DemandeActe_Titulaire2_DateDeNaissance'),
('titulaire2_naiss_ville', 'DemandeActe_Titulaire2_LieuDeNaissance'),
('titulaire2_naiss_departement_raw', 'DemandeActe_Titulaire2_DepartementDeNaissance'),
('titulaire2_naiss_pays_raw', 'DemandeActe_Titulaire2_PaysDeNaissance'),
('titulaire2_nationalite_raw', 'DemandeActe_Titulaire2_Nationalite'),
]
required = [
'aec_nature',
@ -413,6 +441,7 @@ class AECData(Data):
def __init__(self, demand_id, data):
self.root_element = 'EnveloppeMetierType'
self.root_attributes = {'canal_utilise': '0'}
super(AECData, self).__init__(demand_id, data)

View File

@ -0,0 +1,274 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Date de création : 18/03/13
Nom de l'organisme : Bull Echirolles
Nom de l'auteur : Reynaud Angélique
Numéro de version : 0.1
Historique des modifications (pour chaque modification :)
- Date de mise à jour :26/03/2013
- Nom de l'organisme : Bull Echirolles
- Nom de l'auteur : Angélique Reynaud
- Numéro de version : 1.0
- Description : Mis à jour du document suite à l'atelier et aux échanges de mails
Ajout des balises : LieuActe , DateActe , AdresseEtrangere dans DemandeurType, Civilite dans DemandeurType et IndividuType , Titulaire2
Suppression de LieuActe et DateActe dans IndividuType
Declaration des type complexe : LieuActeType, CiviliteType, AdresseEtrangereType
- Date de mise à jour :15/04/2013
- Nom de l'organisme : Bull Echirolles
- Nom de l'auteur : Maxime PASQUIER
- Numéro de version : 1.A
- Description : Mise en conformité du schema avec la norme XSD pour SmartGuide Designer
- Date de mise à jour :16/04/2013
- Nom de l'organisme : Bull Echirolles
- Nom de l'auteur : Maxime PASQUIER
- Numéro de version : 1.B
- Description : Suite au mail du 15/04/13,
Ajout des champs ; Date de naissance ; Lieu de naissance ; Département de naissance ; Pays de naissance ; Nationalité
pour une demande d'acte de mariage ou de décès pour les personnes concernées.
Pas d'éclatement de l'adresse française.
- Date de mise à jour :28/05/2013
- Nom de l'organisme : Bull Echirolles
- Nom de l'auteur : Maxime PASQUIER
- Numéro de version : 1.C
- Description : Suite aux mantis 7560 et 7635
Correction du nom de la balise <Nationnalite> en <Nationalite>
Ajout des listes de valeur pour les balises <NatureActe>, <MotifDemande> et <QualiteDemandeur>
Ajout de l'information minOccurs=0 sur les balises <Telephone>, <Pere>, <Mere>, <LieuDeNaissance>, <DepartementDeNaissance>, <PaysDeNaissance> et <Nationalite>
-->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="EnveloppeMetierType">
<xsd:annotation>
<xsd:documentation>
Le type des enveloppes metier possible
</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:choice>
<xsd:element name="DemandeActe" type="DemandeActeType">
<xsd:annotation>
<xsd:documentation>
Ceci concerne la demande d'acte d'etat civil global (naissance,
mariage, deces)
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:choice>
</xsd:sequence>
<xsd:attribute name="canal_utilise" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
<xsd:complexType name="DemandeActeType">
<xsd:annotation>
<xsd:documentation>
Informations decrivant une demande d'acte
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="TypeActe" type="TypeActeType">
<xsd:annotation>
<xsd:documentation>
Type d'acte: NAISSANCE, MARIAGE, DECES
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="NatureActe" type="NatureActeType">
<xsd:annotation>
<xsd:documentation>
Nautre de l'acte: COPIE-INTEGRALE, EXTRAIT-AVEC-FILIATION, EXTRAIT-SANS-FILIATION, EXTRAIT-PLURILINGUE
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="DateActe" type="xsd:date" >
<xsd:annotation>
<xsd:documentation>
Date de l'acte : date de naissance ou date du mariage ou date du décès
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="LieuActe" type="LieuActeType">
<xsd:annotation>
<xsd:documentation>
Lieu de l'acte : lieu de naissance ou lieu de la cérémonie du mariage ou lieu du décès
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="NombreExemplaires">
<xsd:simpleType>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="1" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="MotifDemande" type="MotifDemandeType">
<xsd:annotation>
<xsd:documentation>
Motif de la demande : CarteNationaleIdentite, Passeport, CertificatDeNationaliteFrancaise, Mariage, Pension, ProcedureJudiciaire, PacteCivilDeSolidarite, ActeDeNotaire, Autre
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Demandeur" type="DemandeurType" />
<xsd:element name="Titulaire" type="IndividuType"/>
<xsd:element name="Titulaire2" type="IndividuType" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="NomType">
<xsd:annotation>
<xsd:documentation>
Type des elements de nom Etat Civil
</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:string" />
</xsd:simpleType>
<xsd:complexType name="ParentType">
<xsd:annotation>
<xsd:documentation>
Information concernant un parent d'un individu
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Nom" type="NomType" minOccurs="0" />
<xsd:element name="Prenoms" type="NomType" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="FiliationType">
<xsd:sequence>
<xsd:element name="Pere" type="ParentType" minOccurs="0" />
<xsd:element name="Mere" type="ParentType" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="AdressePostaleFrancaiseType" mixed="true">
<xsd:annotation>
<xsd:documentation>L'adresse</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Etage" type="xsd:string" minOccurs="0"/>
<xsd:element name="Batiment" type="xsd:string" minOccurs="0"/>
<xsd:element name="Voie" type="xsd:string" />
<xsd:element name="BoitePostale" type="xsd:string" minOccurs="0"/>
<xsd:element name="CodePostal" type="xsd:string" />
<xsd:element name="Ville" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="QualiteDemandeurType">
<xsd:sequence>
<xsd:element name="Code" type="xsd:string" />
<xsd:element name="Libelle" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="MotifDemandeType">
<xsd:sequence>
<xsd:element name="Libelle" type="xsd:string" />
<xsd:element name="Commentaire" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="TypeActeType">
<xsd:sequence>
<xsd:element name="Code">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="NAISSANCE" />
<xsd:enumeration value="MARIAGE" />
<xsd:enumeration value="DECES" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Libelle" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="NatureActeType">
<xsd:sequence>
<xsd:element name="Code">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="COPIE-INTEGRALE" />
<xsd:enumeration value="EXTRAIT-AVEC-FILIATION" />
<xsd:enumeration value="EXTRAIT-SANS-FILIATION" />
<xsd:enumeration value="EXTRAIT-PLURILINGUE" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="Libelle" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="IndividuType">
<xsd:annotation>
<xsd:documentation>
Informations caracterisant un individu
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="Civilite" type="CiviliteType" />
<xsd:element name="NomNaissance" type="NomType" />
<xsd:element name="Prenoms" type="NomType" />
<xsd:element name="Filiation" type="FiliationType" minOccurs="0" />
<xsd:element name="DateDeNaissance" type="xsd:date" />
<xsd:element name="LieuDeNaissance" type="xsd:string" minOccurs="0" />
<xsd:element name="DepartementDeNaissance" type="xsd:string" minOccurs="0" />
<xsd:element name="PaysDeNaissance" type="xsd:string" minOccurs="0" />
<xsd:element name="Nationalite" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="DemandeurType">
<xsd:annotation>
<xsd:documentation>
Informations caracterisant le demandeur de l'acte
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="QualiteDemandeur" type="QualiteDemandeurType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Motif de la demande : PersonneConcernee, PereMere, Conjoint, Fils, GrandPere, PetitFils, Representant, Heriter, Autre
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="Civilite" type="CiviliteType" />
<xsd:element name="Nom" type="NomType" />
<xsd:element name="Prenom" type="NomType" />
<xsd:choice>
<xsd:element name="AdresseFrancaise" type="AdressePostaleFrancaiseType" />
<xsd:element name="AdresseEtrangere" type="AdresseEtrangereType" />
</xsd:choice>
<xsd:element name="Courriel" type="xsd:string" />
<xsd:element name="Telephone" type="xsd:string" minOccurs="0" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="LieuActeType">
<xsd:annotation>
<xsd:documentation>
Informations sur le lieu de l'acte
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="BoitePostale-LieuDit" type="xsd:string" minOccurs="0"/>
<xsd:element name="CodePostal" type="xsd:string" />
<xsd:element name="Ville" type="xsd:string" />
<xsd:element name="CodeINSEE" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
<xsd:simpleType name="CiviliteType">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="MONSIEUR"/>
<xsd:enumeration value="MADAME"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:complexType name="AdresseEtrangereType">
<xsd:sequence>
<xsd:element name="Adresse" type="xsd:string" />
<xsd:element name="Pays" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

View File

@ -0,0 +1,218 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2009 sp1 (http://www.altova.com) by Jean.dupont (EMBRACE) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="AvisDInscription">
<xs:complexType>
<xs:sequence>
<xs:element name="Inscription" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Electeur" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Noms" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="NomFamille">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NomUsage" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Prenoms" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Prenom" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DateDeNaissance">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LieuDeNaissance" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Localite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="CodePostal" type="xs:string" minOccurs="0"/>
<xs:element name="Subdivision" type="xs:string" minOccurs="0"/>
<xs:element name="Pays">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Sexe">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Nationalite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="AdresseDeLElecteur" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="PointDeRemise" type="xs:string" minOccurs="0"/>
<xs:element name="Complement" type="xs:string" minOccurs="0"/>
<xs:element name="NumeroVoie" type="xs:string" minOccurs="0"/>
<xs:element name="Extension" type="xs:string" minOccurs="0"/>
<xs:element name="TypeVoie">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NomVoie">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="LieuDit" type="xs:string" minOccurs="0"/>
<xs:element name="CodePostal">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Localite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="MethodeDeContact" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="CanalCode" type="xs:string" minOccurs="0"/>
<xs:element name="URI" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="TypeDeListe" type="xs:string" minOccurs="0"/>
<xs:element name="CommuneDInscription" minOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="Localite">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="DivisionTerritoriale">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="CodeInsee">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="5"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="DateDInscription" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Date de réception de la demande en mairie</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TypeDInscription" type="xs:string" minOccurs="0">
<xs:annotation>
<xs:documentation>Décrit le type d'inscription de l'électeur. Ex: vol pour volontaire …</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="SituationElectoraleAnterieure" minOccurs="0">
<xs:annotation>
<xs:documentation>Décrit la situation antérieure de l'électeur (prem: première inscription, cci: réinscription ...)</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="SituationDeLElecteur">
<xs:annotation>
<xs:documentation>1ère inscription dans une commune française=prem, changement de commune d'inscription=cci.
Les déménagements à l'intérieur d'une même commune ou d'un même arrondissement pour Paris, Lyon et Marseille ne doivent pas être transmis à l'Insee</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="ConsulatDePrecedenteInscription" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="AmbassadeOuPosteConsulaire" type="xs:string" minOccurs="0"/>
<xs:element name="Pays" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="CommuneDePrecedenteInscription" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Localite" type="xs:string" minOccurs="0"/>
<xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="PaysUeDerniereInscription" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Localite" type="xs:string" minOccurs="0"/>
<xs:element name="DivisionTerritoriale" type="xs:string" minOccurs="0"/>
<xs:element name="Pays" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

File diff suppressed because one or more lines are too long

View File

@ -29,7 +29,6 @@
"demandeur_adresse_pays_raw": "FRA",
"demandeur_adresse_ville": "Nancy",
"demandeur_adresse_voie": "Rue de l'Aigle Blanc",
"demandeur_adresse_etrangere": "37, Rue de l'Aigle Blanc, 54000 Nancy",
"demandeur_civilite": "Madame",
"demandeur_civilite_raw": "Madame",
"demandeur_email": "chelsea@whatever.com",

View File

@ -25,12 +25,13 @@
"aec_nature": "Extrait avec filiation",
"aec_nature_raw": "EXTRAIT-AVEC-FILIATION",
"date_acte": "2008-08-18",
"demandeur_adresse_code_postal": "BC V5Y 1V4",
"demandeur_adresse_num": "274",
"demandeur_adresse_pays": "CANADA",
"demandeur_adresse_pays_raw": "CAN",
"demandeur_adresse_ville": "Vancouver",
"demandeur_adresse_voie": "West 12th Avenue",
"demandeur_adresse_code_postal": "94270",
"demandeur_adresse_num": "22",
"demandeur_adresse_pays": "FRANCE",
"demandeur_adresse_pays_raw": "FRA",
"demandeur_adresse_ville": "Kremlin Bicetre",
"demandeur_adresse_code_postal": "94270",
"demandeur_adresse_voie": "rue Danton",
"demandeur_civilite": "Madame",
"demandeur_civilite_raw": "Madame",
"demandeur_email": "chelsea@whatever.com",

View File

@ -21,7 +21,9 @@ import os
import json
import base64
import copy
from xml.etree import ElementTree as etree
from lxml import etree as letree
import pytest
@ -31,6 +33,9 @@ from passerelle.contrib.mdel.utils import parse_date
import utils
AEC_XSD = 'ActeEtatCivil-V1.A.xsd'
ILE_XSD = 'ILE_v1.1.xsd'
def get_mdel_base_dir():
return os.path.join(os.path.dirname(__file__), 'data', 'mdel')
@ -42,6 +47,15 @@ def get_file_from_test_base_dir(filename):
return fd.read()
def validate_schema(doc, xsd):
xsd_path = os.path.join(get_mdel_base_dir(), xsd)
xsd = letree.parse(xsd_path).getroot()
schema = letree.XMLSchema(xsd)
parser = letree.XMLParser(schema=schema)
letree.parse(doc, parser=parser) # Will raise an exception if schema not respected
@pytest.fixture
def setup(db):
return utils.setup_access_rights(MDEL.objects.create(slug='test'))
@ -123,6 +137,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
assert resp.json['data']['demand_id'] == '15-4-AEC-LA'
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '15-4-AEC-LA--0', '15-4-AEC-LA-doc-.xml')
validate_schema(doc, AEC_XSD)
root = etree.parse(doc).getroot()
assert root.tag == 'EnveloppeMetierType'
@ -169,6 +185,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
assert resp.json['data']['demand_id'] == '16-1-AEC-LA'
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '16-1-AEC-LA--0', '16-1-AEC-LA-doc-.xml')
validate_schema(doc, AEC_XSD)
root = etree.parse(doc).getroot()
assert root.tag == 'EnveloppeMetierType'
@ -191,8 +209,9 @@ def test_create_aec_demand_type(app, setup, aec_payload):
assert root.find('DemandeActe/Demandeur/Telephone').text == '0122334455'
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Code').text == 'Autre'
assert root.find('DemandeActe/Demandeur/QualiteDemandeur/Libelle').text == 'Sa soeur'
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Adresse').text == '274 West 12th Avenue, Vancouver, BC V5Y 1V4'
assert root.find('DemandeActe/Demandeur/AdresseEtrangere/Pays').text == 'CAN'
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Voie').text == '22 rue Danton'
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/CodePostal').text == '94270'
assert root.find('DemandeActe/Demandeur/AdresseFrancaise/Ville').text == 'Kremlin Bicetre'
# Concerned
assert root.find('DemandeActe/Titulaire/Civilite').text == 'MONSIEUR'
@ -220,6 +239,8 @@ def test_create_aec_demand_type(app, setup, aec_payload):
assert resp.json['data']['demand_id'] == '17-1-AEC-LA'
doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '17-1-AEC-LA--0', '17-1-AEC-LA-doc-.xml')
validate_schema(doc, AEC_XSD)
root = etree.parse(doc).getroot()
assert root.tag == 'EnveloppeMetierType'
@ -273,12 +294,15 @@ def test_create_ile_demand_type(app, setup):
base_doc = os.path.join(get_resource_base_dir(), 'test', 'inputs', '1-14-ILE-LA--0')
doc = os.path.join(base_doc, '1-14-ILE-LA-doc-.xml')
validate_schema(doc, ILE_XSD)
root = etree.parse(doc).getroot()
assert root.tag == 'AvisDInscription'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/Localite').text == 'Nancy'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/CodePostal').text == '54 000'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/CodePostal').text == '54000'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/TypeVoie').text == 'RUE'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/NomVoie').text == 'RUE DU CHEVAL BLANC'
assert root.find('Inscription/Electeur/AdresseDeLElecteur/NumeroVoie').text == '37'