Skip to content

Commit 3f137e1

Browse files
committed
Add context argument to other vector methods
1 parent adc7cf0 commit 3f137e1

13 files changed

+34
-48
lines changed

python/plugins/processing/algs/qgis/BarPlot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ def processAlgorithm(self, context, feedback):
8181

8282
output = self.getOutputValue(self.OUTPUT)
8383

84-
values = vector.values(layer, valuefieldname)
84+
values = vector.values(layer, context, valuefieldname)
8585

8686
x_var = [i[namefieldname] for i in layer.getFeatures()]
8787

python/plugins/processing/algs/qgis/BoxPlot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def processAlgorithm(self, context, feedback):
9090

9191
output = self.getOutputValue(self.OUTPUT)
9292

93-
values = vector.values(layer, valuefieldname)
93+
values = vector.values(layer, context, valuefieldname)
9494

9595
x_var = [i[namefieldname] for i in layer.getFeatures()]
9696

python/plugins/processing/algs/qgis/MeanAndStdDevPlot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def processAlgorithm(self, context, feedback):
7979

8080
output = self.getOutputValue(self.OUTPUT)
8181

82-
values = vector.values(layer, namefieldname, valuefieldname)
82+
values = vector.values(layer, context, namefieldname, valuefieldname)
8383

8484
d = {}
8585
for i in range(len(values[namefieldname])):

python/plugins/processing/algs/qgis/PolarPlot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ def processAlgorithm(self, context, feedback):
7777

7878
output = self.getOutputValue(self.OUTPUT)
7979

80-
values = vector.values(layer, valuefieldname)
80+
values = vector.values(layer, context, valuefieldname)
8181

8282
data = [go.Area(r=values[valuefieldname],
8383
t=np.degrees(np.arange(0.0, 2 * np.pi, 2 * np.pi / len(values[valuefieldname]))))]

python/plugins/processing/algs/qgis/RandomExtractWithinSubsets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def processAlgorithm(self, context, feedback):
8989

9090
features = vector.features(layer, context)
9191
featureCount = len(features)
92-
unique = vector.getUniqueValues(layer, index)
92+
unique = vector.getUniqueValues(layer, context, index)
9393
value = int(self.getParameterValue(self.NUMBER))
9494
if method == 0:
9595
if value > featureCount:

python/plugins/processing/algs/qgis/RandomSelectionWithinSubsets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ def processAlgorithm(self, context, feedback):
9090
layer.removeSelection()
9191
index = layer.fields().lookupField(field)
9292

93-
unique = vector.getUniqueValues(layer, index)
93+
unique = vector.getUniqueValues(layer, context, index)
9494
featureCount = layer.featureCount()
9595

9696
value = int(self.getParameterValue(self.NUMBER))

python/plugins/processing/algs/qgis/UniqueValues.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def processAlgorithm(self, context, feedback):
7676
layer = dataobjects.getLayerFromString(self.getParameterValue(self.INPUT_LAYER))
7777
fieldName = self.getParameterValue(self.FIELD_NAME)
7878
outputFile = self.getOutputValue(self.OUTPUT)
79-
values = vector.getUniqueValues(layer, layer.fields().lookupField(fieldName))
79+
values = vector.getUniqueValues(layer, context, layer.fields().lookupField(fieldName))
8080
self.createHTML(outputFile, values)
8181
self.setOutputValue(self.TOTAL_VALUES, len(values))
8282
self.setOutputValue(self.UNIQUE_VALUES, ';'.join([str(v) for v in

python/plugins/processing/algs/qgis/VectorLayerHistogram.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def processAlgorithm(self, context, feedback):
7878

7979
output = self.getOutputValue(self.OUTPUT)
8080

81-
values = vector.values(layer, fieldname)
81+
values = vector.values(layer, context, fieldname)
8282

8383
data = [go.Histogram(x=values[fieldname],
8484
nbinsx=bins)]

python/plugins/processing/algs/qgis/VectorLayerScatterplot.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def processAlgorithm(self, context, feedback):
8282

8383
output = self.getOutputValue(self.OUTPUT)
8484

85-
values = vector.values(layer, xfieldname, yfieldname)
85+
values = vector.values(layer, context, xfieldname, yfieldname)
8686
data = [go.Scatter(x=values[xfieldname],
8787
y=values[yfieldname],
8888
mode='markers')]

python/plugins/processing/algs/qgis/VectorLayerScatterplot3D.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ def processAlgorithm(self, context, feedback):
8989

9090
output = self.getOutputValue(self.OUTPUT)
9191

92-
values = vector.values(layer, xfieldname, yfieldname, zfieldname)
92+
values = vector.values(layer, context, xfieldname, yfieldname, zfieldname)
9393

9494
data = [go.Scatter3d(
9595
x=values[xfieldname],

python/plugins/processing/algs/qgis/VectorSplit.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ def processAlgorithm(self, context, feedback):
7474
mkdir(directory)
7575

7676
fieldIndex = layer.fields().lookupField(fieldName)
77-
uniqueValues = vector.uniqueValues(layer, fieldIndex)
77+
uniqueValues = vector.uniqueValues(layer, context, fieldIndex)
7878
baseName = os.path.join(directory, '{0}_{1}'.format(layer.name(), fieldName))
7979

8080
fields = layer.fields()

python/plugins/processing/tests/ToolsTest.py

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
QgsProcessingContext)
3535
from qgis.testing import start_app, unittest
3636

37-
from processing.core.ProcessingConfig import ProcessingConfig
3837
from processing.tests.TestData import points
3938
from processing.tools import vector
4039

@@ -55,8 +54,6 @@ def tearDownClass(cls):
5554
shutil.rmtree(path)
5655

5756
def testFeatures(self):
58-
ProcessingConfig.initialize()
59-
6057
test_data = points()
6158
test_layer = QgsVectorLayer(test_data, 'test', 'ogr')
6259

@@ -112,79 +109,69 @@ def testFeatures(self):
112109
# feats = [f for f in features]
113110

114111
def testValues(self):
115-
ProcessingConfig.initialize()
112+
context = QgsProcessingContext()
116113

117114
# disable check for geometry validity
118-
prevInvalidGeoms = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
119-
ProcessingConfig.setSettingValue(ProcessingConfig.FILTER_INVALID_GEOMETRIES, 0)
115+
context.setFlags(0)
120116

121117
test_data = points()
122118
test_layer = QgsVectorLayer(test_data, 'test', 'ogr')
123119

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

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

132128
# two fields
133-
res = vector.values(test_layer, 1, 2)
129+
res = vector.values(test_layer, context, 2)
134130
self.assertEqual(res[1], [1, 2, 3, 4, 5, 6, 7, 8, 9])
135131
self.assertEqual(res[2], [2, 1, 0, 2, 1, 0, 0, 0, 0])
136132

137133
# two fields by name
138-
res = vector.values(test_layer, 'id', 'id2')
134+
res = vector.values(test_layer, context, 'id2')
139135
self.assertEqual(res['id'], [1, 2, 3, 4, 5, 6, 7, 8, 9])
140136
self.assertEqual(res['id2'], [2, 1, 0, 2, 1, 0, 0, 0, 0])
141137

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

147143
# test with selected features
148-
previous_value = ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED)
149-
ProcessingConfig.setSettingValue(ProcessingConfig.USE_SELECTED, True)
144+
context.setFlags(QgsProcessingContext.UseSelection)
150145
test_layer.selectByIds([2, 4, 6])
151-
res = vector.values(test_layer, 1)
146+
res = vector.values(test_layer, context)
152147
self.assertEqual(set(res[1]), set([5, 7, 3]))
153148

154-
ProcessingConfig.setSettingValue(ProcessingConfig.USE_SELECTED, previous_value)
155-
ProcessingConfig.setSettingValue(ProcessingConfig.FILTER_INVALID_GEOMETRIES, prevInvalidGeoms)
156-
157149
def testUniqueValues(self):
158-
ProcessingConfig.initialize()
159150

151+
context = QgsProcessingContext()
160152
# disable check for geometry validity
161-
prevInvalidGeoms = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
162-
ProcessingConfig.setSettingValue(ProcessingConfig.FILTER_INVALID_GEOMETRIES, 0)
153+
context.setFlags(0)
163154

164155
test_data = points()
165156
test_layer = QgsVectorLayer(test_data, 'test', 'ogr')
166157

167158
# field by index
168-
v = vector.uniqueValues(test_layer, 2)
159+
v = vector.uniqueValues(test_layer, context, 2)
169160
self.assertEqual(len(v), len(set(v)))
170161
self.assertEqual(set(v), set([2, 1, 0]))
171162

172163
# field by name
173-
v = vector.uniqueValues(test_layer, 'id2')
164+
v = vector.uniqueValues(test_layer, context, 'id2')
174165
self.assertEqual(len(v), len(set(v)))
175166
self.assertEqual(set(v), set([2, 1, 0]))
176167

177168
# test with selected features
178-
previous_value = ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED)
179-
ProcessingConfig.setSettingValue(ProcessingConfig.USE_SELECTED, True)
169+
context.setFlags(QgsProcessingContext.UseSelection)
180170
test_layer.selectByIds([2, 4, 6])
181-
v = vector.uniqueValues(test_layer, 'id')
171+
v = vector.uniqueValues(test_layer, context, 'id')
182172
self.assertEqual(len(v), len(set(v)))
183173
self.assertEqual(set(v), set([5, 7, 3]))
184174

185-
ProcessingConfig.setSettingValue(ProcessingConfig.USE_SELECTED, previous_value)
186-
ProcessingConfig.setSettingValue(ProcessingConfig.FILTER_INVALID_GEOMETRIES, prevInvalidGeoms)
187-
188175
def testOgrLayerNameExtraction(self):
189176
outdir = tempfile.mkdtemp()
190177
self.cleanup_paths.append(outdir)

python/plugins/processing/tools/vector.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@
4444
from qgis.core import (QgsFields, QgsField, QgsGeometry, QgsRectangle, QgsWkbTypes,
4545
QgsSpatialIndex, QgsProject, QgsMapLayer, QgsVectorLayer,
4646
QgsVectorFileWriter, QgsDistanceArea, QgsDataSourceUri, QgsCredentials,
47-
QgsFeatureRequest, QgsSettings)
47+
QgsFeatureRequest, QgsSettings,
48+
QgsProcessingContext)
4849

4950
from processing.core.ProcessingConfig import ProcessingConfig
5051
from processing.core.ProcessingLog import ProcessingLog
@@ -133,15 +134,16 @@ def tr(self, string):
133134
return Features(layer, request)
134135

135136

136-
def uniqueValues(layer, attribute):
137+
def uniqueValues(layer, context, attribute):
137138
"""Returns a list of unique values for a given attribute.
138139
139140
Attribute can be defined using a field names or a zero-based
140141
field index. It considers the existing selection.
142+
:param context:
141143
"""
142144

143145
fieldIndex = resolveFieldIndex(layer, attribute)
144-
if ProcessingConfig.getSetting(ProcessingConfig.USE_SELECTED) \
146+
if context.flags() & QgsProcessingContext.UseSelection \
145147
and layer.selectedFeatureCount() > 0:
146148

147149
# iterate through selected features
@@ -178,7 +180,7 @@ def resolveFieldIndex(layer, attr):
178180
return index
179181

180182

181-
def values(layer, *attributes):
183+
def values(layer, context, *attributes):
182184
"""Returns the values in the attributes table of a vector layer,
183185
for the passed fields.
184186
@@ -188,6 +190,7 @@ def values(layer, *attributes):
188190
189191
It assummes fields are numeric or contain values that can be parsed
190192
to a number.
193+
:param context:
191194
"""
192195
ret = {}
193196
indices = []
@@ -341,7 +344,7 @@ def simpleMeasure(geom, method=0, ellips=None, crs=None):
341344
return (attr1, attr2)
342345

343346

344-
def getUniqueValues(layer, fieldIndex):
347+
def getUniqueValues(layer, context, fieldIndex):
345348
values = []
346349
feats = features(layer, context)
347350
for feat in feats:
@@ -350,10 +353,6 @@ def getUniqueValues(layer, fieldIndex):
350353
return values
351354

352355

353-
def getUniqueValuesCount(layer, fieldIndex):
354-
return len(getUniqueValues(layer, fieldIndex))
355-
356-
357356
def combineVectorFields(layerA, layerB):
358357
"""Create single field map from two input field maps.
359358
"""

0 commit comments

Comments
 (0)