Skip to content

Commit 8e70aa8

Browse files
authoredMay 2, 2017
Merge pull request #4439 from arnaud-morvan/processing_run_context
[processing] Handle context in processing.run
2 parents 8d8fa94 + e232a08 commit 8e70aa8

File tree

4 files changed

+26
-17
lines changed

4 files changed

+26
-17
lines changed
 

‎python/plugins/processing/algs/qgis/ConcaveHull.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,18 @@ def processAlgorithm(self, context, feedback):
8787

8888
# Delaunay triangulation from input point layer
8989
feedback.setProgressText(self.tr('Creating Delaunay triangles...'))
90-
delone_triangles = processing.run("qgis:delaunaytriangulation", layer, None)['OUTPUT']
90+
delone_triangles = processing.run("qgis:delaunaytriangulation", layer, None, context=context)['OUTPUT']
9191
delaunay_layer = QgsProcessingUtils.mapLayerFromString(delone_triangles, context)
9292

9393
# Get max edge length from Delaunay triangles
9494
feedback.setProgressText(self.tr('Computing edges max length...'))
95-
features = delaunay_layer.getFeatures()
96-
if len(features) == 0:
95+
96+
features = QgsProcessingUtils.getFeatures(delaunay_layer, context)
97+
count = QgsProcessingUtils.featureCount(delaunay_layer, context)
98+
if count == 0:
9799
raise GeoAlgorithmExecutionException(self.tr('No Delaunay triangles created.'))
98100

99-
counter = 50. / len(features)
101+
counter = 50. / count
100102
lengths = []
101103
edges = {}
102104
for feat in features:
@@ -126,14 +128,14 @@ def processAlgorithm(self, context, feedback):
126128

127129
# Dissolve all Delaunay triangles
128130
feedback.setProgressText(self.tr('Dissolving Delaunay triangles...'))
129-
dissolved = processing.run("qgis:dissolve", delaunay_layer,
130-
True, None, None)['OUTPUT']
131+
dissolved = processing.run("qgis:dissolve", delaunay_layer.id(),
132+
True, None, None, context=context)['OUTPUT']
131133
dissolved_layer = QgsProcessingUtils.mapLayerFromString(dissolved, context)
132134

133135
# Save result
134136
feedback.setProgressText(self.tr('Saving data...'))
135137
feat = QgsFeature()
136-
dissolved_layer.getFeatures(QgsFeatureRequest().setFilterFid(0)).nextFeature(feat)
138+
QgsProcessingUtils.getFeatures(dissolved_layer, context).nextFeature(feat)
137139
writer = self.getOutputFromName(self.OUTPUT).getVectorWriter(layer.fields().toList(), QgsWkbTypes.Polygon,
138140
layer.crs(), context)
139141
geom = feat.geometry()

‎python/plugins/processing/core/GeoAlgorithm.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,9 @@ def execute(self, context=None, feedback=None, model=None):
212212
QgsMessageLog.logMessage('\n'.join(lines), self.tr('Processing'), QgsMessageLog.CRITICAL)
213213
raise GeoAlgorithmExecutionException(str(e) + self.tr('\nSee log for more details'), lines, e)
214214

215-
def _checkParameterValuesBeforeExecuting(self):
216-
context = dataobjects.createContext()
215+
def _checkParameterValuesBeforeExecuting(self, context=None):
216+
if context is None:
217+
context = dataobjects.createContext()
217218
for param in self.parameters:
218219
if isinstance(param, (ParameterRaster, ParameterVector,
219220
ParameterMultipleInput)):
@@ -380,11 +381,12 @@ def resolveDataObjects(self):
380381
break
381382
param.setValue(";".join(inputlayers))
382383

383-
def checkInputCRS(self):
384+
def checkInputCRS(self, context=None):
384385
"""It checks that all input layers use the same CRS. If so,
385386
returns True. False otherwise.
386387
"""
387-
context = dataobjects.createContext()
388+
if context is None:
389+
context = dataobjects.createContext()
388390
crsList = []
389391
for param in self.parameters:
390392
if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)):

‎python/plugins/processing/core/Processing.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,15 +198,21 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
198198
return
199199
i = i + 1
200200

201-
msg = alg._checkParameterValuesBeforeExecuting()
201+
context = None
202+
if kwargs is not None and 'context' in list(kwargs.keys()):
203+
context = kwargs["context"]
204+
else:
205+
context = dataobjects.createContext()
206+
207+
msg = alg._checkParameterValuesBeforeExecuting(context)
202208
if msg:
203209
# fix_print_with_import
204210
print('Unable to execute algorithm\n' + str(msg))
205211
QgsMessageLog.logMessage(Processing.tr('Unable to execute algorithm\n{0}').format(msg),
206212
Processing.tr("Processing"))
207213
return
208214

209-
if not alg.checkInputCRS():
215+
if not alg.checkInputCRS(context):
210216
print('Warning: Not all input layers use the same CRS.\n' +
211217
'This can cause unexpected results.')
212218
QgsMessageLog.logMessage(
@@ -230,7 +236,6 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
230236
feedback = kwargs["feedback"]
231237
elif iface is not None:
232238
feedback = MessageBarProgress(alg.displayName())
233-
context = dataobjects.createContext()
234239

235240
ret = execute(alg, context, feedback)
236241
if ret:

‎python/plugins/processing/gui/AlgorithmDialog.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,8 @@ def checkExtentCRS(self):
146146
def accept(self):
147147
self.settings.setValue("/Processing/dialogBase", self.saveGeometry())
148148

149+
context = dataobjects.createContext()
150+
149151
checkCRS = ProcessingConfig.getSetting(ProcessingConfig.WARN_UNMATCHING_CRS)
150152
try:
151153
self.setParamValues()
@@ -169,7 +171,7 @@ def accept(self):
169171
QMessageBox.No)
170172
if reply == QMessageBox.No:
171173
return
172-
msg = self.alg._checkParameterValuesBeforeExecuting()
174+
msg = self.alg._checkParameterValuesBeforeExecuting(context)
173175
if msg:
174176
QMessageBox.warning(
175177
self, self.tr('Unable to execute algorithm'), msg)
@@ -199,8 +201,6 @@ def accept(self):
199201
self.setInfo(
200202
self.tr('<b>Algorithm {0} starting...</b>').format(self.alg.displayName()))
201203

202-
context = dataobjects.createContext()
203-
204204
if self.iterateParam:
205205
if executeIterating(self.alg, self.iterateParam, context, self.feedback):
206206
self.finish(context)

0 commit comments

Comments
 (0)
Please sign in to comment.