25
25
26
26
from qgis .core import (
27
27
QgsApplication ,
28
+ QgsDataSourceUri ,
28
29
QgsVectorLayer ,
29
30
QgsProject ,
30
31
)
31
- from PyQt5 .QtCore import QDateTime
32
+ from PyQt5 .QtCore import QDateTime , QUrl , QUrlQuery
32
33
from qgis .testing import start_app , unittest
33
34
from utilities import unitTestDataPath
34
35
35
36
QGISAPP = start_app ()
36
37
TEST_DATA_DIR = unitTestDataPath ()
37
38
38
39
40
+ def encode_uri (ds_uri , schema_name , project_name = None ):
41
+ u = QUrl ()
42
+ urlQuery = QUrlQuery ()
43
+
44
+ u .setScheme ("postgresql" )
45
+ u .setHost (ds_uri .host ())
46
+ if ds_uri .port () != '' :
47
+ u .setPort (int (ds_uri .port ()))
48
+ if ds_uri .username () != '' :
49
+ u .setUserName (ds_uri .username ())
50
+ if ds_uri .password () != '' :
51
+ u .setPassword (ds_uri .password ())
52
+
53
+ if ds_uri .service () != '' :
54
+ urlQuery .addQueryItem ("service" , ds_uri .service ())
55
+ if ds_uri .authConfigId () != '' :
56
+ urlQuery .addQueryItem ("authcfg" , ds_uri .authConfigId ())
57
+ if ds_uri .sslMode () != QgsDataSourceUri .SslPrefer :
58
+ urlQuery .addQueryItem ("sslmode" , QgsDataSourceUri .encodeSslMode (ds_uri .sslMode ()))
59
+
60
+ urlQuery .addQueryItem ("dbname" , ds_uri .database ())
61
+
62
+ urlQuery .addQueryItem ("schema" , schema_name )
63
+ if project_name :
64
+ urlQuery .addQueryItem ("project" , project_name )
65
+
66
+ u .setQuery (urlQuery )
67
+ return str (u .toEncoded (), 'utf-8' )
68
+
69
+
39
70
class TestPyQgsProjectStoragePostgres (unittest .TestCase ):
40
71
41
72
@classmethod
@@ -44,6 +75,8 @@ def setUpClass(cls):
44
75
cls .dbconn = 'dbname=\' qgis_test\' '
45
76
if 'QGIS_PGTEST_DB' in os .environ :
46
77
cls .dbconn = os .environ ['QGIS_PGTEST_DB' ]
78
+ cls .ds_uri = QgsDataSourceUri (cls .dbconn )
79
+
47
80
# Create test layers
48
81
cls .vl = QgsVectorLayer (cls .dbconn + ' sslmode=disable key=\' pk\' srid=4326 type=POINT table="qgis_test"."someData" (geom) sql=' , 'test' , 'postgres' )
49
82
assert cls .vl .isValid ()
@@ -66,9 +99,8 @@ def dropProjectsTable(self):
66
99
67
100
def testSaveLoadProject (self ):
68
101
69
- # TODO: respect QGIS_PGTEST_DB
70
- schema_uri = "postgresql:///?dbname=qgis_test&schema=qgis_test"
71
- project_uri = "postgresql:///?dbname=qgis_test&schema=qgis_test&project=abc"
102
+ schema_uri = encode_uri (self .ds_uri , 'qgis_test' )
103
+ project_uri = encode_uri (self .ds_uri , 'qgis_test' , 'abc' )
72
104
73
105
self .dropProjectsTable () # make sure we have a clean start
74
106
0 commit comments