Skip to content

Commit 72118f9

Browse files
committed
[processing] When an algorithm has string parameters, also
accept numeric, file and table field inputs in modeler This allows a non-string parameter to be reused as a string parameter in contexts where it makes sense.
1 parent 1ef7ed5 commit 72118f9

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

python/plugins/processing/gui/wrappers.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -643,7 +643,9 @@ def createWidget(self):
643643
if self.param.default:
644644
widget.setText(self.param.default)
645645
else:
646-
strings = self.dialog.getAvailableValuesOfType(ParameterString, OutputString)
646+
# strings, numbers, files and table fields are all allowed input types
647+
strings = self.dialog.getAvailableValuesOfType([ParameterString, ParameterNumber, ParameterFile,
648+
ParameterTableField], OutputString)
647649
options = [(self.dialog.resolveValueDescription(s), s) for s in strings]
648650
if self.param.multiline:
649651
widget = MultilineTextPanel(options)

python/plugins/processing/modeler/ModelerParametersDialog.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,16 +261,22 @@ def showAdvancedParametersClicked(self):
261261
self.widgets[param.name].setVisible(self.showAdvanced)
262262

263263
def getAvailableValuesOfType(self, paramType, outType=None, dataType=None):
264+
# upgrade paramType to list
265+
if type(paramType) is not list:
266+
paramType = [paramType]
267+
264268
values = []
265269
inputs = self.model.inputs
266270
for i in list(inputs.values()):
267271
param = i.param
268-
if isinstance(param, paramType):
269-
if dataType is not None:
270-
if param.datatype in dataType:
272+
for t in paramType:
273+
if isinstance(param, t):
274+
if dataType is not None:
275+
if param.datatype in dataType:
276+
values.append(ValueFromInput(param.name))
277+
else:
271278
values.append(ValueFromInput(param.name))
272-
else:
273-
values.append(ValueFromInput(param.name))
279+
break
274280
if outType is None:
275281
return values
276282
if self._algName is None:

python/plugins/processing/tests/ModelerTest.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ def testModelerParametersDialogAvailableValuesOfType(self):
6262
self.assertEqual(set(p.name for p in dlg.getAvailableValuesOfType(ParameterFile)),
6363
set(['file']))
6464

65+
# test multiple types
66+
self.assertEqual(set(p.name for p in dlg.getAvailableValuesOfType([ParameterString, ParameterNumber, ParameterFile])),
67+
set(['string', 'string2', 'number', 'file']))
68+
6569

6670
if __name__ == '__main__':
6771
unittest.main()

0 commit comments

Comments
 (0)