1
1
# -*- coding: utf-8 -*-
2
- """QGIS test python layer provider.
2
+ """QGIS python layer provider test.
3
+
4
+ This module is a Python implementation of (a clone of) the core memory
5
+ vector layer provider, to be used for test_provider_python.py
3
6
4
7
.. note:: This program is free software; you can redistribute it and/or modify
5
8
it under the terms of the GNU General Public License as published by
@@ -166,8 +169,6 @@ def __init__(self, provider):
166
169
self ._subset_expression = None
167
170
168
171
def getFeatures (self , request ):
169
- # QgsFeatureIterator getFeatures( const QgsFeatureRequest &request ) override;
170
- # NOTE: this is the same as PyProvider.getFeatures
171
172
return QgsFeatureIterator (PyFeatureIterator (self , request ))
172
173
173
174
@@ -178,18 +179,15 @@ class PyProvider(QgsVectorDataProvider):
178
179
@classmethod
179
180
def providerKey (cls ):
180
181
"""Returns the memory provider key"""
181
- #static QString providerKey();
182
182
return 'pythonprovider'
183
183
184
184
@classmethod
185
185
def description (cls ):
186
186
"""Returns the memory provider description"""
187
- #static QString providerDescription();
188
187
return 'Python Test Provider'
189
188
190
189
@classmethod
191
190
def createProvider (cls , uri ):
192
- #static QgsMemoryProvider *createProvider( const QString &uri );
193
191
return PyProvider (uri )
194
192
195
193
# Implementation of functions from QgsVectorDataProvider
@@ -272,9 +270,10 @@ def addFeatures(self, flist, flags=None):
272
270
self ._spatialindex .insertFeature (_f )
273
271
274
272
if len (f_added ):
273
+ self .clearMinMaxCache ()
275
274
self .updateExtents ()
276
275
277
- return added , flist
276
+ return added , f_added
278
277
279
278
def deleteFeatures (self , ids ):
280
279
if not ids :
@@ -287,6 +286,7 @@ def deleteFeatures(self, ids):
287
286
del self ._features [id ]
288
287
removed = True
289
288
if removed :
289
+ self .clearMinMaxCache ()
290
290
self .updateExtents ()
291
291
return removed
292
292
@@ -300,6 +300,7 @@ def addAttributes(self, attrs):
300
300
old_attrs = f .attributes ()
301
301
old_attrs .append (None )
302
302
f .setAttributes (old_attrs )
303
+ self .clearMinMaxCache ()
303
304
return True
304
305
except Exception :
305
306
return False
@@ -308,26 +309,27 @@ def renameAttributes(self, renamedAttributes):
308
309
result = True
309
310
for key , new_name in renamedAttributes :
310
311
fieldIndex = key
311
- if fieldIndex < 0 or fieldIndex >= lself ._fields .count ():
312
- result = false
312
+ if fieldIndex < 0 or fieldIndex >= self ._fields .count ():
313
+ result = False
313
314
continue
314
315
if new_name in self ._fields .indexFromName (new_name ) >= 0 :
315
316
#field name already in use
316
317
result = False
317
318
continue
318
319
self ._fields [fieldIndex ].setName (new_name )
319
- return True
320
+ return result
320
321
321
322
def deleteAttributes (self , attributes ):
322
- attrIdx = sorted (attributes . toList () , reverse = True )
323
+ attrIdx = sorted (attributes , reverse = True )
323
324
324
325
# delete attributes one-by-one with decreasing index
325
326
for idx in attrIdx :
326
327
self ._fields .remove (idx )
327
- for f in self ._features :
328
+ for f in self ._features . values () :
328
329
attr = f .attributes ()
329
- attr . remove ( idx )
330
+ del ( attr [ idx ] )
330
331
f .setAttributes (attr )
332
+ self .clearMinMaxCache ()
331
333
return True
332
334
333
335
def changeAttributeValues (self , attr_map ):
@@ -338,6 +340,7 @@ def changeAttributeValues(self, attr_map):
338
340
continue
339
341
for k , v in attrs .items ():
340
342
f .setAttribute (k , v )
343
+ self .clearMinMaxCache ()
341
344
return True
342
345
343
346
def changeGeometryValues (self , geometry_map ):
@@ -373,7 +376,7 @@ def createSpatialIndex(self):
373
376
return True
374
377
375
378
def capabilities (self ):
376
- return QgsVectorDataProvider .AddFeatures | QgsVectorDataProvider .DeleteFeatures | QgsVectorDataProvider .ChangeGeometries | QgsVectorDataProvider .ChangeAttributeValues | QgsVectorDataProvider .AddAttributes | QgsVectorDataProvider .DeleteAttributes | QgsVectorDataProvider .RenameAttributes | QgsVectorDataProvider .SelectAtId | QgsVectorDataProvider . CircularGeometries
379
+ return QgsVectorDataProvider .AddFeatures | QgsVectorDataProvider .DeleteFeatures | QgsVectorDataProvider .CreateSpatialIndex | QgsVectorDataProvider . ChangeGeometries | QgsVectorDataProvider .ChangeAttributeValues | QgsVectorDataProvider .AddAttributes | QgsVectorDataProvider .DeleteAttributes | QgsVectorDataProvider .RenameAttributes | QgsVectorDataProvider .SelectAtId | QgsVectorDataProvider . CircularGeometries
377
380
378
381
#/* Implementation of functions from QgsDataProvider */
379
382
0 commit comments