pda2suiviactivite.py 3.7 KB

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