Skip to content

Commit efe8bba

Browse files
committed
Work on resurrecting modeler
1 parent 5d8f2d9 commit efe8bba

File tree

8 files changed

+154
-119
lines changed

8 files changed

+154
-119
lines changed

python/plugins/processing/gui/NumberInputPanel.py

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,13 @@
3434
from qgis.PyQt.QtWidgets import QDialog
3535

3636
from qgis.core import (QgsExpression,
37-
QgsProcessingParameterNumber)
37+
QgsProcessingParameterNumber,
38+
QgsProcessingOutputNumber,
39+
QgsProcessingOutputVectorLayer,
40+
QgsProcessingOutputRasterLayer,
41+
QgsProcessingParameterFeatureSource,
42+
QgsProcessingParameterRasterLayer)
3843
from qgis.gui import QgsExpressionBuilderDialog
39-
from processing.core.parameters import ParameterNumber, ParameterVector, ParameterRaster
40-
from processing.core.outputs import OutputNumber, OutputVector, OutputRaster
4144
from processing.modeler.ModelerAlgorithm import ValueFromInput, ValueFromOutput, CompoundValue
4245
from processing.tools.dataobjects import createExpressionContext
4346

@@ -76,7 +79,7 @@ def showExpressionsBuilder(self):
7679
dlg = QgsExpressionBuilderDialog(None, str(self.leText.text()), self, 'generic', context)
7780

7881
context.popScope()
79-
values = self.modelParametersDialog.getAvailableValuesOfType(ParameterNumber, OutputNumber)
82+
values = self.modelParametersDialog.getAvailableValuesOfType(QgsProcessingParameterNumber, QgsProcessingOutputNumber)
8083
variables = {}
8184
for value in values:
8285
if isinstance(value, ValueFromInput):
@@ -86,11 +89,11 @@ def showExpressionsBuilder(self):
8689
else:
8790
name = "%s_%s" % (value.alg, value.output)
8891
alg = self.modelParametersDialog.model.algs[value.alg]
89-
out = alg.algorithm.getOutputFromName(value.output)
92+
out = alg.algorithm.outputDefinition(value.output)
9093
desc = self.tr("Output '{0}' from algorithm '{1}'").format(out.description(), alg.description)
9194
variables[name] = desc
92-
values = self.modelParametersDialog.getAvailableValuesOfType(ParameterVector, OutputVector)
93-
values.extend(self.modelParametersDialog.getAvailableValuesOfType(ParameterRaster, OutputRaster))
95+
values = self.modelParametersDialog.getAvailableValuesOfType([QgsProcessingParameterFeatureSource, QgsProcessingParameterRasterLayer],
96+
[QgsProcessingOutputVectorLayer, QgsProcessingOutputRasterLayer])
9497
for value in values:
9598
if isinstance(value, ValueFromInput):
9699
name = value.name
@@ -99,13 +102,13 @@ def showExpressionsBuilder(self):
99102
else:
100103
name = "%s_%s" % (value.alg, value.output)
101104
alg = self.modelParametersDialog.model.algs[value.alg]
102-
element = alg.algorithm.getOutputFromName(value.output)
105+
element = alg.algorithm.outputDefinition(value.output)
103106
desc = self.tr("Output '{0}' from algorithm '{1}'").format(element.description(), alg.description)
104107
variables['%s_minx' % name] = self.tr("Minimum X of {0}").format(desc)
105108
variables['%s_miny' % name] = self.tr("Minimum Y of {0}").format(desc)
106109
variables['%s_maxx' % name] = self.tr("Maximum X of {0}").format(desc)
107110
variables['%s_maxy' % name] = self.tr("Maximum Y of {0}").format(desc)
108-
if isinstance(element, (ParameterRaster, OutputRaster)):
111+
if isinstance(element, (QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)):
109112
variables['%s_min' % name] = self.tr("Minimum value of {0}").format(desc)
110113
variables['%s_max' % name] = self.tr("Maximum value of {0}").format(desc)
111114
variables['%s_avg' % name] = self.tr("Mean value of {0}").format(desc)
@@ -123,13 +126,13 @@ def getValue(self):
123126
value = self.leText.text()
124127
values = []
125128
for param in self.modelParametersDialog.model.parameters:
126-
if isinstance(param, ParameterNumber):
129+
if isinstance(param, QgsProcessingParameterNumber):
127130
if "@" + param.name() in value:
128131
values.append(ValueFromInput(param.name()))
129132
for alg in list(self.modelParametersDialog.model.algs.values()):
130-
for out in alg.algorithm.outputs:
131-
if isinstance(out, OutputNumber) and "@%s_%s" % (alg.name(), out.name) in value:
132-
values.append(ValueFromOutput(alg.name(), out.name))
133+
for out in alg.algorithm.outputDefinitions():
134+
if isinstance(out, QgsProcessingOutputNumber) and "@%s_%s" % (alg.modeler_name, out.name) in value:
135+
values.append(ValueFromOutput(alg.modeler_name, out.name()))
133136
if values:
134137
return CompoundValue(values, value)
135138
else:

python/plugins/processing/gui/wrappers.py

Lines changed: 31 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@
6161
QgsProcessingParameterTable,
6262
QgsProcessingParameterTableField,
6363
QgsProcessingParameterFeatureSource,
64-
QgsProcessingFeatureSourceDefinition)
64+
QgsProcessingFeatureSourceDefinition,
65+
QgsProcessingOutputRasterLayer,
66+
QgsProcessingOutputVectorLayer,
67+
QgsProcessingOutputString,
68+
QgsProcessingOutputNumber)
6569

6670
from qgis.PyQt.QtWidgets import (
6771
QCheckBox,
@@ -271,7 +275,7 @@ def createWidget(self):
271275
widget = QComboBox()
272276
widget.addItem(self.tr('Yes'), True)
273277
widget.addItem(self.tr('No'), False)
274-
bools = self.dialog.getAvailableValuesOfType(ParameterBoolean, None)
278+
bools = self.dialog.getAvailableValuesOfType(QgsProcessingParameterBoolean, None)
275279
for b in bools:
276280
widget.addItem(self.dialog.resolveValueDescription(b), b)
277281
return widget
@@ -308,11 +312,11 @@ def createWidget(self):
308312

309313
widget.setLayout(layout)
310314
self.combo.setEditable(True)
311-
crss = self.dialog.getAvailableValuesOfType(ParameterCrs)
315+
crss = self.dialog.getAvailableValuesOfType(QgsProcessingParameterCrs)
312316
for crs in crss:
313317
self.combo.addItem(self.dialog.resolveValueDescription(crs), crs)
314-
raster = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
315-
vector = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
318+
raster = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
319+
vector = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer)
316320
for r in raster:
317321
self.combo.addItem("Crs of layer " + self.dialog.resolveValueDescription(r), r)
318322
for v in vector:
@@ -374,11 +378,11 @@ def createWidget(self):
374378
else:
375379
widget = QComboBox()
376380
widget.setEditable(True)
377-
extents = self.dialog.getAvailableValuesOfType(ParameterExtent, OutputExtent)
381+
extents = self.dialog.getAvailableValuesOfType(QgsProcessingParameterExtent, OutputExtent)
378382
if self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
379383
widget.addItem(self.USE_MIN_COVERING_EXTENT, None)
380-
raster = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
381-
vector = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
384+
raster = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
385+
vector = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer)
382386
for ex in extents:
383387
widget.addItem(self.dialog.resolveValueDescription(ex), ex)
384388
for r in raster:
@@ -428,7 +432,7 @@ def createWidget(self):
428432
else:
429433
item = QComboBox()
430434
item.setEditable(True)
431-
points = self.dialog.getAvailableValuesOfType(ParameterPoint)
435+
points = self.dialog.getAvailableValuesOfType(QgsProcessingParameterPoint)
432436
for p in points:
433437
item.addItem(self.dialog.resolveValueDescription(p), p)
434438
item.setEditText(str(self.param.defaultValue()))
@@ -473,7 +477,7 @@ def createWidget(self):
473477
else:
474478
widget = QComboBox()
475479
widget.setEditable(True)
476-
files = self.dialog.getAvailableValuesOfType(ParameterFile, OutputFile)
480+
files = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFile, OutputFile)
477481
for f in files:
478482
widget.addItem(self.dialog.resolveValueDescription(f), f)
479483
return widget
@@ -513,22 +517,22 @@ class MultipleInputWidgetWrapper(WidgetWrapper):
513517

514518
def _getOptions(self):
515519
if self.param.layerType() == QgsProcessingParameterDefinition.TypeVectorAny:
516-
options = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
520+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer)
517521
elif self.param.layerType() == QgsProcessingParameterDefinition.TypeVectorPoint:
518-
options = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector,
522+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer,
519523
[QgsProcessingParameterDefinition.TypeVectorPoint, QgsProcessingParameterDefinition.TypeVectorAny])
520524
elif self.param.layerType() == QgsProcessingParameterDefinition.TypeVectorLine:
521-
options = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector,
525+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer,
522526
[QgsProcessingParameterDefinition.TypeVectorLine, QgsProcessingParameterDefinition.TypeVectorAny])
523527
elif self.param.layerType() == QgsProcessingParameterDefinition.TypeVectorPolygon:
524-
options = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector,
528+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer,
525529
[QgsProcessingParameterDefinition.TypeVectorPolygon, QgsProcessingParameterDefinition.TypeVectorAny])
526530
elif self.param.layerType() == QgsProcessingParameterDefinition.TypeRaster:
527-
options = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
531+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
528532
elif self.param.layerType() == QgsProcessingParameterDefinition.TypeTable:
529-
options = self.dialog.getAvailableValuesOfType(ParameterTable, OutputTable)
533+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterTable, OutputTable)
530534
else:
531-
options = self.dialog.getAvailableValuesOfType(ParameterFile, OutputFile)
535+
options = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFile, OutputFile)
532536
options = sorted(options, key=lambda opt: self.dialog.resolveValueDescription(opt))
533537
return options
534538

@@ -656,7 +660,7 @@ def createWidget(self):
656660
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
657661
else:
658662
self.combo = QComboBox()
659-
layers = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
663+
layers = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
660664
self.combo.setEditable(True)
661665
for layer in layers:
662666
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
@@ -812,7 +816,7 @@ def createWidget(self):
812816
return widget
813817
else:
814818
self.combo = QComboBox()
815-
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
819+
layers = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer)
816820
self.combo.setEditable(True)
817821
for layer in layers:
818822
self.combo.addItem(self.dialog.resolveValueDescription(layer), layer)
@@ -901,8 +905,8 @@ def createWidget(self):
901905

902906
else:
903907
# strings, numbers, files and table fields are all allowed input types
904-
strings = self.dialog.getAvailableValuesOfType([ParameterString, ParameterNumber, ParameterFile,
905-
ParameterTableField, ParameterExpression], OutputString)
908+
strings = self.dialog.getAvailableValuesOfType([QgsProcessingParameterString, QgsProcessingParameterNumber, QgsProcessingParameterFile,
909+
QgsProcessingParameterTableField, QgsProcessingParameterExpression], QgsProcessingOutputString)
906910
options = [(self.dialog.resolveValueDescription(s), s) for s in strings]
907911
if self.param.multiLine():
908912
widget = MultilineTextPanel(options)
@@ -986,13 +990,13 @@ def createWidget(self):
986990
if self.param.defaultValue():
987991
widget.setExpression(self.param.defaultValue())
988992
else:
989-
strings = self.dialog.getAvailableValuesOfType([ParameterExpression, ParameterString, ParameterNumber], OutputString)
993+
strings = self.dialog.getAvailableValuesOfType([QgsProcessingParameterExpression, QgsProcessingParameterString, QgsProcessingParameterNumber], QgsProcessingOutputString)
990994
options = [(self.dialog.resolveValueDescription(s), s) for s in strings]
991995
widget = QComboBox()
992996
widget.setEditable(True)
993997
for desc, val in options:
994998
widget.addItem(desc, val)
995-
widget.setEditText(self.param.default or "")
999+
widget.setEditText(self.param.defaultValue() or "")
9961000
return widget
9971001

9981002
def postInitialize(self, wrappers):
@@ -1072,10 +1076,10 @@ def createWidget(self):
10721076
return BatchInputSelectionPanel(self.param, self.row, self.col, self.dialog)
10731077
else:
10741078
self.combo = QComboBox()
1075-
layers = self.dialog.getAvailableValuesOfType(ParameterRaster, OutputRaster)
1079+
layers = self.dialog.getAvailableValuesOfType(QgsProcessingParameterRasterLayer, QgsProcessingOutputRasterLayer)
10761080
self.combo.setEditable(True)
1077-
tables = self.dialog.getAvailableValuesOfType(ParameterTable, OutputTable)
1078-
layers = self.dialog.getAvailableValuesOfType(ParameterVector, OutputVector)
1081+
tables = self.dialog.getAvailableValuesOfType(QgsProcessingParameterTable, OutputTable)
1082+
layers = self.dialog.getAvailableValuesOfType(QgsProcessingParameterFeatureSource, QgsProcessingOutputVectorLayer)
10791083
if self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
10801084
self.combo.addItem(self.NOT_SELECTED, None)
10811085
for table in tables:
@@ -1159,7 +1163,7 @@ def createWidget(self):
11591163
else:
11601164
widget = QComboBox()
11611165
widget.setEditable(True)
1162-
fields = self.dialog.getAvailableValuesOfType(ParameterTableField, None)
1166+
fields = self.dialog.getAvailableValuesOfType([QgsProcessingParameterTableField, QgsProcessingParameterString], [QgsProcessingOutputString])
11631167
if self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
11641168
widget.addItem(self.NOT_SET, None)
11651169
for f in fields:

python/plugins/processing/modeler/ModelerAlgorithm.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,29 @@
3636
from operator import attrgetter
3737

3838
from qgis.core import (QgsApplication,
39-
QgsProcessingParameterDefinition)
39+
QgsProcessingParameterDefinition,
40+
QgsProcessingParameterBoolean,
41+
QgsProcessingParameterCrs,
42+
QgsProcessingParameterMapLayer,
43+
QgsProcessingParameterExtent,
44+
QgsProcessingParameterPoint,
45+
QgsProcessingParameterFile,
46+
QgsProcessingParameterMatrix,
47+
QgsProcessingParameterMultipleLayers,
48+
QgsProcessingParameterNumber,
49+
QgsProcessingParameterRange,
50+
QgsProcessingParameterRasterLayer,
51+
QgsProcessingParameterEnum,
52+
QgsProcessingParameterString,
53+
QgsProcessingParameterExpression,
54+
QgsProcessingParameterTable,
55+
QgsProcessingParameterTableField,
56+
QgsProcessingParameterFeatureSource)
4057
from qgis.gui import QgsMessageBar
4158
from qgis.utils import iface
4259
from processing.core.GeoAlgorithm import GeoAlgorithm
4360
from processing.modeler.WrongModelException import WrongModelException
4461
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
45-
from processing.core.parameters import (Parameter,
46-
ParameterRaster,
47-
ParameterVector,
48-
ParameterTable,
49-
ParameterTableField,
50-
ParameterBoolean,
51-
ParameterString,
52-
ParameterNumber)
5362

5463
from processing.gui.Help2Html import getHtmlFromDescriptionsDict
5564

@@ -240,8 +249,7 @@ def __init__(self):
240249
self.inputs = {}
241250
GeoAlgorithm.__init__(self)
242251

243-
classes = [ParameterRaster, ParameterVector, ParameterTable, ParameterTableField,
244-
ParameterBoolean, ParameterString, ParameterNumber]
252+
classes = [c for c in QgsProcessingParameterDefinition.__subclasses__()]
245253
self.parameters = []
246254
for c in classes:
247255
for inp in list(self.inputs.values()):

python/plugins/processing/modeler/ModelerDialog.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,7 +552,11 @@ def addAlgorithm(self):
552552
self._addAlgorithm(alg)
553553

554554
def _addAlgorithm(self, alg, pos=None):
555-
dlg = alg.getCustomModelerParametersDialog(self.alg)
555+
dlg = None
556+
try:
557+
dlg = alg.getCustomModelerParametersDialog(self.alg)
558+
except:
559+
pass
556560
if not dlg:
557561
dlg = ModelerParametersDialog(alg, self.alg)
558562
dlg.exec_()

0 commit comments

Comments
 (0)