Skip to content

Commit 4ea8536

Browse files
committed
Transform errors encountered while iterating features in
processing are non-fatal. We report them to users, and treat the feature as having no geometry, but don't stop execution.
1 parent 57f2c62 commit 4ea8536

8 files changed

Lines changed: 21 additions & 20 deletions

File tree

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def execute(self, parameters, context=None, feedback=None, model=None):
113113
if feedback is None:
114114
feedback = QgsProcessingFeedback()
115115
if context is None:
116-
context = dataobjects.createContext()
116+
context = dataobjects.createContext(feedback)
117117

118118
self.model = model
119119
try:
@@ -327,7 +327,7 @@ def executeAlgorithm(alg, parameters, context=None, feedback=None, model=None):
327327
if feedback is None:
328328
feedback = QgsProcessingFeedback()
329329
if context is None:
330-
context = dataobjects.createContext()
330+
context = dataobjects.createContext(feedback)
331331

332332
#self.model = model
333333

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,17 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
193193
return
194194
i = i + 1
195195

196+
feedback = None
197+
if kwargs is not None and "feedback" in list(kwargs.keys()):
198+
feedback = kwargs["feedback"]
199+
elif iface is not None:
200+
feedback = MessageBarProgress(alg.displayName())
201+
196202
context = None
197203
if kwargs is not None and 'context' in list(kwargs.keys()):
198204
context = kwargs["context"]
199205
else:
200-
context = dataobjects.createContext()
206+
context = dataobjects.createContext(feedback)
201207

202208
ok, msg = alg.checkParameterValues(parameters, context)
203209
if not ok:
@@ -226,12 +232,6 @@ def runAlgorithm(algOrName, onFinish, *args, **kwargs):
226232
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
227233
overrideCursor = True
228234

229-
feedback = None
230-
if kwargs is not None and "feedback" in list(kwargs.keys()):
231-
feedback = kwargs["feedback"]
232-
elif iface is not None:
233-
feedback = MessageBarProgress(alg.displayName())
234-
235235
ret, results = execute(alg, parameters, context, feedback)
236236
if ret:
237237
if onFinish is not None:

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,11 @@ def checkExtentCRS(self):
164164
def accept(self):
165165
super(AlgorithmDialog, self)._saveGeometry()
166166

167-
context = dataobjects.createContext()
167+
feedback = self.createFeedback()
168+
context = dataobjects.createContext(feedback)
168169

169170
checkCRS = ProcessingConfig.getSetting(ProcessingConfig.WARN_UNMATCHING_CRS)
170171
try:
171-
feedback = self.createFeedback()
172-
173172
parameters = self.getParamValues()
174173

175174
if checkCRS and not self.alg.validateInputCrs(parameters, context):

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def execute(alg, parameters, context=None, feedback=None):
5656
if feedback is None:
5757
feedback = QgsProcessingFeedback()
5858
if context is None:
59-
context = dataobjects.createContext()
59+
context = dataobjects.createContext(feedback)
6060

6161
try:
6262
results, ok = alg.run(parameters, context, feedback)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ def accept(self):
7878
alg_parameters = []
7979
load = []
8080

81-
context = dataobjects.createContext()
8281
feedback = self.createFeedback()
82+
context = dataobjects.createContext(feedback)
8383

8484
for row in range(self.mainWidget.tblParameters.rowCount()):
8585
col = 0

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,6 @@ def executeAlgorithmAsBatchProcess(self):
253253
def executeAlgorithm(self):
254254
item = self.algorithmTree.currentItem()
255255
if isinstance(item, TreeAlgorithmItem):
256-
context = dataobjects.createContext()
257256
alg = QgsApplication.processingRegistry().algorithmById(item.alg.id())
258257
ok, message = alg.canExecute()
259258
if not ok:
@@ -287,6 +286,7 @@ def executeAlgorithm(self):
287286
self.addRecentAlgorithms(True)
288287
else:
289288
feedback = MessageBarProgress()
289+
context = dataobjects.createContext(feedback)
290290
parameters = {}
291291
ret, results = execute(alg, parameters, context, feedback)
292292
handleAlgorithmResults(alg, parameters, context, feedback)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,6 @@ def _executeAlgorithm(alg):
203203
dlg.exec_()
204204
return
205205

206-
context = dataobjects.createContext()
207206
if (alg.countVisibleParameters()) > 0:
208207
dlg = alg.createCustomParametersWidget(None)
209208
if not dlg:
@@ -220,6 +219,7 @@ def _executeAlgorithm(alg):
220219
canvas.setMapTool(prevMapTool)
221220
else:
222221
feedback = MessageBarProgress()
222+
context = dataobjects.createContext(feedback)
223223
parameters = {}
224224
ret, results = execute(alg, parameters, context, feedback)
225225
handleAlgorithmResults(alg, context, feedback)

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@
6565
TYPE_TABLE = 5
6666

6767

68-
def createContext():
68+
def createContext(feedback):
6969
"""
7070
Creates a default processing context
7171
"""
@@ -77,9 +77,11 @@ def createContext():
7777
invalid_features_method = QgsFeatureRequest.GeometryAbortOnInvalid
7878
context.setInvalidGeometryCheck(invalid_features_method)
7979

80-
def raise_transform_error(f):
81-
raise GeoAlgorithmExecutionException(QCoreApplication.translate("FeatureIterator",
82-
'Encountered a transform error when reprojecting feature with id {}.'.format(f.id())))
80+
def raise_transform_error(f, feedback=feedback):
81+
if feedback:
82+
feedback.pushInfo(QCoreApplication.translate("FeatureIterator",
83+
'Encountered a transform error when reprojecting feature with id {}.'.format(f.id())))
84+
8385
context.setTransformErrorCallback(raise_transform_error)
8486

8587
settings = QgsSettings()

0 commit comments

Comments
 (0)