pda2suiviactivite.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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
  10. from core import logconf
  11. from core.pde import PdaDb
  12. logger = logging.getLogger("pda2suiviactivite")
  13. logconf.start("pda2suiviactivite", logging.INFO)
  14. logger.info("Initialization")
  15. # Connect to db_PDA.mdb
  16. pda_db = PdaDb(autocommit=True)
  17. target_dir = Path(r"\\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA")
  18. # Mapping: (nom de la table, {correspondance champ : alias}, nom des noeuds, nom du fichier cible)
  19. mapping = [
  20. ("pdaEngin", {"strEnginId": "Id", "strEnginLibelleLong": "Nom"}, "Attelage", "attelages.xml"),
  21. ("pdaorigine", {"lngorigine": "Id", "strorigine": "Nom"}, "Depart", "depart.xml"),
  22. ("pdaEquip", {"strEquipesId": "Id", "strEquipesLibelle": "Nom"}, "Equipe", "equipes.xml"),
  23. ("pdalocalisation", {"lngTiersId": "Id", "strTiersMnemo": "Nom"}, "Localisation", "localisation.xml"),
  24. ("pdaNatInterv", {"strCategorieInterventioinId": "Id", "strCategorieInterventioinLibelle": "Nom"}, "NatureRealisation", "naturesinterventions.xml"),
  25. ("pdaHeures", {"annee": "annee", "mois": "mois", "heures": "heures"}, "pdaHeures", "heures.xml"),
  26. ]
  27. for tablename, fieldmapping, eltname, filename in mapping:
  28. maker = builder.ElementMaker(nsmap={'xsd': "http://www.w3.org/2001/XMLSchema",
  29. 'xsi': "http://www.w3.org/2001/XMLSchema-instance"})
  30. nodes = []
  31. sql = "SELECT {} FROM {}".format(
  32. ",".join([("{} AS {}".format(name, alias) if name != alias else name) for name, alias in fieldmapping.items()]),
  33. tablename
  34. )
  35. data = pda_db.read_all(sql)
  36. for record in data:
  37. node = maker.__call__(eltname, *[maker.__call__(field, str(value)) for field, value in record.items()])
  38. nodes.append(node)
  39. root = maker.__call__("ArrayOf" + eltname, *nodes)
  40. with open(target_dir / filename, "wb") as f:
  41. f.write(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))
  42. logger.info("> Exporte: {}".format(filename))
  43. logger.info("Export termine")