| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- '''
- Script d'export des données de configuration des applcations SuiviDesActivtes et SuiviActivitePC
- Les données d'origine sont issues de la base \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\db_PDA.mdb
- Les fichiers résultats sont les fichiers *.xml du répertoire \\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA\
- '''
- import logging
- from lxml import builder # @UnresolvedImport
- from lxml import etree # @UnresolvedImport
- from path import Path # @UnusedImport
- from core import logconf
- from core.pde import PdaDb, PDA_FILES_DEST
- logger = logging.getLogger("pda2suiviactivite")
- logconf.start("pda2suiviactivite", logging.DEBUG)
- logger.info("Initialization")
- # # POUR TESTER, décommenter les lignes suivantes
- ##-----------------------------------------------
- # logger.warning("Mode TEST")
- # PDA_FILES_DEST = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\PDA\Fichiers_PDA")
- # PdaDb._path = Path(r"\\h2o\local\4-transversal\BDD\mdb_test\PDA\db_PDA.mdb")
- ##-----------------------------------------------
- # Connect to db_PDA.mdb
- pda_db = PdaDb(autocommit=True)
- # Explication du mapping ci dessous:
- # (
- # nom de la table,
- # {champ: noeud),
- # nom des nodes contenant chaque enregistrement,
- # nom du fichier cible
- # Order by
- # )
- mapping = [
- ("pdaEngin",
- {"strEnginId": "Id", "strEnginLibelleLong": "Nom"},
- "Attelage",
- "attelages.xml",
- ["strEnginLibelleLong"]
- ),
- ("pdaorigine",
- {"lngorigine": "Id", "strorigine": "Nom"},
- "Depart",
- "depart.xml",
- ["strorigine"]
- ),
- ("pdaHeures",
- {"annee": "annee", "mois": "mois", "heures": "heures"},
- "pdaHeures",
- "heures.xml",
- ["annee", "mois"]
- ),
- ("pdaEquip",
- {"strEquipesId": "Id", "strEquipesLibelle": "Nom"},
- "Equipe",
- "equipes.xml",
- ["strEquipesLibelle"]
- ),
- ("pdalocalisation",
- {"lngTiersId": "Id", "strTiersMnemo": "Nom"},
- "Localisation",
- "localisation.xml",
- ["strTiersMnemo"]
- ),
- ("pdaNatInterv",
- {"strCategorieInterventioinId": "Id", "strCategorieInterventioinLibelle": "Nom"},
- "NatureRealisation",
- "naturesinterventions.xml",
- ["strCategorieInterventioinLibelle"]
- )
- ]
- for tablename, fieldmapping, eltname, filename, order in mapping:
- maker = builder.ElementMaker(nsmap={'xsd': "http://www.w3.org/2001/XMLSchema",
- 'xsi': "http://www.w3.org/2001/XMLSchema-instance"})
- nodes = []
- sql = "SELECT {mapping} FROM {tbl} ORDER BY {order}".format(
- mapping=",".join(["[{}].[{}] as {}".format(tablename, key, val) for key, val in fieldmapping.items()]),
- tbl=tablename,
- order=",".join(order)
- )
- logger.debug(sql)
- data = [record._asdict() for record in pda_db.read_all(sql)]
- for record in data:
- node = maker.__call__(eltname, *[maker.__call__(field, str(value)) for field, value in record.items()])
- nodes.append(node)
- root = maker.__call__("ArrayOf" + eltname, *nodes)
- if not filename[-4:] == ".xml":
- filename += ".xml"
- with open(PDA_FILES_DEST / filename, "wb") as f:
- f.write(etree.tostring(root, xml_declaration=True, encoding='utf-8', pretty_print=True))
- logger.info("> Exporte: {}".format(filename))
- logger.info("Export termine")
|