Sfoglia il codice sorgente

Correction pda2suiviactivites

olivier.massot 7 anni fa
parent
commit
dec568be35
5 ha cambiato i file con 94 aggiunte e 43 eliminazioni
  1. 4 2
      core/db.py
  2. 1 0
      core/logconf.py
  3. 22 18
      core/pde.py
  4. 2 3
      core/webservice.py
  5. 65 20
      pda2suiviactivite.py

+ 4 - 2
core/db.py

@@ -36,7 +36,7 @@ class CustomDb(pypyodbc.Connection):
         """ yield rows as NamedTupleRow """
         cursor = self.execute(sql)
         row = cursor.fetchone()
-        fieldnames = [(column[0].lower() if column[0].isidentifier() else "field_{}".format(i)) for i, column in enumerate(cursor.description)]
+        fieldnames = [(column[0] if column[0].isidentifier() else "field_{}".format(i)) for i, column in enumerate(cursor.description)]
 
         rowmodel = namedtuple("Row", fieldnames)
         while row:
@@ -47,7 +47,9 @@ class CustomDb(pypyodbc.Connection):
     def read_all(self, sql, *args):
         """ return the selection as a list of dictionnaries """
         cursor = self.execute(sql)
-        rowmodel = namedtuple("Row", [column[0] for column in cursor.description])
+        fieldnames = [(column[0] if column[0].isidentifier() else "field_{}".format(i)) for i, column in enumerate(cursor.description)]
+
+        rowmodel = namedtuple("Row", fieldnames)
         data = [rowmodel(*row) for row in cursor.fetchall()]
         cursor.close()
         return data

+ 1 - 0
core/logconf.py

@@ -13,6 +13,7 @@ import yaml
 
 from core.pde import DEFAULT_LOG_DIR
 
+
 SYS_EXCEPT_HOOK = sys.excepthook
 
 def start(name="main", level=0, filename=""):

+ 22 - 18
core/pde.py

@@ -1,21 +1,40 @@
 '''
-    Connections to parc databases
+    Configuration des scripts
 '''
 from path import Path
 
 from core.db import AccessSDb
 
+MAIN = Path(__file__).parent.parent.abspath()
 
 # Web url of the WsPde web service
-WSPDE_URL = "http://localhost:2890/public/WsPDE.asmx"
+PDE_WS_URL = r"http://localhost:2890/public/WsPDE.asmx"
+#     PDE_WS_URL = r"http://webservices.bas-rhin.fr/CG67.AstreGF.WebServices/public/WsPDE.asmx"
 
+# Chemin d'acces au fichier de secu Access, et login/mdp
 MDW_PATH = r"\\h2o\local\4-transversal\BDD\mda\cg67Parc.mdw"
 UID = "olivier"
 PWD = "massot"
 
 # Dirs
-MAIN = Path(__file__).parent.parent.abspath()
 WRK = MAIN / "work"
+DEFAULT_LOG_DIR = MAIN / "log"
+
+FACTURES_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\Facture_data.mdb")
+CONTROLES_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\cg67Parc_data.mdb")
+WINCAN_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\Wincan\parc_2007\DB\PARC_2007.mdb")
+COMMUN_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\Commun_Data.mdb")
+ANALYTIQUE_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\Db_analytique.mdb")
+BO_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\dbBO.mdb")
+AGRHUM_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\BDD_ParcRH.mdb")
+PDA_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\PDA\db_PDA.mdb")
+
+PDA_FILES_DEST = Path(r"\\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA")
+
+
+### ***********  Ne pas modifier en dessous   *************** ###
+
+DEFAULT_LOG_DIR.mkdir_p()
 WRK.mkdir_p()
 
 def mk_workdir(name):
@@ -23,21 +42,6 @@ def mk_workdir(name):
     workdir.mkdir_p()
     return workdir
 
-DEFAULT_LOG_DIR = MAIN / "log"
-DEFAULT_LOG_DIR.mkdir_p()
-
-DB_DIRPATH = Path(r"\\h2o\local\4-transversal\BDD\mdb")
-# DB_DIRPATH = Path(r"C:\wrktmp\mdb")
-
-FACTURES_DB_PATH = DB_DIRPATH / "Facture_data.mdb"
-CONTROLES_DB_PATH = DB_DIRPATH / "cg67Parc_data.mdb"
-WINCAN_DB_PATH = DB_DIRPATH / r"Wincan\parc_2007\DB\PARC_2007.mdb"
-COMMUN_DB_PATH = DB_DIRPATH / "Commun_Data.mdb"
-ANALYTIQUE_DB_PATH = DB_DIRPATH / "Db_analytique.mdb"
-BO_DB_PATH = DB_DIRPATH / "dbBO.mdb"
-AGRHUM_DB_PATH = DB_DIRPATH / "BDD_ParcRH.mdb"
-PDA_DB_PATH = DB_DIRPATH / "PDA" / "db_PDA.mdb"
-
 class ParcDb(AccessSDb):
     _path = ""
     def __init__(self, **kwargs):

+ 2 - 3
core/webservice.py

@@ -7,11 +7,10 @@ import urllib.request
 
 from lxml import etree  # @UnresolvedImport
 
+from core.pde import PDE_WS_URL
 
-logger = logging.getLogger("webservice")
 
-PDE_WS_URL = r"http://webservices.bas-rhin.fr/CG67.AstreGF.WebServices/public/WsPDE.asmx"
-# PDE_WS_URL = 'http://localhost:2890/public/WsPDE.asmx'
+logger = logging.getLogger("webservice")
 
 class GfWebservice():
     """ Parser for the pde's web service """

+ 65 - 20
pda2suiviactivite.py

@@ -11,44 +11,89 @@ import logging
 
 from lxml import builder  # @UnresolvedImport
 from lxml import etree  # @UnresolvedImport
-from path import Path
+from path import Path  # @UnusedImport
 
 from core import logconf
-from core.pde import PdaDb
+from core.pde import PdaDb, PDA_FILES_DEST
 
 
 logger = logging.getLogger("pda2suiviactivite")
-logconf.start("pda2suiviactivite", logging.INFO)
+logconf.start("pda2suiviactivite", logging.DEBUG)
 
 logger.info("Initialization")
 
 # Connect to db_PDA.mdb
 pda_db = PdaDb(autocommit=True)
 
-target_dir = Path(r"\\h2o\LOCAL\4-transversal\BDD\mdb\PDA\Fichiers_PDA")
+# # POUR TESTER, décommenter les lignes suivantes
+##-----------------------------------------------
 
-# Mapping: (nom de la table, {correspondance champ : alias}, nom des noeuds, nom du fichier cible)
-mapping = [
-            ("pdaEngin", ("strEnginId", "strEnginLibelleLong"), "Attelage", "attelages.xml"),
-            ("pdaorigine", ("lngorigine", "strorigine"), "Depart", "depart.xml"),
-            ("pdaEquip", ("strEquipesId", "strEquipesLibelle"), "Equipe", "equipes.xml"),
-            ("pdalocalisation", ("lngTiersId", "strTiersMnemo"), "Localisation", "localisation.xml"),
-            ("pdaNatInterv", ("strCategorieInterventioinId", "strCategorieInterventioinLibelle"), "NatureRealisation", "naturesinterventions.xml")
-            ]
+# PDA_FILES_DEST = Path(r"L:\4-transversal\BDD\mdb_test\PDA\Fichiers_PDA")
+# PdaDb._path = Path(r""L:\4-transversal\BDD\mdb_test\PDA\db_PDA.mdb")
+
+##-----------------------------------------------
 
-for tablename, fieldmapping, eltname, filename in mapping:
+# 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 = []
 
-    fieldid, fieldnom = fieldmapping
 
-    sql = "SELECT {id} as Id, {nom} as Nom FROM {tbl} ORDER BY {nom}".format(
-                                                                            id=fieldid,
-                                                                            nom=fieldnom,
-                                                                            tbl=tablename
-                                                                            )
+    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)]
 
@@ -61,7 +106,7 @@ for tablename, fieldmapping, eltname, filename in mapping:
     if not filename[-4:] == ".xml":
         filename += ".xml"
 
-    with open(target_dir / filename, "wb") as f:
+    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))