Code source de pyspc.metadata.sandre.sandre

#!/usr/bin/python3
# -*- coding: utf-8 -*-
########################################################################
#
# This file is part of python module <pyspc>.
# Copyright (C) 2013-2021  R. Marty
#   (renaud.marty@developpement-durable.gouv.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see COPYING.txt).
# If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
"""
Méta-données (lieux, contact, courbe tarage) - XML Sandre
"""
from pyspc.convention.sandre import DATATYPES

DATATYPES = sorted([d for d in DATATYPES
                    if d.startswith('loc')
                    or d.startswith('ratingcurve')
                    or d.startswith('user')])


[docs] class Sandre(): """ Structure liée aux méta-données XML Sandre """
[docs] def __init__(self, filename=None): """ Initialisation de l'instance de la classe XML Sandre Parameters ---------- filename : str Fichier local du flux GeoJSON de Vigicrues """ self.filename = filename
def __str__(self): """ Afficher les méta-données de l'instance XML Sandre """ text = """ ************************************* *********** XML Sandre - Metadata *** ************************************* * FICHIER = {filename} ************************************* """ return text.format(**vars(self))
[docs] def read(self): """ Lire le fichier XML du Sandre Examples -------- >>> import pyspc.metadata.sandre as _sandre Exemple de fichier de sites hydro >>> f = 'data/metadata/sandre/SiteHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2017-12-11 15:54:06 de version 1.1 Emetteur: Intervenant SANDRE 1537::<sans nom> [0 contact] [None] Destinataire: Intervenant SIRET 13000930100016::<sans nom> [1 contact] [Contact 398::<sans civilite> <sans nom> <sans prenom> [intervenant 13000930100016]] Contenu: 0 intervenants 2 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations >>> for s in content.siteshydro: ... print(s) Site STANDARD K0550010::La Loire à Bas-en-Basset [0 station] Site STANDARD K0260010::La Loire à Chadrac [0 station] Exemple de fichier de stations hydro >>> f = 'data/metadata/sandre/StationHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2017-12-11 15:54:06 de version 1.1 Emetteur: Intervenant SANDRE 1537::<sans nom> [0 contact] [None] Destinataire: Intervenant SIRET 13000930100016::<sans nom> [1 contact] [Contact 398::<sans civilite> <sans nom> <sans prenom> [intervenant 13000930100016]] Contenu: 0 intervenants 1 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations >>> for s in content.siteshydro: ... print(s) ... for s2 in s.stations: ... print(s2) Site STANDARD K4350010::<sans libelle> [2 stations] Station STD K435001020::La Loire à Orléans - Quai du Roi [0 capteur] Station STD K435001010::La Loire à Orléans - Pont Royals [0 capteur] Exemple de fichier de sites météo >>> f = 'data/metadata/sandre/SiteMeteo.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2018-09-13 09:19:21 de version 1.1 Emetteur: Intervenant SANDRE 1537::<sans nom> [0 contact] [None] Destinataire: Intervenant SANDRE 0::<sans nom> [0 contact] [None] Contenu: 0 intervenants 0 siteshydro 3 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations >>> for s in content.siteshydro: ... print(s) Sitemeteo 043130002::MAZET-VOLAMONT [2 grandeurs] Sitemeteo 043091005::LES ESTABLES_SAPC [2 grandeurs] Sitemeteo 043051003::LE-CHAMBON-SUR-LIGNON-SPC [1 grandeur] Exemple de fichier de courbes de tarage >>> f = 'data/metadata/sandre/RatingCurves.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2018-09-26 17:22:46 de version 1.1 Emetteur: Intervenant SANDRE 1537::<sans nom> [0 contact] [None] Destinataire: Intervenant SIRET 13000930100016::<sans nom> [1 contact] [Contact 398::<sans civilite> <sans nom> <sans prenom> [intervenant 13000930100016]] Contenu: 0 intervenants 0 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 2 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations >>> for s in content.courbestarage: ... print(s) Courbe de tarage de type fonction puissance 10016::H201416 [8 points pivot] Courbe de tarage de type fonction puissance 10017::H201620 [7 points pivot] Exemple de fichier 'user_admin' >>> f = 'data/metadata/sandre/SiteHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2019-08-06 09:07:44 de version 1.1 Emetteur: Intervenant SANDRE 0000::<sans nom> [0 contact] [None] Destinataire: Intervenant SANDRE 1111::<sans nom> [1 contact] [Contact 404::<sans civilite> <sans nom> <sans prenom> [intervenant 1111]] Contenu: 1 intervenants 0 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations >>> for i in content.intervenants: ... print(i) Intervenant SANDRE 1111::Service de Prévision des Crues (SPC) X-Y-Z [1 contact] Exemple de fichier 'user_loc_meteo' >>> f = 'data/metadata/sandre/SiteHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2019-08-06 09:07:44 de version 1.1 Emetteur: Intervenant SANDRE 0000::<sans nom> [0 contact] [None] Destinataire: Intervenant SANDRE 1111::<sans nom> [1 contact] [Contact 404::<sans civilite> <sans nom> <sans prenom> [intervenant 1111]] Contenu: 0 intervenants 0 siteshydro 5 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations Exemple de fichier 'user_site_hydro' >>> f = 'data/metadata/sandre/SiteHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2019-08-06 09:07:44 de version 1.1 Emetteur: Intervenant SANDRE 0000::<sans nom> [0 contact] [None] Destinataire: Intervenant SANDRE 1111::<sans nom> [1 contact] [Contact 404::<sans civilite> <sans nom> <sans prenom> [intervenant 1111]] Contenu: 0 intervenants 6 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations Exemple de fichier 'user_station_hydro' >>> f = 'data/metadata/sandre/SiteHydro.xml' >>> sandre = _sandre.Sandre(filename=f) >>> content = sandre.read() >>> content Message du 2019-08-06 09:07:44 de version 1.1 Emetteur: Intervenant SANDRE 0000::<sans nom> [0 contact] [None] Destinataire: Intervenant SANDRE 1111::<sans nom> [1 contact] [Contact 404::<sans civilite> <sans nom> <sans prenom> [intervenant 1111]] Contenu: 0 intervenants 2 siteshydro 0 sitesmeteo 0 seuilshydro 0 seuilsmeteo 0 modelesprevision 0 evenements 0 courbestarage 0 jaugeages 0 courbescorrection 0 serieshydro 0 seriesmeteo 0 seriesobselab 0 simulations See Also -------- Repose sur la libhydro : https://gitlab.com/vigicrues/hydro3/libhydro """ from libhydro.conv import xml as _xml return _xml.Message.from_file(self.filename)
[docs] def check_dtype(self, dtype): """ Contrôler s'il s'agit bien d'une méta-donnée autorisée Parameters ---------- dtype : str Type de méta-donnée à contrôler """ try: DATATYPES.index(dtype) except ValueError as ve: raise ValueError("Export incorrect") from ve
[docs] @classmethod def get_types(cls): """ Renvoyer la liste des méta-données du XML Sandre Returns ------- list Types de méta-données de la XML Sandre """ return sorted(DATATYPES)