Browse Source

netgeo_checker.py ajouté

olivier.massot 7 năm trước cách đây
mục cha
commit
e205d35bed
6 tập tin đã thay đổi với 257 bổ sung92 xóa
  1. 9 0
      .gitignore
  2. 20 0
      core/constants.py
  3. 1 1
      core/logconf.py
  4. 0 33
      core/mail.py
  5. 4 56
      logging.yaml
  6. 223 2
      main.py

+ 9 - 0
.gitignore

@@ -0,0 +1,9 @@
+*.pyc
+.project
+.pydevproject
+.settings/
+Output/
+htmlcov/
+*.log
+*.log.1
+work/*

+ 20 - 0
core/constants.py

@@ -0,0 +1,20 @@
+'''
+
+@author: OMASSOT
+'''
+from path import Path
+
+MAIN = Path(__file__).parent.parent.abspath()
+
+# Dirs
+WRKDIR = MAIN / "work"
+RSCDIR = MAIN / "resources"
+DEFAULT_LOG_DIR = MAIN / "log"
+LOG_CONFIG_FILE = MAIN / "logging.yaml"
+
+
+
+
+### ***********  Ne pas modifier en dessous   *************** ###
+
+DEFAULT_LOG_DIR.mkdir_p()

+ 1 - 1
core/logconf.py

@@ -9,7 +9,7 @@ import traceback
 
 import yaml
 
-from core.pde import DEFAULT_LOG_DIR, LOG_CONFIG_FILE
+from core.constants import DEFAULT_LOG_DIR, LOG_CONFIG_FILE
 
 
 SYS_EXCEPT_HOOK = sys.excepthook

+ 0 - 33
core/mail.py

@@ -8,7 +8,6 @@ usage:
 '''
 from email.mime.multipart import MIMEMultipart
 from email.mime.text import MIMEText
-import logging.handlers
 import smtplib
 
 
@@ -39,38 +38,6 @@ class Mail():
             smtp.sendmail(self.fromaddr, self.toaddrs, self.mail.as_string())
 
 
-class BufferingSMTPHandler(logging.handlers.BufferingHandler):
-    """ buffering email for logging """
-    def __init__(self, mailhost, fromaddr, toaddrs, subject, capacity):
-        logging.handlers.BufferingHandler.__init__(self, capacity)
-        self.mailhost = mailhost
-        self.mailport = None
-        self.fromaddr = fromaddr
-        self.toaddrs = toaddrs
-        self.subject = subject
-
-    def flush(self):
-        try:
-            if len(self.buffer) > 0:
-                port = self.mailport if self.mailport else smtplib.SMTP_PORT
-
-                msg = "\n".join([self.format(record) for record in self.buffer])
-                msg = MIMEText(msg.encode('utf-8'), _charset='utf-8')
-                msg['Subject'] = self.subject
-                msg['From'] = self.fromaddr
-                msg['To'] = ",".join(self.toaddrs)
-
-                smtp = smtplib.SMTP(self.mailhost, port)
-                smtp.sendmail(self.fromaddr, self.toaddrs, msg.as_string())
-                smtp.quit()
-                self.buffer = []
-        except Exception as e:
-            print(e)
-            raise
-
-
-
-
 if __name__ == "__main__":
     mail = Mail("",
                 ["olinox14@yahoo.fr"],

+ 4 - 56
logging.yaml

@@ -28,69 +28,17 @@ handlers:
         class: core.BufferingSMTPHandler.BufferingSMTPHandler
         level: INFO
         formatter: complete
-        mailhost: smtp.bas-rhin.fr
-        fromaddr: log.%name%@bas-rhin.fr
-        toaddrs: [olivier.massot@bas-rhin.fr, jacky.klein@bas-rhin.fr]
+        mailhost: 
+        fromaddr: log.%name%@manchenumerique.fr
+        toaddrs: [olivier.massot@manchenumerique.fr]
         subject: Rapport d'execution de %name%
         capacity: 100000000
 
 loggers:
-    gf2analytique:
-        level: DEBUG
-        handlers: [console, file, mail]
-        propagate: no
-    wincan2ctrl:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    qgis_sync_compactage:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    qgis_sync_etancheite:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    qgis_sync_wincan:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    qgis_sync_video:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    qgis_sync_videores:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    ctrl2analytique:
-        level: DEBUG
-        handlers: [console, file, mail]
-        propagate: no
-    gf2factures:
-        level: DEBUG
-        handlers: [console, file, mail]
-        propagate: no
-    analytique2facture:
-        level: DEBUG
-        handlers: [console, file, mail]
-        propagate: no
-    pda2suiviactivite:
+    netgeo_checker:
         level: DEBUG
         handlers: [console]
         propagate: no
-    mails_rappel_ctrl:
-        level: DEBUG
-        handlers: [console, file,mail]
-        propagate: no
-    suiviactivite2pda:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
-    agrhum_traitement:
-        level: DEBUG
-        handlers: [console, file]
-        propagate: no
 
 root:
     level: DEBUG

+ 223 - 2
main.py

@@ -1,6 +1,227 @@
 '''
-Created on 10 sept. 2018
 
-@author: OMASSOT
+@author: olivier.massot, sept 2018
 '''
+from datetime import datetime
+import logging
 
+import shapefile
+
+from core import logconf
+from core.constants import MAIN
+
+
+logger = logging.getLogger("netgeo_checker")
+logconf.start("netgeo_checker", logging.INFO)
+
+# # POUR TESTER, décommenter les lignes suivantes
+##-----------------------------------------------
+
+# logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
+# logger.warning("<<<<<<<<<<<<<<   Mode TEST   >>>>>>>>>>>>>>>>>")
+
+##-----------------------------------------------
+
+ETUDE, IN_DIR = False, MAIN / "rsc" / "data_in" / "SCOPELEC_CAP_097AP0_REC_180829_OK"
+# ETUDE, IN_DIR = True, MAIN / "rsc" / "data_in" / "SCOPELEC_101BP0_APD_180725"
+
+COUCHES = ["artere_geo.shp", "cable_geo.shp", "equipement_passif.shp", "noeud_geo.shp", "tranchee_geo.shp", "zapbo_geo.shp"]
+
+
+
+def main(etude=False):
+    
+    # Controle des tranchées
+    filename = IN_DIR / "tranchee_geo.shp"
+    
+    logging.info("*****   Traitement du fichier '%s'   *****", filename.name)
+    logging.info("Type de dossier: %s", ("ADP" if etude else "DOE"))
+    
+    sf = shapefile.Reader(filename)
+
+    if sf.shapeType != shapefile.POLYLINE:
+        logger.error("Le fichier shapefile n'est pas de type PolyLigne", filename)
+        return
+
+    tranchees = sf.shapeRecords()
+    if not tranchees:
+        logger.warning("Le fichier shapefile ne contient aucune donnees")
+        
+    for i, tr_record in enumerate(tranchees):
+        
+        fields = [f for f in sf.fields if f[0] != 'DeletionFlag']
+        tr = {field[0].lower(): tr_record.record[i] for i, field in enumerate(fields)}
+        
+        logging.info("\n> Enregistrement %s\n", i)        
+        
+        
+        if not tr.get("TR_CODE"):
+            logger.error("- TR_CODE est manquant")
+            
+        if not tr.get("TR_NOM"):
+            logger.error("- TR_NOM est manquant")
+            
+        if tr.get("TR_NOM") != tr.get("TR_CODE"):
+            logging.error("- Les champs TR_CODE et TR_NOM sont différents")
+
+        # Facultatif en etude
+        if not tr.get("TR_ID_INSE"):
+            if not etude:
+                logger.error("- TR_ID_INSE est manquant")
+        else:
+            pass
+#             if not tr["TR_ID_INSE"] in LISTE_INSEE:
+#                 logger.error("- TR_ID_INSE n'existe pas dans la table ...")
+        
+        # Facultatif en etude
+        if not tr.get("TR_VOIE"):
+            if not etude:
+                logger.error("- TR_VOIE est manquant")
+
+        if not tr.get("TR_TYP_IMP"):
+            logger.error("- TR_TYP_IMP est manquant")
+        else:
+            if not tr["TR_TYP_IMP"] in ("ACCOTEMENT STABILISE", "ACCOTEMENT NON STABILISE", "CHAUSSEE LOURDE", "CHAUSSEE LEGERE", "FOSSE", "TROTTOIR", "ESPACE VERT", "ENCORBELLEMENT"):
+                logger.error("- TR_TYP_IMP ne possède pas une valeur valide ('%s')", tr["TR_TYP_IMP"])
+            
+        if not tr.get("TR_MOD_POS"):
+            logger.error("- TR_MOD_POS est manquant")
+        else:
+            if not tr["TR_MOD_POS"] in ("TRADITIONNEL", "MICRO TRANCHEE", "FONCAGE 60", "FONCAGE 90", "FONCAGE 120", "TRANCHEUSE", "FORAGE URBAIN", "FORAGE RURAL", "ENCORBELLEMENT"):
+                logger.error("- TR_MOD_POS ne possède pas une valeur valide ('%s')", tr["TR_MOD_POS"])
+            
+        if not tr.get("TR_MOD_POS_AI"):
+            logger.error("- TR_MOD_POS_AI est manquant")
+        else:
+            if not tr["TR_MOD_POS_AI"] in ("TRA", "ALL", "FONCAGE 60", "FON", "FOR", "ENC"):
+                logger.error("- TR_MOD_POS_AI ne possède pas une valeur valide ('%s')", tr["TR_MOD_POS_AI"])
+              
+        if not tr.get("TR_LONG"):
+            logger.error("- TR_LONG est manquant")
+        else:
+            try:
+                _ = float(tr["TR_LONG"])
+            except ValueError:
+                logger.error("- TR_LONG ne possède pas une valeur valide ('%s')", tr["TR_LONG"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_LARG"):
+            if not etude:
+                logger.error("- TR_LARG est manquant")
+        else:
+            try:
+                _ = float(tr["TR_LARG"])
+            except ValueError:
+                logger.error("- TR_LARG ne possède pas une valeur valide ('%s')", tr["TR_LARG"])
+                
+        if not tr.get("TR_REVET"):
+            logger.error("- TR_REVET est manquant")       
+        else:
+            if not tr["TR_REVET"] in ("SABLE", "BICOUCHE", "ENROBE", "BETON", "PAVE", "TERRAIN NATUREL"):
+                logger.error("- TR_REVET ne possède pas une valeur valide ('%s')", tr["TR_REVET"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_CHARGE"):
+            if not etude:
+                logger.error("- TR_CHARGE est manquant")
+        else:
+            try:
+                _ = float(tr["TR_CHARGE"])
+            except ValueError:
+                logger.error("- TR_CHARGE ne possède pas une valeur valide ('%s')", tr["TR_CHARGE"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_GRILLAG"):
+            if not etude:
+                logger.error("- TR_GRILLAG est manquant")
+        else:
+            try:
+                _ = float(tr["TR_GRILLAG"])
+            except ValueError:
+                logger.error("- TR_GRILLAG ne possède pas une valeur valide ('%s')", tr["TR_GRILLAG"])
+            
+        # Facultatif en etude
+        if not tr.get("TR_REMBLAI"):
+            if not etude:
+                logger.error("- TR_REMBLAI est manquant")
+        else:
+            pass
+#             if not tr["TR_REMBLAI"] in LISTE_REMBLAIS:
+#                 logger.error("- TR_REMBLAI ne possède pas une valeur valide ('%s')", tr["TR_REMBLAI"])
+
+        # Facultatif en etude
+        if not tr.get("TR_PLYNOX"):
+            if not etude:
+                logger.error("- TR_PLYNOX est manquant")
+        else:
+            if not tr["TR_PLYNOX"] in ("OUI", "NON"):
+                logger.error("- TR_PLYNOX ne possède pas une valeur valide ('%s')", tr["TR_PLYNOX"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_PRO_VOI"):
+            if not etude:
+                logger.error("- TR_PRO_VOI est manquant")
+        else:
+            if not tr["TR_PRO_VOI"] in ("COMMUNE", "COMMUNAUTE DE COMMUNES", "DEPARTEMENT", "ETAT", "PRIVE"):
+                logger.error("- TR_PRO_VOI ne possède pas une valeur valide ('%s')", tr["TR_PRO_VOI"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_GEST_VO"):
+            if not etude:
+                logger.error("- TR_GEST_VO est manquant")
+        else:
+            if not tr["TR_GEST_VO"] in ("COMMUNE", "COMMUNAUTE DE COMMUNES", "DEPARTEMENT", "ETAT", "PRIVE"):
+                logger.error("- TR_GEST_VO ne possède pas une valeur valide ('%s')", tr["TR_GEST_VO"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_SCHEMA"):
+            if not etude:
+                logger.error("- TR_SCHEMA est manquant")
+        else:
+            pass
+#             if not tr["TR_SCHEMA"] in LISTE_SCHEMAS:
+#                 logger.error("- TR_SCHEMA ne possède pas une valeur valide ('%s')", tr["TR_REMBLAI"])
+
+        # Facultatif en etude
+        if not tr.get("TR_DATE_IN"):
+            if not etude:
+                logger.error("- TR_DATE_IN est manquant")
+        else:
+            try:
+                _ = datetime.strptime(tr["TR_DATE_IN"], "%d-%m-%Y")
+            except ValueError:
+                logger.error("- TR_DATE_IN ne possède pas une valeur ou un format valide ('%s')", tr["TR_DATE_IN"])
+                
+        # Facultatif en etude
+        if not tr.get("TR_SRC_GEO"):
+            if not etude:
+                logger.error("- TR_SRC_GEO est manquant")
+            
+        # Facultatif en etude
+        if not tr.get("TR_QLT_GEO"):
+            if not etude:
+                logger.error("- TR_QLT_GEO est manquant")
+            
+        # Facultatif en etude
+        if not tr.get("TR_PRO_MD"):
+            if not etude:
+                logger.error("- TR_PRO_MD est manquant")
+        
+        # Facultatif en etude
+        if not tr.get("TR_COMMENT"):
+            if not etude:
+                logger.error("- TR_COMMENT est manquant")
+            
+        # Facultatif en etude
+        if not tr.get("TR_STATUT"):
+            if not etude:
+                logger.error("- TR_STATUT est manquant")
+        else:
+            if not tr["TR_STATUT"] in ("EN ETUDE", "EN REALISATION", "EN SERVICE", "HORS SERVICE"):
+                logger.error("- TR_STATUT ne possède pas une valeur valide ('%s')", tr["TR_STATUT"])
+    del sf, tranchees
+
+
+if __name__ == "__main__":
+    main(ETUDE)
+    logger.info("-- Fin --")