| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- '''
- Schéma de validation des données MN2
- @author: olivier.massot, 2018
- '''
- import logging
- from qgis.core import QgsProject
- from core.cerberus_ import is_positive_int, is_positive_float
- from core.checking import BaseChecker
- from core.mncheck import QgsModel
- logger = logging.getLogger("mncheck")
- SCHEMA_NAME = "Schéma MN v3 APD"
- XMIN, XMAX, YMIN, YMAX = 1341999, 1429750, 8147750, 8294000
- CRS = 'EPSG:3949' # Coordinate Reference System
- TOLERANCE = 0.5
- STATUTS = ['ETUDE PRELIMINAIRE', 'ETUDE DE DIAGNOSTIC', 'AVANT-PROJET PROJET', 'PROJET', 'PASSATION DES MARCHES DE TRAVAUX',
- 'ETUDE D EXECUTION', 'TRAVAUX' , 'RECOLEMENT', 'MAINTIEN EN CONDITIONS OPERATIONNELLES']
- ##### Modeles
-
- class SiteTelecom(QgsModel):
- layername = "SITE_TELECOM"
- geom_type = QgsModel.GEOM_POINT
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- pk = "ST_CODE"
- schema = {'ST_CODE': {'type': 'string', 'empty': False},
- 'ST_NOM': {'type': 'string', 'empty': False},
- 'ST_TYPFCT': {'type': 'string', 'empty': False, 'allowed': ['SITE HEBERGEMENT',
- 'NOEUD RACCORDEMENT OPTIQUE',
- 'SOUS-REPARTITEUR OPTIQUE',
- 'SOUS-REPARTITEUR OPTIQUE COLOCALISE',
- 'NOEUD RACCORDEMENT D ABONNES',
- 'NOEUD RACCORDEMENT D ABONNES - HAUT DEBIT',
- 'NOEUD RACCORDEMENT D ABONNES - MONTEE EN DEBIT']},
- 'ST_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]},
- 'ST_NBPRISE': {'empty': False, 'validator': is_positive_int}
- }
- class SiteClient(QgsModel):
- layername = "SITE_CLIENT"
- geom_type = QgsModel.GEOM_POINT
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- schema = {'SC_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['RESIDENTIEL', 'PROFESSIONNEL', 'OPERATEUR', 'TECHNIQUE']},
- 'SC_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]},
- 'SC_NBPRISE': {'empty': False, 'validator': is_positive_int},
- 'SC_NBPRHAB': {'empty': False, 'validator': is_positive_int},
- 'SC_NBPRPRO': {'empty': False, 'validator': is_positive_int},
- 'SC_ID_SITE': {'type': 'string', 'empty': False},
- 'SC_NUM_RUE': {'type': 'string', 'empty': False},
- 'SC_REPET': {'type': 'string', 'empty': False},
- 'SC_DNUBAT': {'type': 'string', 'empty': False},
- 'SC_DESC': {'type': 'string', 'empty': False},
- 'SC_NOM_RUE': {'type': 'string', 'empty': False},
- 'SC_NOM_COM': {'type': 'string', 'empty': False},
- 'SC_ETAT': {'type': 'string', 'empty': False, 'allowed': ['VALIDE', 'OBSOLETE', 'NOUVEAU', 'FUTUR']},
- 'SC_ATT_PTO': {'empty': False, 'validator': is_positive_float}
- }
- class Cable(QgsModel):
- layername = "CABLE"
- geom_type = QgsModel.GEOM_LINE
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- schema = {'CA_TYPFON': {'type': 'string', 'empty': False, 'allowed': ['COLLECTE TRANSPORT DISTRIBUTION', 'COLLECTE', 'COLLECTE TRANSPORT', 'COLLECTE DISTRIBUTION', 'TRANSPORT DISTRIBUTION', 'TRANSPORT', 'DISTRIBUTION', 'RACCORDEMENT FINAL', 'BOUCLE METROPOLITAINE', 'LONGUE DISTANCE (LONG HAUL)', 'NON COMMUNIQUE']},
- 'CA_TYPSTR': {'type': 'string', 'empty': False, 'allowed': ['CONDUITE', 'AERIEN', 'COLONNE MONTANTE', 'IMMERGE', 'FACADE']},
- 'CA_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]},
- 'CA_CAPFO': {'empty': False, 'validator': is_positive_int},
- 'CA_MODULO': {'empty': False, 'validator': is_positive_int},
- 'CA_SUPPORT': {'type': 'string', 'empty': False, 'allowed': ['0', '1']}
- }
-
- class Zapbo(QgsModel):
- layername = "ZAPBO"
- geom_type = QgsModel.GEOM_POLYGON
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- schema = {'ZP_NBPRISE': {'empty': False, 'validator': is_positive_int},
- 'ZP_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
- 'ZP_STATUT': {'type': 'string', 'empty': False, 'allowed': [STATUTS]}
- }
-
-
- class Zasro(QgsModel):
- layername = "ZASRO"
- geom_type = QgsModel.GEOM_POLYGON
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- schema = {'ZS_CODE': {'type': 'string', 'empty': False},
- 'ZS_NBPRISE': {'empty': False, 'validator': is_positive_int}
- }
-
- class Adduction(QgsModel):
- layername = "ADDUCTION"
- geom_type = QgsModel.GEOM_LINE
- bounding_box = (XMIN,YMIN,XMAX,YMAX)
- schema = {'AD_ISOLE': {'type': 'string', 'empty': False, 'allowed': ['0', '1']},
- 'AD_LONG': {'empty': False, 'validator': is_positive_float}
- }
- models = []
-
- ####### Validateur
- class Mn3ApdChecker(BaseChecker):
-
- def setUp(self):
-
- self.dataset = {}
- for model in models:
- model.layer = next((l for l in QgsProject.instance().mapLayers().values() \
- if l.name().lower() == model.layername.lower()), None)
- self.dataset[model] = [model(f) for f in model.layer.getFeatures()] if model.layer else []
-
-
- checkers = [Mn3ApdChecker]
|