From 80dc502848ce1e90732c7f66757c8a711b608271 Mon Sep 17 00:00:00 2001 From: Alexander Bruy Date: Sat, 22 Feb 2025 09:15:13 +0000 Subject: [PATCH] do not rely on provider-specific decodeUri() when running against QGIS versions < 3.42.1/3.40.5 See https://github.com/qgis/QGIS/pull/60703 --- g3w-admin/qdjango/utils/structure.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/g3w-admin/qdjango/utils/structure.py b/g3w-admin/qdjango/utils/structure.py index af73ee85a..63c5c3de1 100644 --- a/g3w-admin/qdjango/utils/structure.py +++ b/g3w-admin/qdjango/utils/structure.py @@ -9,7 +9,7 @@ from core.utils.projects import CoreMetaLayer from core.utils import unicode2ascii from .exceptions import QgisProjectLayerException -from qgis.core import QgsDataSourceUri, QgsProviderRegistry +from qgis.core import Qgis, QgsDataSourceUri, QgsProviderRegistry import requests @@ -89,10 +89,14 @@ def datasource2dict(datasource: str, provider: str) -> dict[str, str]: :rtype: dict """ - # first try with the provider specific method - parts = QgsProviderRegistry.instance().decodeUri(provider, datasource) - if parts: - return {k: str(v) for k, v in parts.items()} + # TODO: teprorarily safeguard with version check as QGIS < 3.42.1 and QGIS < 3.40.5 + # have small bug in PostgreSQL data provider decodeUri(). For more details + # see https://github.com/qgis/QGIS/pull/60703 + if Qgis.QGIS_VERSION_INT >= 34201 or Qgis.QGIS_VERSION_INT >= 34005: + # first try with the provider specific method + parts = QgsProviderRegistry.instance().decodeUri(provider, datasource) + if parts: + return {k: str(v) for k, v in parts.items()} # data provider does not support decodeUri(), we need to process it manually parts = {}