pda2suiviactivite.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. '''
  2. Script d'export des données de configuration des applcations SuiviDesActivtes et SuiviActivitePC
  3. Les données d'origine sont issues de la base \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\db_PDA.mdb
  4. Les fichiers résultats sont les fichiers *.xml du répertoire \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA\
  5. '''
  6. import logging
  7. from lxml import builder # @UnresolvedImport
  8. from lxml import etree # @UnresolvedImport
  9. from path import Path # @UnusedImport
  10. from core import logconf
  11. from core.pde import PdaDb, PDA_FILES_DEST
  12. logger = logging.getLogger("pda2suiviactivite")
  13. logconf.start("pda2suiviactivite", logging.DEBUG)
  14. logger.info("Initialization")
  15. # # POUR TESTER, décommenter les lignes suivantes
  16. ##-----------------------------------------------
  17. # logger.warning("Mode TEST")
  18. # PDA_FILES_DEST = Path(r"L:\4-transversal\BDD\mdb_test\PDA\Fichiers_PDA")
  19. # PdaDb._path = Path(r"L:\4-transversal\BDD\mdb_test\PDA\db_PDA.mdb")
  20. ##-----------------------------------------------
  21. # Connect to db_PDA.mdb
  22. pda_db = PdaDb(autocommit=True)
  23. # Explication du mapping ci dessous:
  24. # (
  25. # nom de la table,
  26. # {champ: noeud),
  27. # nom des nodes contenant chaque enregistrement,
  28. # nom du fichier cible
  29. # Order by
  30. # )
  31. mapping = [
  32. ("pdaEngin",
  33. {"strEnginId": "Id", "strEnginLibelleLong": "Nom"},
  34. "Attelage",
  35. "attelages.xml",
  36. ["strEnginLibelleLong"]
  37. ),
  38. ("pdaorigine",
  39. {"lngorigine": "Id", "strorigine": "Nom"},
  40. "Depart",
  41. "depart.xml",
  42. ["strorigine"]
  43. ),
  44. ("pdaHeures",
  45. {"annee": "annee", "mois": "mois", "heures": "heures"},
  46. "pdaHeures",
  47. "heures.xml",
  48. ["annee", "mois"]
  49. ),
  50. ("pdaEquip",
  51. {"strEquipesId": "Id", "strEquipesLibelle": "Nom"},
  52. "Equipe",
  53. "equipes.xml",
  54. ["strEquipesLibelle"]
  55. ),
  56. ("pdalocalisation",
  57. {"lngTiersId": "Id", "strTiersMnemo": "Nom"},
  58. "Localisation",
  59. "localisation.xml",
  60. ["strTiersMnemo"]
  61. ),
  62. ("pdaNatInterv",
  63. {"strCategorieInterventioinId": "Id", "strCategorieInterventioinLibelle": "Nom"},
  64. "NatureRealisation",
  65. "naturesinterventions.xml",
  66. ["strCategorieInterventioinLibelle"]
  67. )
  68. ]
  69. for tablename, fieldmapping, eltname, filename, order in mapping:
  70. maker = builder.ElementMaker(nsmap={'xsd': "http://www.w3.org/2001/XMLSchema",
  71. 'xsi': "http://www.w3.org/2001/XMLSchema-instance"})
  72. nodes = []
  73. sql = "SELECT {mapping} FROM {tbl} ORDER BY {order}".format(
  74. mapping=",".join(["[{}].[{}] as {}".format(tablename, key, val) for key, val in fieldmapping.items()]),
  75. tbl=tablename,
  76. order=",".join(order)
  77. )
  78. logger.debug(sql)
  79. data = [record._asdict() for record in pda_db.read_all(sql)]
  80. for record in data:
  81. node = maker.__call__(eltname, *[maker.__call__(field, str(value)) for field, value in record.items()])
  82. nodes.append(node)
  83. root = maker.__call__("ArrayOf" + eltname, *nodes)
  84. if not filename[-4:] == ".xml":
  85. filename += ".xml"
  86. with open(PDA_FILES_DEST / filename, "wb") as f:
  87. f.write(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))
  88. logger.info("> Exporte: {}".format(filename))
  89. logger.info("Export termine")