From 4e1682721d8b7b2ee881fbfd5c71f5ee1a608159 Mon Sep 17 00:00:00 2001 From: CebullaD Date: Fri, 24 Jan 2025 15:06:41 +0100 Subject: [PATCH 1/2] Use QgsSettings() instead of QtCore.QSettings() --- datadriveninputmask.py | 2 +- ddmanager.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/datadriveninputmask.py b/datadriveninputmask.py index f8994df..c3e15ed 100644 --- a/datadriveninputmask.py +++ b/datadriveninputmask.py @@ -50,7 +50,7 @@ def __init__(self, iface): self.app.ddManager = ddManager # initialize locale localePath = "" - locale = QtCore.QSettings().value("locale/userLocale")[0:2] + locale = QgsSettings().value("locale/userLocale")[0:2] libPath = os.path.dirname(__file__) libPathFound = False diff --git a/ddmanager.py b/ddmanager.py index 0945381..90d3834 100644 --- a/ddmanager.py +++ b/ddmanager.py @@ -56,7 +56,7 @@ class DdManager(object): def __init__(self, iface): self.iface = iface self.ddLayers = dict() - settings = QtCore.QSettings() + settings = QgsSettings() settings.beginGroup("Qgis/digitizing") a = settings.value("line_color_alpha",200,type=int) b = settings.value("line_color_blue",0,type=int) @@ -77,13 +77,13 @@ def __str__(self): return "" def saveSearchPath(self, path = ""): - settings = QtCore.QSettings() + settings = QgsSettings() settings.beginGroup("DataDrivenInputMask") settings.setValue(u"lastSearchPath", path) settings.endGroup() def getSearchPath(self): - settings = QtCore.QSettings() + settings = QgsSettings() settings.beginGroup("DataDrivenInputMask") path = settings.value("lastSearchPath", "", type=str) settings.endGroup() From d5921a50fc462f9d77bd71c4413191349b8506ff Mon Sep 17 00:00:00 2001 From: CebullaD Date: Sun, 26 Jan 2025 15:45:01 +0100 Subject: [PATCH 2/2] Fix to load PostGIS Layers via PostgreSQL service name. --- ddmanager.py | 45 ++++++++++++++++++++++++++++++--------------- ddui.py | 2 +- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/ddmanager.py b/ddmanager.py index 90d3834..0b21dbd 100644 --- a/ddmanager.py +++ b/ddmanager.py @@ -845,22 +845,36 @@ def loadPostGISLayer(self, db, ddTable, displayName = None, if thisPort == -1: thisPort = 5432 - # set host name, port, database name, username and password + # set service name or host name, port as well as database name, username and password authcfg = None #ini' - if hasattr(db, "authcfg"): - authcfg = db.authcfg + serviceName = db.connectOptions().split("service=")[1] - if authcfg != None: - uri.setConnection(db.hostName(), str(thisPort), db.databaseName(), - None, None, sslmode = sslMode, authConfigId = authcfg) + if serviceName != None: + if hasattr(db, "authcfg"): + authcfg = db.authcfg - if authcfg == None: - uri.setConnection(db.hostName(), str(thisPort), db.databaseName(), - db.userName(), db.password(), sslmode = sslMode) + if authcfg != None: + uri.setConnection(serviceName, db.databaseName(), None, None, sslmode = sslMode, authConfigId = authcfg) + + if authcfg == None: + uri.setConnection(serviceName, db.databaseName(), db.userName(), db.password(), sslmode = sslMode, authConfigId = '') - # set database schema, table name, geometry column and optionaly subset (WHERE clause) + if serviceName == None: + if hasattr(db, "authcfg"): + authcfg = db.authcfg + + if authcfg != None: + uri.setConnection(db.hostName(), str(thisPort), db.databaseName(), + None, None, sslmode = sslMode, authConfigId = authcfg) + + if authcfg == None: + uri.setConnection(db.hostName(), str(thisPort), db.databaseName(), + db.userName(), db.password(), sslmode = sslMode) + + # set database schema, table name, geometry column and optionaly subset (WHERE clause) and key column uri.setDataSource(ddTable.schemaName, ddTable.tableName, geomColumn) + if whereClause: uri.setSql(whereClause) @@ -1062,17 +1076,18 @@ def __connectDb(self, qSqlDatabaseName, host, else: return db - def __connectServiceDb(self, qSqlDatabaseName, service, username, passwd): + def __connectServiceDb(self, qSqlDatabaseName, service, username, passwd, authcfg = None): '''connect to the PostgreSQL DB via pg_service''' db = QtSql.QSqlDatabase.addDatabase ("QPSQL", qSqlDatabaseName) - db.setConnectOptions("service=" + service) + db.setConnectOptions(f"service={service}") db.setUserName(username) db.setPassword(passwd) + db.authcfg = authcfg ok = db.open() if not ok: - DdError(QtWidgets.QApplication.translate("DdError", "Could not connect to PostgreSQL database: ") + - database, iface = self.iface) + DdError(QtWidgets.QApplication.translate("DdError", "Could not connect to PostgreSQL service: ") + + service, iface = self.iface) return None else: return db @@ -1133,7 +1148,7 @@ def __createDb(self, layer): sslmode = None if host == None: - db = self.__connectServiceDb(layer.id(), service, user, password) + db = self.__connectServiceDb(layer.id(), service, user, password, authcfg) else: db = self.__connectDb(layer.id(), host, dbname, int(layerSrc["port"]), user, diff --git a/ddui.py b/ddui.py index 3c3efff..54ec305 100644 --- a/ddui.py +++ b/ddui.py @@ -92,7 +92,7 @@ def ddFormInit(dialog, layerId, featureId): result = dlg.exec_() if result == 1: - layer.setModified() + aLayer.setModified() class DdEventFilter(QtCore.QObject): '''Event filter class to be applied to DdLineEdit's input widgets