Skip to content

Commit 751b2c4

Browse files
committedNov 23, 2018
Fix context going out of scope
(cherry picked from commit 4435a3a)
1 parent 84dc8fa commit 751b2c4

File tree

1 file changed

+29
-23
lines changed

1 file changed

+29
-23
lines changed
 

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

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,9 @@ def __init__(self, alg, in_place=False, parent=None):
7373
self.in_place = in_place
7474
self.active_layer = None
7575

76+
self.context = None
77+
self.feedback = None
78+
7679
self.setAlgorithm(alg)
7780
self.setMainWidget(self.getParametersPanel(alg, self))
7881

@@ -160,14 +163,14 @@ def getParameterValues(self):
160163
return self.algorithm().preprocessParameters(parameters)
161164

162165
def runAlgorithm(self):
163-
feedback = self.createFeedback()
164-
context = dataobjects.createContext(feedback)
166+
self.feedback = self.createFeedback()
167+
self.context = dataobjects.createContext(self.feedback)
165168

166169
checkCRS = ProcessingConfig.getSetting(ProcessingConfig.WARN_UNMATCHING_CRS)
167170
try:
168171
parameters = self.getParameterValues()
169172

170-
if checkCRS and not self.algorithm().validateInputCrs(parameters, context):
173+
if checkCRS and not self.algorithm().validateInputCrs(parameters, self.context):
171174
reply = QMessageBox.question(self, self.tr("Unmatching CRS's"),
172175
self.tr('Parameters do not all use the same CRS. This can '
173176
'cause unexpected results.\nDo you want to '
@@ -176,7 +179,7 @@ def runAlgorithm(self):
176179
QMessageBox.No)
177180
if reply == QMessageBox.No:
178181
return
179-
ok, msg = self.algorithm().checkParameterValues(parameters, context)
182+
ok, msg = self.algorithm().checkParameterValues(parameters, self.context)
180183
if not ok:
181184
QMessageBox.warning(
182185
self, self.tr('Unable to execute algorithm'), msg)
@@ -198,12 +201,12 @@ def runAlgorithm(self):
198201
self.setInfo(
199202
QCoreApplication.translate('AlgorithmDialog', '<b>Algorithm \'{0}\' starting&hellip;</b>').format(self.algorithm().displayName()), escapeHtml=False)
200203

201-
feedback.pushInfo(self.tr('Input parameters:'))
204+
self.feedback.pushInfo(self.tr('Input parameters:'))
202205
display_params = []
203206
for k, v in parameters.items():
204-
display_params.append("'" + k + "' : " + self.algorithm().parameterDefinition(k).valueAsPythonString(v, context))
205-
feedback.pushCommandInfo('{ ' + ', '.join(display_params) + ' }')
206-
feedback.pushInfo('')
207+
display_params.append("'" + k + "' : " + self.algorithm().parameterDefinition(k).valueAsPythonString(v, self.context))
208+
self.feedback.pushCommandInfo('{ ' + ', '.join(display_params) + ' }')
209+
self.feedback.pushInfo('')
207210
start_time = time.time()
208211

209212
if self.iterateParam:
@@ -215,30 +218,30 @@ def runAlgorithm(self):
215218
pass
216219

217220
self.cancelButton().setEnabled(self.algorithm().flags() & QgsProcessingAlgorithm.FlagCanCancel)
218-
if executeIterating(self.algorithm(), parameters, self.iterateParam, context, feedback):
219-
feedback.pushInfo(
221+
if executeIterating(self.algorithm(), parameters, self.iterateParam, self.context, self.feedback):
222+
self.feedback.pushInfo(
220223
self.tr('Execution completed in {0:0.2f} seconds').format(time.time() - start_time))
221224
self.cancelButton().setEnabled(False)
222-
self.finish(True, parameters, context, feedback)
225+
self.finish(True, parameters, self.context, self.feedback)
223226
else:
224227
self.cancelButton().setEnabled(False)
225228
self.resetGui()
226229
else:
227-
command = self.algorithm().asPythonCommand(parameters, context)
230+
command = self.algorithm().asPythonCommand(parameters, self.context)
228231
if command:
229232
ProcessingLog.addToLog(command)
230233
QgsGui.instance().processingRecentAlgorithmLog().push(self.algorithm().id())
231234
self.cancelButton().setEnabled(self.algorithm().flags() & QgsProcessingAlgorithm.FlagCanCancel)
232235

233236
def on_complete(ok, results):
234237
if ok:
235-
feedback.pushInfo(self.tr('Execution completed in {0:0.2f} seconds').format(time.time() - start_time))
236-
feedback.pushInfo(self.tr('Results:'))
237-
feedback.pushCommandInfo(pformat(results))
238+
self.feedback.pushInfo(self.tr('Execution completed in {0:0.2f} seconds').format(time.time() - start_time))
239+
self.feedback.pushInfo(self.tr('Results:'))
240+
self.feedback.pushCommandInfo(pformat(results))
238241
else:
239-
feedback.reportError(
242+
self.feedback.reportError(
240243
self.tr('Execution failed after {0:0.2f} seconds').format(time.time() - start_time))
241-
feedback.pushInfo('')
244+
self.feedback.pushInfo('')
242245

243246
if self.feedback_dialog is not None:
244247
self.feedback_dialog.close()
@@ -248,28 +251,31 @@ def on_complete(ok, results):
248251
self.cancelButton().setEnabled(False)
249252

250253
if not self.in_place:
251-
self.finish(ok, results, context, feedback)
254+
self.finish(ok, results, self.context, self.feedback)
252255
elif ok:
253256
self.close()
254257

258+
self.feedback = None
259+
self.context = None
260+
255261
if not self.in_place and not (self.algorithm().flags() & QgsProcessingAlgorithm.FlagNoThreading):
256262
# Make sure the Log tab is visible before executing the algorithm
257263
self.showLog()
258264

259-
task = QgsProcessingAlgRunnerTask(self.algorithm(), parameters, context, feedback)
265+
task = QgsProcessingAlgRunnerTask(self.algorithm(), parameters, self.context, self.feedback)
260266
task.executed.connect(on_complete)
261267
self.setCurrentTask(task)
262268
else:
263269
self.proxy_progress = QgsProxyProgressTask(QCoreApplication.translate("AlgorithmDialog", "Executing “{}”").format(self.algorithm().displayName()))
264270
QgsApplication.taskManager().addTask(self.proxy_progress)
265-
feedback.progressChanged.connect(self.proxy_progress.setProxyProgress)
271+
self.feedback.progressChanged.connect(self.proxy_progress.setProxyProgress)
266272
self.feedback_dialog = self.createProgressDialog()
267273
self.feedback_dialog.show()
268274
if self.in_place:
269-
ok, results = execute_in_place(self.algorithm(), parameters, context, feedback)
275+
ok, results = execute_in_place(self.algorithm(), parameters, self.context, self.feedback)
270276
else:
271-
ok, results = execute(self.algorithm(), parameters, context, feedback)
272-
feedback.progressChanged.disconnect()
277+
ok, results = execute(self.algorithm(), parameters, self.context, self.feedback)
278+
self.feedback.progressChanged.disconnect()
273279
self.proxy_progress.finalize(ok)
274280
on_complete(ok, results)
275281

0 commit comments

Comments
 (0)
Please sign in to comment.