main.py 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. '''
  2. @author: olivier.massot, sept 2018
  3. '''
  4. from datetime import datetime
  5. import logging
  6. import shapefile
  7. from core import logconf
  8. from core.constants import MAIN
  9. logger = logging.getLogger("netgeo_checker")
  10. logconf.start("netgeo_checker", logging.INFO)
  11. # # POUR TESTER, décommenter les lignes suivantes
  12. ##-----------------------------------------------
  13. # logger.handlers = [h for h in logger.handlers if (type(h) == logging.StreamHandler)]
  14. # logger.warning("<<<<<<<<<<<<<< Mode TEST >>>>>>>>>>>>>>>>>")
  15. ##-----------------------------------------------
  16. ETUDE, IN_DIR = False, MAIN / "rsc" / "data_in" / "SCOPELEC_CAP_097AP0_REC_180829_OK"
  17. # ETUDE, IN_DIR = True, MAIN / "rsc" / "data_in" / "SCOPELEC_101BP0_APD_180725"
  18. COUCHES = ["artere_geo.shp", "cable_geo.shp", "equipement_passif.shp", "noeud_geo.shp", "tranchee_geo.shp", "zapbo_geo.shp"]
  19. def main(etude=False):
  20. # Controle des tranchées
  21. filename = IN_DIR / "tranchee_geo.shp"
  22. logging.info("***** Traitement du fichier '%s' *****", filename.name)
  23. logging.info("Type de dossier: %s", ("ADP" if etude else "DOE"))
  24. sf = shapefile.Reader(filename)
  25. if sf.shapeType != shapefile.POLYLINE:
  26. logger.error("Le fichier shapefile n'est pas de type PolyLigne", filename)
  27. return
  28. tranchees = sf.shapeRecords()
  29. if not tranchees:
  30. logger.warning("Le fichier shapefile ne contient aucune donnees")
  31. for i, tr_record in enumerate(tranchees):
  32. fields = [f for f in sf.fields if f[0] != 'DeletionFlag']
  33. tr = {field[0].lower(): tr_record.record[i] for i, field in enumerate(fields)}
  34. logging.info("\n> Enregistrement %s\n", i)
  35. if not tr.get("TR_CODE"):
  36. logger.error("- TR_CODE est manquant")
  37. if not tr.get("TR_NOM"):
  38. logger.error("- TR_NOM est manquant")
  39. if tr.get("TR_NOM") != tr.get("TR_CODE"):
  40. logging.error("- Les champs TR_CODE et TR_NOM sont différents")
  41. # Facultatif en etude
  42. if not tr.get("TR_ID_INSE"):
  43. if not etude:
  44. logger.error("- TR_ID_INSE est manquant")
  45. else:
  46. pass
  47. # if not tr["TR_ID_INSE"] in LISTE_INSEE:
  48. # logger.error("- TR_ID_INSE n'existe pas dans la table ...")
  49. # Facultatif en etude
  50. if not tr.get("TR_VOIE"):
  51. if not etude:
  52. logger.error("- TR_VOIE est manquant")
  53. if not tr.get("TR_TYP_IMP"):
  54. logger.error("- TR_TYP_IMP est manquant")
  55. else:
  56. if not tr["TR_TYP_IMP"] in ("ACCOTEMENT STABILISE", "ACCOTEMENT NON STABILISE", "CHAUSSEE LOURDE", "CHAUSSEE LEGERE", "FOSSE", "TROTTOIR", "ESPACE VERT", "ENCORBELLEMENT"):
  57. logger.error("- TR_TYP_IMP ne possède pas une valeur valide ('%s')", tr["TR_TYP_IMP"])
  58. if not tr.get("TR_MOD_POS"):
  59. logger.error("- TR_MOD_POS est manquant")
  60. else:
  61. if not tr["TR_MOD_POS"] in ("TRADITIONNEL", "MICRO TRANCHEE", "FONCAGE 60", "FONCAGE 90", "FONCAGE 120", "TRANCHEUSE", "FORAGE URBAIN", "FORAGE RURAL", "ENCORBELLEMENT"):
  62. logger.error("- TR_MOD_POS ne possède pas une valeur valide ('%s')", tr["TR_MOD_POS"])
  63. if not tr.get("TR_MOD_POS_AI"):
  64. logger.error("- TR_MOD_POS_AI est manquant")
  65. else:
  66. if not tr["TR_MOD_POS_AI"] in ("TRA", "ALL", "FONCAGE 60", "FON", "FOR", "ENC"):
  67. logger.error("- TR_MOD_POS_AI ne possède pas une valeur valide ('%s')", tr["TR_MOD_POS_AI"])
  68. if not tr.get("TR_LONG"):
  69. logger.error("- TR_LONG est manquant")
  70. else:
  71. try:
  72. _ = float(tr["TR_LONG"])
  73. except ValueError:
  74. logger.error("- TR_LONG ne possède pas une valeur valide ('%s')", tr["TR_LONG"])
  75. # Facultatif en etude
  76. if not tr.get("TR_LARG"):
  77. if not etude:
  78. logger.error("- TR_LARG est manquant")
  79. else:
  80. try:
  81. _ = float(tr["TR_LARG"])
  82. except ValueError:
  83. logger.error("- TR_LARG ne possède pas une valeur valide ('%s')", tr["TR_LARG"])
  84. if not tr.get("TR_REVET"):
  85. logger.error("- TR_REVET est manquant")
  86. else:
  87. if not tr["TR_REVET"] in ("SABLE", "BICOUCHE", "ENROBE", "BETON", "PAVE", "TERRAIN NATUREL"):
  88. logger.error("- TR_REVET ne possède pas une valeur valide ('%s')", tr["TR_REVET"])
  89. # Facultatif en etude
  90. if not tr.get("TR_CHARGE"):
  91. if not etude:
  92. logger.error("- TR_CHARGE est manquant")
  93. else:
  94. try:
  95. _ = float(tr["TR_CHARGE"])
  96. except ValueError:
  97. logger.error("- TR_CHARGE ne possède pas une valeur valide ('%s')", tr["TR_CHARGE"])
  98. # Facultatif en etude
  99. if not tr.get("TR_GRILLAG"):
  100. if not etude:
  101. logger.error("- TR_GRILLAG est manquant")
  102. else:
  103. try:
  104. _ = float(tr["TR_GRILLAG"])
  105. except ValueError:
  106. logger.error("- TR_GRILLAG ne possède pas une valeur valide ('%s')", tr["TR_GRILLAG"])
  107. # Facultatif en etude
  108. if not tr.get("TR_REMBLAI"):
  109. if not etude:
  110. logger.error("- TR_REMBLAI est manquant")
  111. else:
  112. pass
  113. # if not tr["TR_REMBLAI"] in LISTE_REMBLAIS:
  114. # logger.error("- TR_REMBLAI ne possède pas une valeur valide ('%s')", tr["TR_REMBLAI"])
  115. # Facultatif en etude
  116. if not tr.get("TR_PLYNOX"):
  117. if not etude:
  118. logger.error("- TR_PLYNOX est manquant")
  119. else:
  120. if not tr["TR_PLYNOX"] in ("OUI", "NON"):
  121. logger.error("- TR_PLYNOX ne possède pas une valeur valide ('%s')", tr["TR_PLYNOX"])
  122. # Facultatif en etude
  123. if not tr.get("TR_PRO_VOI"):
  124. if not etude:
  125. logger.error("- TR_PRO_VOI est manquant")
  126. else:
  127. if not tr["TR_PRO_VOI"] in ("COMMUNE", "COMMUNAUTE DE COMMUNES", "DEPARTEMENT", "ETAT", "PRIVE"):
  128. logger.error("- TR_PRO_VOI ne possède pas une valeur valide ('%s')", tr["TR_PRO_VOI"])
  129. # Facultatif en etude
  130. if not tr.get("TR_GEST_VO"):
  131. if not etude:
  132. logger.error("- TR_GEST_VO est manquant")
  133. else:
  134. if not tr["TR_GEST_VO"] in ("COMMUNE", "COMMUNAUTE DE COMMUNES", "DEPARTEMENT", "ETAT", "PRIVE"):
  135. logger.error("- TR_GEST_VO ne possède pas une valeur valide ('%s')", tr["TR_GEST_VO"])
  136. # Facultatif en etude
  137. if not tr.get("TR_SCHEMA"):
  138. if not etude:
  139. logger.error("- TR_SCHEMA est manquant")
  140. else:
  141. pass
  142. # if not tr["TR_SCHEMA"] in LISTE_SCHEMAS:
  143. # logger.error("- TR_SCHEMA ne possède pas une valeur valide ('%s')", tr["TR_REMBLAI"])
  144. # Facultatif en etude
  145. if not tr.get("TR_DATE_IN"):
  146. if not etude:
  147. logger.error("- TR_DATE_IN est manquant")
  148. else:
  149. try:
  150. _ = datetime.strptime(tr["TR_DATE_IN"], "%d-%m-%Y")
  151. except ValueError:
  152. logger.error("- TR_DATE_IN ne possède pas une valeur ou un format valide ('%s')", tr["TR_DATE_IN"])
  153. # Facultatif en etude
  154. if not tr.get("TR_SRC_GEO"):
  155. if not etude:
  156. logger.error("- TR_SRC_GEO est manquant")
  157. # Facultatif en etude
  158. if not tr.get("TR_QLT_GEO"):
  159. if not etude:
  160. logger.error("- TR_QLT_GEO est manquant")
  161. # Facultatif en etude
  162. if not tr.get("TR_PRO_MD"):
  163. if not etude:
  164. logger.error("- TR_PRO_MD est manquant")
  165. # Facultatif en etude
  166. if not tr.get("TR_COMMENT"):
  167. if not etude:
  168. logger.error("- TR_COMMENT est manquant")
  169. # Facultatif en etude
  170. if not tr.get("TR_STATUT"):
  171. if not etude:
  172. logger.error("- TR_STATUT est manquant")
  173. else:
  174. if not tr["TR_STATUT"] in ("EN ETUDE", "EN REALISATION", "EN SERVICE", "HORS SERVICE"):
  175. logger.error("- TR_STATUT ne possède pas une valeur valide ('%s')", tr["TR_STATUT"])
  176. del sf, tranchees
  177. if __name__ == "__main__":
  178. main(ETUDE)
  179. logger.info("-- Fin --")