Skip to content

Commit 185172a

Browse files
committedApr 30, 2019
Refactor creation of batch dialog row algorithm parameters
1 parent e6e3917 commit 185172a

File tree

2 files changed

+69
-55
lines changed

2 files changed

+69
-55
lines changed
 

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

Lines changed: 1 addition & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -79,42 +79,7 @@ def runAlgorithm(self):
7979
project = QgsProject.instance() if load_layers else None
8080

8181
for row in range(self.mainWidget().batchRowCount()):
82-
col = 0
83-
parameters = {}
84-
for param in self.algorithm().parameterDefinitions():
85-
if param.flags() & QgsProcessingParameterDefinition.FlagHidden or param.isDestination():
86-
continue
87-
wrapper = self.mainWidget().wrappers[row][col]
88-
parameters[param.name()] = wrapper.parameterValue()
89-
if not param.checkValueIsAcceptable(wrapper.parameterValue()):
90-
self.messageBar().pushMessage("", self.tr('Wrong or missing parameter value: {0} (row {1})').format(
91-
param.description(), row + 1),
92-
level=Qgis.Warning, duration=5)
93-
return
94-
col += 1
95-
count_visible_outputs = 0
96-
for out in self.algorithm().destinationParameterDefinitions():
97-
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
98-
continue
99-
100-
count_visible_outputs += 1
101-
widget = self.mainWidget().tblParameters.cellWidget(row + 1, col)
102-
text = widget.getValue()
103-
if out.checkValueIsAcceptable(text):
104-
if isinstance(out, (QgsProcessingParameterRasterDestination,
105-
QgsProcessingParameterVectorDestination,
106-
QgsProcessingParameterFeatureSink)):
107-
# load rasters and sinks on completion
108-
parameters[out.name()] = QgsProcessingOutputLayerDefinition(text, project)
109-
else:
110-
parameters[out.name()] = text
111-
col += 1
112-
else:
113-
self.messageBar().pushMessage("", self.tr('Wrong or missing output value: {0} (row {1})').format(
114-
out.description(), row + 1),
115-
level=Qgis.Warning, duration=5)
116-
return
117-
82+
parameters = self.mainWidget().parametersForRow(row, destinationProject=project, warnOnInvalid=True)
11883
alg_parameters.append(parameters)
11984

12085
task = QgsScopedProxyProgressTask(self.tr('Batch Processing - {0}').format(self.algorithm().displayName()))

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

Lines changed: 68 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,24 +46,32 @@
4646
QFileInfo,
4747
QCoreApplication
4848
)
49-
from qgis.core import (Qgis,
50-
QgsApplication,
51-
QgsSettings,
52-
QgsProperty, # NOQA - must be here for saved file evaluation
53-
QgsProject,
54-
QgsProcessingFeatureSourceDefinition, # NOQA - must be here for saved file evaluation
55-
QgsCoordinateReferenceSystem, # NOQA - must be here for saved file evaluation
56-
QgsProcessingParameterDefinition,
57-
QgsProcessingModelAlgorithm,
58-
QgsProcessingParameterFile,
59-
QgsProcessingParameterMapLayer,
60-
QgsProcessingParameterRasterLayer,
61-
QgsProcessingParameterMeshLayer,
62-
QgsProcessingParameterVectorLayer,
63-
QgsProcessingParameterFeatureSource)
64-
from qgis.gui import (QgsProcessingParameterWidgetContext,
65-
QgsProcessingContextGenerator,
66-
QgsFindFilesByPatternDialog)
49+
from qgis.core import (
50+
Qgis,
51+
QgsApplication,
52+
QgsSettings,
53+
QgsProperty, # NOQA - must be here for saved file evaluation
54+
QgsProject,
55+
QgsProcessingFeatureSourceDefinition, # NOQA - must be here for saved file evaluation
56+
QgsCoordinateReferenceSystem, # NOQA - must be here for saved file evaluation
57+
QgsProcessingParameterDefinition,
58+
QgsProcessingModelAlgorithm,
59+
QgsProcessingParameterFile,
60+
QgsProcessingParameterMapLayer,
61+
QgsProcessingParameterRasterLayer,
62+
QgsProcessingParameterMeshLayer,
63+
QgsProcessingParameterVectorLayer,
64+
QgsProcessingParameterFeatureSource,
65+
QgsProcessingParameterRasterDestination,
66+
QgsProcessingParameterVectorDestination,
67+
QgsProcessingParameterFeatureSink,
68+
QgsProcessingOutputLayerDefinition
69+
)
70+
from qgis.gui import (
71+
QgsProcessingParameterWidgetContext,
72+
QgsProcessingContextGenerator,
73+
QgsFindFilesByPatternDialog
74+
)
6775
from qgis.utils import iface
6876

6977
from processing.gui.wrappers import WidgetWrapperFactory, WidgetWrapper
@@ -171,7 +179,6 @@ def addFilesByPattern(self):
171179

172180

173181
class BatchPanel(BASE, WIDGET):
174-
175182
PARAMETERS = "PARAMETERS"
176183
OUTPUTS = "OUTPUTS"
177184

@@ -457,3 +464,45 @@ def toggleAdvancedMode(self, checked):
457464
for column, param in enumerate(self.alg.parameterDefinitions()):
458465
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
459466
self.tblParameters.setColumnHidden(column, not checked)
467+
468+
def parametersForRow(self, row, destinationProject=None, warnOnInvalid=True):
469+
"""
470+
Returns the parameters dictionary corresponding to a row in the batch table
471+
"""
472+
col = 0
473+
parameters = {}
474+
for param in self.alg.parameterDefinitions():
475+
if param.flags() & QgsProcessingParameterDefinition.FlagHidden or param.isDestination():
476+
continue
477+
wrapper = self.wrappers[row][col]
478+
parameters[param.name()] = wrapper.parameterValue()
479+
if warnOnInvalid and not param.checkValueIsAcceptable(wrapper.parameterValue()):
480+
self.parent.messageBar().pushMessage("",
481+
self.tr('Wrong or missing parameter value: {0} (row {1})').format(
482+
param.description(), row + 1),
483+
level=Qgis.Warning, duration=5)
484+
return {}
485+
col += 1
486+
count_visible_outputs = 0
487+
for out in self.alg.destinationParameterDefinitions():
488+
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
489+
continue
490+
491+
count_visible_outputs += 1
492+
widget = self.tblParameters.cellWidget(row + 1, col)
493+
text = widget.getValue()
494+
if not warnOnInvalid or out.checkValueIsAcceptable(text):
495+
if isinstance(out, (QgsProcessingParameterRasterDestination,
496+
QgsProcessingParameterVectorDestination,
497+
QgsProcessingParameterFeatureSink)):
498+
# load rasters and sinks on completion
499+
parameters[out.name()] = QgsProcessingOutputLayerDefinition(text, destinationProject)
500+
else:
501+
parameters[out.name()] = text
502+
col += 1
503+
else:
504+
self.parent.messageBar().pushMessage("", self.tr('Wrong or missing output value: {0} (row {1})').format(
505+
out.description(), row + 1),
506+
level=Qgis.Warning, duration=5)
507+
return {}
508+
return parameters

0 commit comments

Comments
 (0)
Please sign in to comment.