Skip to content

Commit 8cf1617

Browse files
committedApr 26, 2017
Use context to control vector.features()
1 parent 3f137e1 commit 8cf1617

File tree

2 files changed

+16
-23
lines changed

2 files changed

+16
-23
lines changed
 

‎python/plugins/processing/tests/ToolsTest.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def testFeatures(self):
6060
context = QgsProcessingContext()
6161

6262
# disable check for geometry validity
63-
context.setFlags(0)
63+
context.setFlags(QgsProcessingContext.Flags(0))
6464

6565
# test with all features
6666
features = vector.features(test_layer, context)
@@ -75,7 +75,7 @@ def testFeatures(self):
7575
self.assertEqual(set([f.id() for f in features]), set([2, 4, 6]))
7676

7777
# selection, but not using selected features
78-
context.setFlags(0)
78+
context.setFlags(QgsProcessingContext.Flags(0))
7979
test_layer.selectByIds([2, 4, 6])
8080
features = vector.features(test_layer, context)
8181
self.assertEqual(len(features), 9)
@@ -89,7 +89,7 @@ def testFeatures(self):
8989
self.assertEqual(set([f.id() for f in features]), set([0, 1, 2, 3, 4, 5, 6, 7, 8]))
9090

9191
# test that feature request is honored
92-
context.setFlags(0)
92+
context.setFlags(QgsProcessingContext.Flags(0))
9393
features = vector.features(test_layer, context, QgsFeatureRequest().setFilterFids([1, 3, 5]))
9494
self.assertEqual(set([f.id() for f in features]), set([1, 3, 5]))
9595

@@ -112,45 +112,45 @@ def testValues(self):
112112
context = QgsProcessingContext()
113113

114114
# disable check for geometry validity
115-
context.setFlags(0)
115+
context.setFlags(QgsProcessingContext.Flags(0))
116116

117117
test_data = points()
118118
test_layer = QgsVectorLayer(test_data, 'test', 'ogr')
119119

120120
# field by index
121-
res = vector.values(test_layer, context)
121+
res = vector.values(test_layer, context, 1)
122122
self.assertEqual(res[1], [1, 2, 3, 4, 5, 6, 7, 8, 9])
123123

124124
# field by name
125-
res = vector.values(test_layer, context)
125+
res = vector.values(test_layer, context, 'id')
126126
self.assertEqual(res['id'], [1, 2, 3, 4, 5, 6, 7, 8, 9])
127127

128128
# two fields
129-
res = vector.values(test_layer, context, 2)
129+
res = vector.values(test_layer, context, 1, 2)
130130
self.assertEqual(res[1], [1, 2, 3, 4, 5, 6, 7, 8, 9])
131131
self.assertEqual(res[2], [2, 1, 0, 2, 1, 0, 0, 0, 0])
132132

133133
# two fields by name
134-
res = vector.values(test_layer, context, 'id2')
134+
res = vector.values(test_layer, context, 'id', 'id2')
135135
self.assertEqual(res['id'], [1, 2, 3, 4, 5, 6, 7, 8, 9])
136136
self.assertEqual(res['id2'], [2, 1, 0, 2, 1, 0, 0, 0, 0])
137137

138138
# two fields by name and index
139-
res = vector.values(test_layer, context, 2)
139+
res = vector.values(test_layer, context, 'id', 2)
140140
self.assertEqual(res['id'], [1, 2, 3, 4, 5, 6, 7, 8, 9])
141141
self.assertEqual(res[2], [2, 1, 0, 2, 1, 0, 0, 0, 0])
142142

143143
# test with selected features
144144
context.setFlags(QgsProcessingContext.UseSelection)
145145
test_layer.selectByIds([2, 4, 6])
146-
res = vector.values(test_layer, context)
146+
res = vector.values(test_layer, context, 1)
147147
self.assertEqual(set(res[1]), set([5, 7, 3]))
148148

149149
def testUniqueValues(self):
150150

151151
context = QgsProcessingContext()
152152
# disable check for geometry validity
153-
context.setFlags(0)
153+
context.setFlags(QgsProcessingContext.Flags(0))
154154

155155
test_data = points()
156156
test_layer = QgsVectorLayer(test_data, 'test', 'ogr')

‎python/plugins/processing/tools/vector.py

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -98,20 +98,13 @@ class Features(object):
9898

9999
DO_NOT_CHECK, IGNORE, RAISE_EXCEPTION = range(3)
100100

101-
def __init__(self, layer, request):
101+
def __init__(self, layer, context, request):
102102
self.layer = layer
103-
self.selection = False
103+
self.selection = context.flags() & QgsProcessingContext.UseSelection and layer.selectedFeatureCount() > 0
104+
request.setInvalidGeometryCheck(context.invalidGeometryCheck())
104105

105-
invalidFeaturesMethod = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
106-
if invalidFeaturesMethod == self.IGNORE:
107-
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometrySkipInvalid)
108-
elif invalidFeaturesMethod == self.RAISE_EXCEPTION:
109-
request.setInvalidGeometryCheck(QgsFeatureRequest.GeometryAbortOnInvalid)
110-
111-
if ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED)\
112-
and layer.selectedFeatureCount() > 0:
106+
if self.selection:
113107
self.iter = layer.selectedFeaturesIterator(request)
114-
self.selection = True
115108
else:
116109
self.iter = layer.getFeatures(request)
117110

@@ -131,7 +124,7 @@ def __len__(self):
131124
def tr(self, string):
132125
return QCoreApplication.translate("FeatureIterator", string)
133126

134-
return Features(layer, request)
127+
return Features(layer, context, request)
135128

136129

137130
def uniqueValues(layer, context, attribute):

0 commit comments

Comments
 (0)
Please sign in to comment.