29
29
import re
30
30
import tempfile
31
31
import inspect
32
+ import sys
32
33
import time
33
34
import test_qgsdelimitedtextprovider_wanted as want # NOQA
34
35
57
58
geomkey = "#geometry"
58
59
fidkey = "#fid"
59
60
61
+ try :
62
+ # Qt 5
63
+ from qgis .PyQt .QtCore import QUrlQuery
64
+
65
+ class MyUrl :
66
+
67
+ def __init__ (self , url ):
68
+ self .url = url
69
+ self .query = QUrlQuery ()
70
+
71
+ @classmethod
72
+ def fromLocalFile (cls , filename ):
73
+ return cls (QUrl .fromLocalFile (filename ))
74
+
75
+ def addQueryItem (self , k , v ):
76
+ self .query .addQueryItem (k , v )
77
+
78
+ def toString (self ):
79
+ urlstr = self .url .toString ()
80
+ querystr = self .query .toString (QUrl .FullyDecoded )
81
+ if querystr != '' :
82
+ urlstr += '?'
83
+ urlstr += querystr
84
+ return urlstr
85
+ except :
86
+ MyUrl = QUrl
87
+
88
+
89
+ def normalize_query_items_order (s ):
90
+ splitted_url = s .split ('?' )
91
+ urlstr = splitted_url [0 ]
92
+ if len (splitted_url ) == 2 :
93
+ items_list = splitted_url [1 ].split ('&' )
94
+ items_map = {}
95
+ for item in items_list :
96
+ splitted_item = item .split ('=' )
97
+ items_map [splitted_item [0 ]] = splitted_item [1 ]
98
+ first_arg = True
99
+ for k in sorted (items_map .keys ()):
100
+ if first_arg :
101
+ urlstr += '?'
102
+ first_arg = False
103
+ else :
104
+ urlstr += '&'
105
+ urlstr += k + '=' + items_map [k ]
106
+ return urlstr
107
+
60
108
# Thought we could connect to messageReceived signal but doesn't seem to be available
61
109
# in python :-( Not sure why?
62
110
@@ -77,7 +125,10 @@ def __exit__(self, type, value, traceback):
77
125
78
126
def logMessage (self , msg , tag , level ):
79
127
if tag == self .tag or not self .tag :
80
- self .log .append (unicode (msg ))
128
+ if sys .version_info .major == 2 :
129
+ self .log .append (unicode (msg ))
130
+ else :
131
+ self .log .append (str (msg ))
81
132
82
133
def messages (self ):
83
134
return self .log
@@ -92,7 +143,7 @@ def setUpClass(cls):
92
143
srcpath = os .path .join (TEST_DATA_DIR , 'provider' )
93
144
cls .basetestfile = os .path .join (srcpath , 'delimited_xy.csv' )
94
145
95
- url = QUrl .fromLocalFile (cls .basetestfile )
146
+ url = MyUrl .fromLocalFile (cls .basetestfile )
96
147
url .addQueryItem ("crs" , "epsg:4326" )
97
148
url .addQueryItem ("type" , "csv" )
98
149
url .addQueryItem ("xField" , "X" )
@@ -119,7 +170,7 @@ def setUpClass(cls):
119
170
srcpath = os .path .join (TEST_DATA_DIR , 'provider' )
120
171
cls .basetestfile = os .path .join (srcpath , 'delimited_wkt.csv' )
121
172
122
- url = QUrl .fromLocalFile (cls .basetestfile )
173
+ url = MyUrl .fromLocalFile (cls .basetestfile )
123
174
url .addQueryItem ("crs" , "epsg:4326" )
124
175
url .addQueryItem ("type" , "csv" )
125
176
url .addQueryItem ("wktField" , "wkt" )
@@ -133,7 +184,7 @@ def setUpClass(cls):
133
184
134
185
cls .basetestpolyfile = os .path .join (srcpath , 'delimited_wkt_poly.csv' )
135
186
136
- url = QUrl .fromLocalFile (cls .basetestpolyfile )
187
+ url = MyUrl .fromLocalFile (cls .basetestpolyfile )
137
188
url .addQueryItem ("crs" , "epsg:4326" )
138
189
url .addQueryItem ("type" , "csv" )
139
190
url .addQueryItem ("wktField" , "wkt" )
@@ -188,7 +239,10 @@ def layerData(self, layer, request={}, offset=0):
188
239
for field in f .fields ():
189
240
fields .append (str (field .name ()))
190
241
fieldTypes .append (str (field .typeName ()))
191
- fielddata = dict ((name , unicode (f [name ])) for name in fields )
242
+ if sys .version_info .major == 2 :
243
+ fielddata = dict ((name , unicode (f [name ])) for name in fields )
244
+ else :
245
+ fielddata = dict ((name , str (f [name ])) for name in fields )
192
246
g = f .constGeometry ()
193
247
if g :
194
248
fielddata [geomkey ] = str (g .exportToWkt ())
@@ -216,7 +270,7 @@ def delimitedTextData(self, testname, filename, requests, verbose, **params):
216
270
# and return the data for the layer (fields, data)
217
271
218
272
filepath = os .path .join (unitTestDataPath ("delimitedtext" ), filename )
219
- url = QUrl .fromLocalFile (filepath )
273
+ url = MyUrl .fromLocalFile (filepath )
220
274
if not requests :
221
275
requests = [{}]
222
276
for k in params .keys ():
@@ -227,7 +281,7 @@ def delimitedTextData(self, testname, filename, requests, verbose, **params):
227
281
if verbose :
228
282
print (testname )
229
283
layer = QgsVectorLayer (urlstr , 'test' , 'delimitedtext' )
230
- uri = unicode ( layer .dataProvider ().dataSourceUri () )
284
+ uri = layer .dataProvider ().dataSourceUri ()
231
285
if verbose :
232
286
print (uri )
233
287
basename = os .path .basename (filepath )
@@ -318,20 +372,20 @@ def runTest(self, file, requests, **params):
318
372
print ("Running test:" , testname )
319
373
result = self .delimitedTextData (testname , file , requests , verbose , ** params )
320
374
if rebuildTests :
321
- printWanted (testname , result )
375
+ self . printWanted (testname , result )
322
376
assert False , "Test not run - being rebuilt"
323
377
try :
324
378
wanted = eval ('want.{0}()' .format (testname ))
325
379
except :
326
- printWanted (testname , result )
380
+ self . printWanted (testname , result )
327
381
assert False , "Test results not available for {0}" .format (testname )
328
382
329
383
data = result ['data' ]
330
384
log = result ['log' ]
331
385
failures = []
332
- if result ['uri' ] != wanted ['uri' ]:
386
+ if normalize_query_items_order ( result ['uri' ]) != normalize_query_items_order ( wanted ['uri' ]) :
333
387
msg = "Layer Uri ({0}) doesn't match expected ({1})" .format (
334
- result ['uri' ], wanted ['uri' ])
388
+ normalize_query_items_order ( result ['uri' ]), normalize_query_items_order ( wanted ['uri' ]) )
335
389
print (' ' + msg )
336
390
failures .append (msg )
337
391
if result ['fieldTypes' ] != wanted ['fieldTypes' ]:
@@ -381,7 +435,7 @@ def runTest(self, file, requests, **params):
381
435
print (' Message log correct: Passed' )
382
436
383
437
if failures :
384
- printWanted (testname , result )
438
+ self . printWanted (testname , result )
385
439
386
440
assert len (failures ) == 0 , "\n " .join (failures )
387
441
@@ -604,14 +658,14 @@ def test_029_file_watcher(self):
604
658
f .write ("id,name\n 1,rabbit\n 2,pooh\n " )
605
659
606
660
def appendfile (layer ):
607
- with file (filename , 'a' ) as f :
661
+ with open (filename , 'a' ) as f :
608
662
f .write ('3,tigger\n ' )
609
663
# print "Appended to file - sleeping"
610
664
time .sleep (1 )
611
665
QCoreApplication .instance ().processEvents ()
612
666
613
667
def rewritefile (layer ):
614
- with file (filename , 'w' ) as f :
668
+ with open (filename , 'w' ) as f :
615
669
f .write ("name,size,id\n toad,small,5\n mole,medium,6\n badger,big,7\n " )
616
670
# print "Rewritten file - sleeping"
617
671
time .sleep (1 )
0 commit comments