浏览代码

Ajoute la couche d'accès à la base postgres

olivier.massot 7 年之前
父节点
当前提交
0da267c09a
共有 2 个文件被更改,包括 123 次插入9 次删除
  1. 10 7
      core/db.py
  2. 113 2
      core/pde.py

+ 10 - 7
core/db.py

@@ -108,6 +108,15 @@ class SqlServerDb(CustomDb):
     def __init__(self, server, dbname, user, pwd, **kwargs):
         super(SqlServerDb, self).__init__(server=server, database=dbname, uid=user, pwd=pwd, **kwargs)
 
+class PostgresDb(CustomDb):
+    dsn = "DRIVER={PostgreSQL Unicode};"
+    server = ""
+    db = ""
+    user = ""
+    pwd = ""
+    def __init__(self, server, dbname, user, pwd, **kwargs):
+        super(PostgresDb, self).__init__(server=server, database=dbname, uid=user, pwd=pwd, **kwargs)
+
 # class SqliteDb(CustomDb):
 #     drivername = "QODBC"
 #     dsn = "DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};FIL={{MS Access}}"
@@ -116,13 +125,7 @@ class SqlServerDb(CustomDb):
 #     def __init__(self, dbpath, **kwargs):
 #         CustomDb.__init__(self, dbq=dbpath, **kwargs)
 #
-# class PostgresDb(CustomDb):
-#     drivername = "QODBC"
-#     dsn = "DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};FIL={{MS Access}}"
-#     default_user = "admin"
-#     pwd = ""
-#     def __init__(self, dbpath, **kwargs):
-#         CustomDb.__init__(self, dbq=dbpath, **kwargs)
+
 
 
 ### SQL Helpers ###

+ 113 - 2
core/pde.py

@@ -6,7 +6,7 @@ from datetime import datetime
 
 from path import Path
 
-from core.db import AccessSDb
+from core.db import AccessSDb, PostgresDb
 from core.model import Model
 
 
@@ -21,6 +21,13 @@ MDW_PATH = r"\\h2o\local\4-transversal\BDD\mda\cg67Parc.mdw"
 UID = "olivier"
 PWD = "massot"
 
+# Connexion à la base postgres ControlesSig
+CSIG_SERVER = "TR-POSTGIS-02"
+CSIG_DB = "ControlesSIG"
+CSIG_PORT = "5432"
+CSIG_USER = "ControlesSIG_userrw"
+CSIG_PWD = "Am5VOMkdFHU7WwrfVOs9"
+
 # Dirs
 WRKDIR = MAIN / "work"
 RSCDIR = MAIN / "resources"
@@ -40,6 +47,11 @@ 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")
 PIRACA_DB_PATH = Path(r"\\h2o\local\4-transversal\BDD\mdb\db_Piraca.mdb")
 
+# Config de _qgis_sync
+COMPACTAGE_DIR = Path(r"\\h2o\local\1-PARC\activités\assainissement\Controle Réseaux\compactage\gps compactage")
+ITV_DIR = Path(r"\\h2o\local\1-PARC\activités\assainissement\Controle Réseaux\inspection\Projets ITV\GPS")
+
+
 
 ### ***********  Ne pas modifier en dessous   *************** ###
 
@@ -86,9 +98,17 @@ class PdaDb(ParcDb):
 class PiracaDb(ParcDb):
     _path = PIRACA_DB_PATH
 
+class CSigDb(PostgresDb):
+    server = CSIG_SERVER
+    db = CSIG_DB
+    port = CSIG_PORT
+    user = CSIG_USER
+    pwd = CSIG_PWD
 
+    def __init__(self, **kwargs):
+        super(CSigDb, self).__init__(server=self.server, dbname=self.db, user=self.user, pwd=self.pwd, **kwargs)
 
-# ## Modèles
+# ## Modeles
 
 class Affaire(Model):
     """ Modèle de données d'une affaire Analytique """
@@ -335,6 +355,97 @@ class InspectionTronconWincan(Model):
         self.DG = "", str
 
 
+#### Objets utilisés par la synchro QGis
+
+
+class QGisChantier(object):
+    """represent a chantier (Video+Etancheite or Compactage)"""
+    def __init__(self):
+        self.pgid = None
+        self.dir_path = ""
+        self.number = 0  # ex: 123000
+        self.complement = ""  # ex: -S1
+        self.name = ""  # ex: 123000-S1 COMMUNE
+        self.x0 = 0
+        self.y0 = 0
+        self.x1 = 0
+        self.y1 = 0
+        self.error_msg = ""
+        self.items = []
+
+    def __repr__(self):
+        return "[Chantier: {}]".format(self.name if self.name else self.number)
+
+class QGisPoint(object):
+    """represent a point
+    could be a Point de Compactage or a Regard"""
+    def __init__(self):
+        self.number = 0
+        self.name = ""
+        self.x = 0
+        self.y = 0
+
+    def __repr__(self):
+        return "[Point: {}, {}, ({}, {})]".format(self.number, self.name, self.x, self.y)
+
+class QGisRegard(QGisPoint):
+    """represent a Regard"""
+    def __init__(self):
+        QGisPoint.__init__(self)
+        self.pgid = 0
+        self.res_ce = None
+
+    def sql_res_ce(self):
+        """return a sql formatted result for Etancheite """
+        return "'{}'".format(self.res_ce) if self.res_ce != None else "NULL"
+
+    def __eq__(self, other):
+        return self.name == other.name
+
+    def __hash__(self):
+        # used for comparison (in 'set' among others)
+        return hash((self.number, self.x, self.y))
+
+    def __repr__(self):
+        return "[Regard: {}, {}, {}, {}, ({}, {})]".format(self.pgid,
+                                                           self.number,
+                                                           self.name,
+                                                           self.res_ce,
+                                                           self.x,
+                                                           self.y)
+
+class QGisTroncon(object):
+    """ represent a troncon """
+    def __init__(self):
+        self.name = ""
+        self.r1 = None
+        self.r2 = None
+        self.res_itv = None
+        self.res_ce = None
+        self.s_autonumber = 0
+        self.si_autonumber = 0
+
+    def __repr__(self):
+        return "[Troncon > name='{}', r1={}, r2={}, res_ce='{}', \
+        res_itv='{}', s_autonumber={}, si_autonumber{}]".format(self.name,
+                                                                self.r1,
+                                                                self.r2,
+                                                                self.res_ce,
+                                                                self.res_itv,
+                                                                self.s_autonumber,
+                                                                self.si_autonumber)
+
+    def sql_res_ce(self):
+        """return a sql formatted result for Etancheite """
+        return "'{}'".format(self.res_ce) if self.res_ce != None else "NULL"
+
+    def sql_res_itv(self):
+        """return a sql formatted result for Video """
+        return "'{}'".format(self.res_itv) if self.res_itv != None else "NULL"
+
+
+
+
 if __name__ == "__main__":
     for cls in (FacturesDb, ControlesDb, WincanDb, CommunDb, AnalytiqueDb, BoDb, AgrhumDb):
         db = cls()