Adapt more code to c++ API

This commit is contained in:
Nyall Dawson 2017-05-16 16:36:00 +10:00
parent ef59d0c454
commit 189f804714
41 changed files with 306 additions and 332 deletions

View File

@ -26,6 +26,8 @@ __copyright__ = '(C) 2016, Médéric Ribreux'
__revision__ = '$Format:%H$'
from qgis.core import QgsProcessingParameterDefinition
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
from processing.core.parameters import ParameterRaster
from processing.core.parameters import ParameterString
@ -111,7 +113,7 @@ class gdal2tiles(GdalAlgorithm):
None, False, True))
for param in params:
param.isAdvanced = True
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(param)
self.addOutput(OutputDirectory(self.OUTPUTDIR,

View File

@ -26,6 +26,8 @@ __copyright__ = '(C) 2016, Médéric Ribreux'
__revision__ = '$Format:%H$'
from qgis.core import QgsProcessingParameterDefinition
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
from processing.core.parameters import ParameterString
from processing.core.parameters import ParameterSelection
@ -107,7 +109,7 @@ class retile(GdalAlgorithm):
None, False, True))
for param in params:
param.isAdvanced = True
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(param)
self.addOutput(OutputDirectory(self.TARGETDIR,

View File

@ -37,7 +37,8 @@ from qgis.core import (QgsRasterLayer,
QgsApplication,
QgsProcessingUtils,
QgsMessageLog,
QgsProcessingAlgorithm)
QgsProcessingAlgorithm,
QgsProcessingParameterDefinition)
from qgis.utils import iface
from processing.core.GeoAlgorithm import GeoAlgorithm
@ -183,7 +184,7 @@ class Grass7Algorithm(GeoAlgorithm):
vectorOutputs += 1
if isinstance(output, OutputHTML):
self.addOutput(OutputFile("rawoutput",
self.tr("{0} (raw output)").format(output.description),
self.tr("{0} (raw output)").format(output.description()),
"txt"))
line = lines.readline().strip('\n').strip()
except Exception as e:
@ -203,17 +204,17 @@ class Grass7Algorithm(GeoAlgorithm):
param = ParameterNumber(self.GRASS_SNAP_TOLERANCE_PARAMETER,
'v.in.ogr snap tolerance (-1 = no snap)',
-1, None, -1.0)
param.isAdvanced = True
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(param)
param = ParameterNumber(self.GRASS_MIN_AREA_PARAMETER,
'v.in.ogr min area', 0, None, 0.0001)
param.isAdvanced = True
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(param)
if vectorOutputs == 1:
param = ParameterSelection(self.GRASS_OUTPUT_TYPE_PARAMETER,
'v.out.ogr output type',
self.OUTPUT_TYPES)
param.isAdvanced = True
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(param)
def getDefaultCellsize(self):
@ -395,7 +396,7 @@ class Grass7Algorithm(GeoAlgorithm):
command += ' ' + ' '.join(self.hardcodedStrings)
# Add algorithm command
for param in self.parameters:
for param in self.parameterDefinitions():
if param.value is None or param.value == '':
continue
if param.name in [self.GRASS_REGION_CELLSIZE_PARAMETER, self.GRASS_REGION_EXTENT_PARAMETER, self.GRASS_MIN_AREA_PARAMETER, self.GRASS_SNAP_TOLERANCE_PARAMETER, self.GRASS_OUTPUT_TYPE_PARAMETER, self.GRASS_REGION_ALIGN_TO_RESOLUTION]:
@ -403,28 +404,28 @@ class Grass7Algorithm(GeoAlgorithm):
if isinstance(param, (ParameterRaster, ParameterVector)):
value = param.value
if value in list(self.exportedLayers.keys()):
command += ' ' + param.name + '=' \
command += ' ' + param.name() + '=' \
+ self.exportedLayers[value]
else:
command += ' ' + param.name + '=' + value
command += ' ' + param.name() + '=' + value
elif isinstance(param, ParameterMultipleInput):
s = param.value
for layer in list(self.exportedLayers.keys()):
s = s.replace(layer, self.exportedLayers[layer])
s = s.replace(';', ',')
command += ' ' + param.name + '=' + s
command += ' ' + param.name() + '=' + s
elif isinstance(param, ParameterBoolean):
if param.value:
command += ' ' + param.name
command += ' ' + param.name()
elif isinstance(param, ParameterSelection):
idx = int(param.value)
command += ' ' + param.name + '=' + str(param.options[idx][1])
command += ' ' + param.name() + '=' + str(param.options[idx][1])
elif isinstance(param, ParameterString):
command += ' ' + param.name + '="' + str(param.value) + '"'
command += ' ' + param.name() + '="' + str(param.value) + '"'
elif isinstance(param, ParameterPoint):
command += ' ' + param.name + '=' + str(param.value)
command += ' ' + param.name() + '=' + str(param.value)
else:
command += ' ' + param.name + '="' + str(param.value) + '"'
command += ' ' + param.name() + '="' + str(param.value) + '"'
for out in self.outputs:
if isinstance(out, OutputFile):

View File

@ -81,7 +81,7 @@ def processCommand(alg, parameters):
for param in paramsToDelete:
alg.parameters.remove(param)
alg.processCommand()
alg.processCommand(parameters, context)
# Bring back the parameters:
for param in paramsToDelete:

View File

@ -31,7 +31,8 @@ from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsFeatureRequest,
QgsMessageLog,
QgsProcessingUtils)
QgsProcessingUtils,
QgsProcessingParameterDefinition)
from qgis.analysis import QgsKernelDensityEstimation
from processing.algs.qgis import QgisAlgorithm
@ -88,7 +89,7 @@ class Heatmap(QgisAlgorithm):
radius_field_param = ParameterTableField(self.RADIUS_FIELD,
self.tr('Radius from field'), self.INPUT_LAYER, optional=True, datatype=ParameterTableField.DATA_TYPE_NUMBER)
radius_field_param.isAdvanced = True
radius_field_param.setFlags(radius_field_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(radius_field_param)
class ParameterHeatmapPixelSize(ParameterNumber):
@ -108,20 +109,20 @@ class Heatmap(QgisAlgorithm):
weight_field_param = ParameterTableField(self.WEIGHT_FIELD,
self.tr('Weight from field'), self.INPUT_LAYER, optional=True, datatype=ParameterTableField.DATA_TYPE_NUMBER)
weight_field_param.isAdvanced = True
weight_field_param.setFlags(weight_field_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(weight_field_param)
kernel_shape_param = ParameterSelection(self.KERNEL,
self.tr('Kernel shape'), self.KERNELS)
kernel_shape_param.isAdvanced = True
kernel_shape_param.setFlags(kernel_shape_param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(kernel_shape_param)
decay_ratio = ParameterNumber(self.DECAY,
self.tr('Decay ratio (Triangular kernels only)'),
-100.0, 100.0, 0.0)
decay_ratio.isAdvanced = True
decay_ratio.setFlags(decay_ratio.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(decay_ratio)
output_scaling = ParameterSelection(self.OUTPUT_VALUE,
self.tr('Output value scaling'), self.OUTPUT_VALUES)
output_scaling.isAdvanced = True
output_scaling.setFlags(output_scaling.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(output_scaling)
self.addOutput(OutputRaster(self.OUTPUT_LAYER,
self.tr('Heatmap')))

View File

@ -30,7 +30,8 @@ import os
from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsRectangle,
QgsProcessingUtils)
QgsProcessingUtils,
QgsProcessingParameterDefinition)
from qgis.analysis import (QgsInterpolator,
QgsIDWInterpolator,
QgsGridFileWriter
@ -78,13 +79,13 @@ class IdwInterpolation(QgisAlgorithm):
def setValue(self, value):
if value is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
if value == '':
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
if isinstance(value, str):

View File

@ -26,7 +26,8 @@ __copyright__ = '(C) 2016, Nyall Dawson'
__revision__ = '$Format:%H$'
from qgis.core import (QgsApplication,
QgsProcessingUtils)
QgsProcessingUtils,
QgsProcessingParameterDefinition)
from processing.algs.qgis import QgisAlgorithm
from processing.core.GeoAlgorithmExecutionException import GeoAlgorithmExecutionException
from processing.core.parameters import ParameterVector, ParameterNumber
@ -66,7 +67,7 @@ class Orthogonalize(QgisAlgorithm):
max_iterations = ParameterNumber(self.MAX_ITERATIONS,
self.tr('Maximum algorithm iterations'),
1, 10000, 1000)
max_iterations.isAdvanced = True
max_iterations.setFlags(max_iterations.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(max_iterations)
self.addOutput(OutputVector(self.OUTPUT_LAYER, self.tr('Orthogonalized')))

View File

@ -74,7 +74,7 @@ class RasterCalculator(QgisAlgorithm):
param = i.param
if isinstance(param, ParameterRaster):
new = "{}@".format(os.path.basename(param.value))
old = "{}@".format(param.name)
old = "{}@".format(param.name())
value = value.replace(old, new)
for alg in list(model.algs.values()):
@ -164,7 +164,7 @@ class RasterCalculator(QgisAlgorithm):
for i in list(model.inputs.values()):
param = i.param
if isinstance(param, ParameterRaster) and "{}@".format(param.name) in expression:
values.append(ValueFromInput(param.name))
values.append(ValueFromInput(param.name()))
if algorithm.name:
dependent = model.getDependentAlgorithms(algorithm.name)

View File

@ -30,7 +30,7 @@ import os
from qgis.PyQt.QtGui import QIcon, QColor
from qgis.analysis import QgsRelief
from qgis.core import QgsProcessingParameterDefinition
from processing.algs.qgis import QgisAlgorithm
from processing.core.parameters import (Parameter,
ParameterRaster,
@ -74,13 +74,13 @@ class Relief(QgisAlgorithm):
def setValue(self, value):
if value is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
if value == '':
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
if isinstance(value, str):

View File

@ -31,7 +31,15 @@ from collections import OrderedDict
from qgis.PyQt.QtCore import QVariant
from qgis.PyQt.QtGui import QIcon
from qgis.core import QgsWkbTypes, QgsUnitTypes, QgsFeature, QgsGeometry, QgsField, QgsFields, QgsFeatureRequest, QgsProcessingUtils
from qgis.core import (QgsWkbTypes,
QgsUnitTypes,
QgsFeature,
QgsGeometry,
QgsField,
QgsFields,
QgsFeatureRequest,
QgsProcessingUtils,
QgsProcessingParameterDefinition)
from qgis.analysis import (QgsVectorLayerDirector,
QgsNetworkDistanceStrategy,
QgsNetworkSpeedStrategy,
@ -134,7 +142,7 @@ class ServiceAreaFromLayer(QgisAlgorithm):
0.0, 99999999.999999, 0.0))
for p in params:
p.isAdvanced = True
p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(p)
self.addOutput(OutputVector(self.OUTPUT_POINTS,

View File

@ -38,6 +38,7 @@ from qgis.core import (QgsWkbTypes,
QgsPointXY,
QgsField,
QgsFields,
QgsProcessingParameterDefinition,
QgsProcessingUtils)
from qgis.analysis import (QgsVectorLayerDirector,
QgsNetworkDistanceStrategy,
@ -141,7 +142,7 @@ class ServiceAreaFromPoint(QgisAlgorithm):
0.0, 99999999.999999, 0.0))
for p in params:
p.isAdvanced = True
p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(p)
self.addOutput(OutputVector(self.OUTPUT_POINTS,

View File

@ -40,6 +40,7 @@ from qgis.core import (QgsWkbTypes,
QgsField,
QgsFeatureRequest,
QgsMessageLog,
QgsProcessingParameterDefinition,
QgsProcessingUtils)
from qgis.analysis import (QgsVectorLayerDirector,
QgsNetworkDistanceStrategy,
@ -142,7 +143,7 @@ class ShortestPathLayerToPoint(QgisAlgorithm):
0.0, 99999999.999999, 0.0))
for p in params:
p.isAdvanced = True
p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(p)
self.addOutput(OutputVector(self.OUTPUT_LAYER,

View File

@ -33,6 +33,7 @@ from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsWkbTypes, QgsUnitTypes, QgsFeature, QgsGeometry, QgsPointXY, QgsFields, QgsField, QgsFeatureRequest,
QgsMessageLog,
QgsProcessingParameterDefinition,
QgsProcessingUtils)
from qgis.analysis import (QgsVectorLayerDirector,
QgsNetworkDistanceStrategy,
@ -135,7 +136,7 @@ class ShortestPathPointToLayer(QgisAlgorithm):
0.0, 99999999.999999, 0.0))
for p in params:
p.isAdvanced = True
p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(p)
self.addOutput(OutputVector(self.OUTPUT_LAYER,

View File

@ -38,6 +38,7 @@ from qgis.core import (QgsWkbTypes,
QgsPointXY,
QgsFields,
QgsField,
QgsProcessingParameterDefinition,
QgsProcessingUtils)
from qgis.analysis import (QgsVectorLayerDirector,
QgsNetworkDistanceStrategy,
@ -143,7 +144,7 @@ class ShortestPathPointToPoint(QgisAlgorithm):
0.0, 99999999.999999, 0.0))
for p in params:
p.isAdvanced = True
p.setFlags(p.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
self.addParameter(p)
self.addOutput(OutputNumber(self.TRAVEL_COST,

View File

@ -30,7 +30,8 @@ import os
from qgis.PyQt.QtGui import QIcon
from qgis.core import (QgsRectangle,
QgsProcessingUtils)
QgsProcessingUtils,
QgsProcessingParameterDefinition)
from qgis.analysis import (QgsInterpolator,
QgsTINInterpolator,
QgsGridFileWriter
@ -86,13 +87,13 @@ class TinInterpolation(QgisAlgorithm):
def setValue(self, value):
if value is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
if value == '':
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
if isinstance(value, str):

View File

@ -1,4 +1,5 @@
from qgis.core import (QgsProcessingUtils,
QgsProcessingParameterDefinition,
QgsProject)
from processing.gui.wrappers import WidgetWrapper, DIALOG_STANDARD, DIALOG_BATCH
from processing.tools import dataobjects
@ -242,6 +243,6 @@ class LayersListWidgetWrapper(WidgetWrapper):
else:
options = self._getOptions()
values = [options[i] for i in self.widget.selectedoptions]
if len(values) == 0 and not self.param.optional:
if len(values) == 0 and not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
raise InvalidParameterValue()
return values

View File

@ -214,20 +214,20 @@ class SagaAlgorithm(GeoAlgorithm):
if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable)):
value = param.value
if value in list(self.exportedLayers.keys()):
command += ' -' + param.name + ' "' \
command += ' -' + param.name() + ' "' \
+ self.exportedLayers[value] + '"'
else:
command += ' -' + param.name + ' "' + value + '"'
command += ' -' + param.name() + ' "' + value + '"'
elif isinstance(param, ParameterMultipleInput):
s = param.value
for layer in list(self.exportedLayers.keys()):
s = s.replace(layer, self.exportedLayers[layer])
command += ' -' + param.name + ' "' + s + '"'
command += ' -' + param.name() + ' "' + s + '"'
elif isinstance(param, ParameterBoolean):
if param.value:
command += ' -' + param.name.strip() + " true"
command += ' -' + param.name().strip() + " true"
else:
command += ' -' + param.name.strip() + " false"
command += ' -' + param.name().strip() + " false"
elif isinstance(param, ParameterFixedTable):
tempTableFile = getTempFilename('txt')
with open(tempTableFile, 'w') as f:
@ -236,7 +236,7 @@ class SagaAlgorithm(GeoAlgorithm):
for i in range(0, len(values), 3):
s = values[i] + '\t' + values[i + 1] + '\t' + values[i + 2] + '\n'
f.write(s)
command += ' -' + param.name + ' "' + tempTableFile + '"'
command += ' -' + param.name() + ' "' + tempTableFile + '"'
elif isinstance(param, ParameterExtent):
# 'We have to substract/add half cell size, since SAGA is
# center based, not corner based
@ -247,9 +247,9 @@ class SagaAlgorithm(GeoAlgorithm):
command += ' -' + self.extentParamNames[i] + ' ' \
+ str(float(values[i]) + offset[i])
elif isinstance(param, (ParameterNumber, ParameterSelection)):
command += ' -' + param.name + ' ' + str(param.value)
command += ' -' + param.name() + ' ' + str(param.value)
else:
command += ' -' + param.name + ' "' + str(param.value) + '"'
command += ' -' + param.name() + ' "' + str(param.value) + '"'
for out in self.outputs:
command += ' -' + out.name + ' "' + out.getCompatibleFileName(self) + '"'

View File

@ -37,6 +37,7 @@ from qgis.core import (QgsProcessingFeedback,
QgsProcessingAlgorithm,
QgsProject,
QgsProcessingUtils,
QgsProcessingParameterDefinition,
QgsMessageLog)
from builtins import str
@ -350,7 +351,7 @@ class GeoAlgorithm(QgsProcessingAlgorithm):
for param in self.parameters:
s += '\t' + str(param) + '\n'
for out in self.outputs:
if not out.hidden:
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
s += '\t' + str(out) + '\n'
s += '\n'
return s
@ -394,7 +395,7 @@ class GeoAlgorithm(QgsProcessingAlgorithm):
for param in self.parameters:
s += param.getValueAsCommandLineParameter() + ','
for out in self.outputs:
if not out.hidden:
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
s += out.getValueAsCommandLineParameter() + ','
s = s[:-1] + ')'
return s

View File

@ -189,7 +189,7 @@ class Processing(object):
i = i + 1
for output in alg.outputs:
if not output.hidden:
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
if not output.setValue(args[i]):
# fix_print_with_import
print('Error: Wrong output value: ' + str(args[i]))

View File

@ -45,7 +45,8 @@ from qgis.core import (QgsExpressionContext,
QgsProject,
QgsSettings,
QgsVectorFileWriter,
QgsProcessingUtils)
QgsProcessingUtils,
QgsProcessingParameterDefinition)
def _expressionContext(alg):
@ -63,21 +64,12 @@ class Output(object):
def __init__(self, name='', description='', hidden=False):
self.name = name
self.description = description
# The value of an output is a string representing the location
# of the output. For a file based output, it should be the
# filepath to it.
self.value = None
# A hidden output will not be shown to the user, who will not
# be able to select where to store it. Use this to generate
# outputs that are modified version of inputs (like a selection
# in a vector layer). In the case of layers, hidden outputs are
# not loaded into QGIS after the algorithm is executed. Other
# outputs not representing layers or tables should always be hidden.
self.hidden = str(hidden).lower() == str(True).lower()
def __str__(self):
return u'{} <{}>'.format(self.name, self.__class__.__name__)
@ -107,7 +99,7 @@ class Output(object):
return []
def resolveValue(self, alg):
if self.hidden:
if self.flags() & QgsProcessingParameterDefinition.FlagHidden:
return
if not bool(self.value):
self.value = self._resolveTemporary(alg)
@ -135,9 +127,6 @@ class Output(object):
def expressionContext(self, alg):
return _expressionContext(alg)
def typeName(self):
return self.__class__.__name__.replace('Output', '').lower()
def tr(self, string, context=''):
if context == '':
context = 'Output'
@ -154,9 +143,8 @@ class OutputExtent(Output):
def __init__(self, name='', description=''):
self.name = name
self.description = description
self.value = None
self.hidden = True
self.setFlags(self.flags() | QgsProcessingParameterDefinition.FlagHidden)
def setValue(self, value):
try:

View File

@ -42,7 +42,8 @@ from qgis.PyQt.QtCore import QCoreApplication
from qgis.core import (QgsRasterLayer, QgsVectorLayer, QgsMapLayer, QgsCoordinateReferenceSystem,
QgsExpressionContext, QgsExpressionContextUtils, QgsExpression, QgsExpressionContextScope,
QgsProject,
QgsVectorFileWriter)
QgsVectorFileWriter,
QgsProcessingParameterDefinition)
from processing.tools.vector import resolveFieldIndex
from processing.tools import dataobjects
@ -108,27 +109,10 @@ class Parameter(object):
take as input.
"""
default_metadata = {}
def __init__(self, name='', description='', default=None, optional=False,
metadata={}):
self.name = name
self.description = description
self.default = default
self.value = default
self.isAdvanced = False
# A hidden parameter can be used to set a hard-coded value.
# It can be used as any other parameter, but it will not be
# shown to the user
self.hidden = False
self.optional = parseBool(optional)
self.metadata = deepcopy(self.default_metadata)
self.metadata.update(deepcopy(metadata))
def setValue(self, obj):
"""
Sets the value of the parameter.
@ -137,7 +121,7 @@ class Parameter(object):
of parameter.
"""
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -145,17 +129,8 @@ class Parameter(object):
self.value = str(obj)
return True
def setDefaultValue(self):
"""
Sets the value of the parameter to the default one
Returns true if the default value is correct for the type
of parameter.
"""
return self.setValue(self.default)
def __str__(self):
return u'{} <{}>'.format(self.name, self.__class__.__name__)
return u'{} <{}>'.format(self.name(), self.__class__.__name__)
def getValueAsCommandLineParameter(self):
"""
@ -165,9 +140,6 @@ class Parameter(object):
"""
return str(self.value)
def typeName(self):
return self.__class__.__name__.replace('Parameter', '').lower()
def todict(self):
o = deepcopy(self.__dict__)
del o['metadata']
@ -178,24 +150,6 @@ class Parameter(object):
context = 'Parameter'
return QCoreApplication.translate(context, string)
def wrapper(self, dialog, row=0, col=0):
wrapper = self.metadata.get('widget_wrapper', None)
params = {}
# wrapper metadata should be a dict with class key
if isinstance(wrapper, dict):
params = deepcopy(wrapper)
wrapper = params.pop('class')
# wrapper metadata should be a class path
if isinstance(wrapper, str):
tokens = wrapper.split('.')
mod = __import__('.'.join(tokens[:-1]), fromlist=[tokens[-1]])
wrapper = getattr(mod, tokens[-1])
# or directly a class object
if isclass(wrapper):
wrapper = wrapper(self, dialog, row, col, **params)
# or a wrapper instance
return wrapper
def evaluate(self, alg):
pass
@ -214,7 +168,7 @@ class ParameterBoolean(Parameter):
def setValue(self, value):
if value is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -227,10 +181,10 @@ class ParameterBoolean(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'boolean '
return '##' + self.name + '=' + param_type + str(self.default)
return '##' + self.name() + '=' + param_type + str(self.defaultValue())
@classmethod
def fromScriptCode(self, line):
@ -245,6 +199,7 @@ class ParameterBoolean(Parameter):
else:
param = ParameterBoolean(name, descName)
param.optional = isOptional
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagOptional)
return param
@ -266,7 +221,7 @@ class ParameterCrs(Parameter):
def setValue(self, value):
context = dataobjects.createContext()
if not bool(value):
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -297,10 +252,10 @@ class ParameterCrs(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'crs '
return '##' + self.name + '=' + param_type + str(self.default)
return '##' + self.name() + '=' + param_type + str(self.defaultValue())
@classmethod
def fromScriptCode(self, line):
@ -346,7 +301,7 @@ class ParameterExtent(Parameter):
def setValue(self, value):
context = dataobjects.createContext()
if not value:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -388,10 +343,10 @@ class ParameterExtent(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'extent'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -402,7 +357,7 @@ class ParameterExtent(Parameter):
return ParameterExtent(name, descName, default, isOptional)
def evaluate(self, alg):
if self.optional and not bool(self.value):
if self.flags() & QgsProcessingParameterDefinition.FlagOptional and not bool(self.value):
self.value = self.getMinCoveringExtent(alg)
def getMinCoveringExtent(self, alg):
@ -460,7 +415,7 @@ class ParameterPoint(Parameter):
def setValue(self, text):
if text is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -481,10 +436,10 @@ class ParameterPoint(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'point'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -511,7 +466,7 @@ class ParameterFile(Parameter):
def setValue(self, obj):
if obj is None or obj.strip() == '':
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None if obj is None else obj.strip()
return True
@ -521,21 +476,15 @@ class ParameterFile(Parameter):
self.value = str(obj)
return True
def typeName(self):
if self.isFolder:
return 'directory'
else:
return 'file'
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
if self.isFolder:
param_type += 'folder'
else:
param_type += 'file'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -558,7 +507,7 @@ class ParameterFixedTable(Parameter):
def setValue(self, obj):
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -584,10 +533,10 @@ class ParameterFixedTable(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'fixedtable'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -632,7 +581,7 @@ class ParameterMultipleInput(ParameterDataObject):
self.minNumInputs = 0
return True
if _minNumInputs < 1 and not self.optional:
if _minNumInputs < 1 and not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
# don't allow to set negative or null number of inputs if parameter isn't optional
return False
@ -651,14 +600,14 @@ class ParameterMultipleInput(ParameterDataObject):
def setValue(self, obj):
self.exported = None
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
if isinstance(obj, list):
if len(obj) == 0:
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
self.value = None
return True
else:
@ -779,7 +728,7 @@ class ParameterMultipleInput(ParameterDataObject):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
if self.datatype == dataobjects.TYPE_RASTER:
param_type += 'multiple raster'
@ -787,7 +736,7 @@ class ParameterMultipleInput(ParameterDataObject):
param_type += 'multiple file'
else:
param_type += 'multiple vector'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -836,7 +785,7 @@ class ParameterNumber(Parameter):
def setValue(self, n):
if n is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -870,10 +819,10 @@ class ParameterNumber(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'number'
code = '##' + self.name + '=' + param_type
code = '##' + self.name() + '=' + param_type
if self.default:
code += str(self.default)
return code
@ -929,7 +878,7 @@ class ParameterNumber(Parameter):
variables = {}
for param in model.parameters:
if isinstance(param, ParameterNumber):
variables["@" + param.name] = param.value
variables["@" + param.name()] = param.value
if isinstance(param, (ParameterRaster, ParameterVector)):
variables.update(self._layerVariables(param))
@ -973,7 +922,7 @@ class ParameterRange(Parameter):
def setValue(self, text):
if text is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1036,7 +985,7 @@ class ParameterRaster(ParameterDataObject):
def setValue(self, obj):
self.exported = None
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1056,10 +1005,10 @@ class ParameterRaster(ParameterDataObject):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'raster'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -1107,11 +1056,11 @@ class ParameterSelection(Parameter):
self.value = None
if default is not None:
self.setValue(self.default)
self.setValue(self.defaultValue())
def setValue(self, value):
if value is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1131,7 +1080,7 @@ class ParameterSelection(Parameter):
if v not in self.values:
return False
values.append(v)
if not self.optional and len(values) == 0:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional and len(values) == 0:
return False
self.value = values
return True
@ -1191,7 +1140,7 @@ class ParameterString(Parameter):
def setValue(self, obj):
if not bool(obj):
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1209,10 +1158,10 @@ class ParameterString(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'string '
return '##' + self.name + '=' + param_type + repr(self.default)
return '##' + self.name() + '=' + param_type + repr(self.defaultValue())
@classmethod
def fromScriptCode(self, line):
@ -1264,7 +1213,7 @@ class ParameterExpression(Parameter):
def setValue(self, obj):
if not bool(obj):
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1282,10 +1231,10 @@ class ParameterExpression(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'expression '
return '##' + self.name + '=' + param_type + str(self.default)
return '##' + self.name() + '=' + param_type + str(self.defaultValue())
@classmethod
def fromScriptCode(self, line):
@ -1314,7 +1263,7 @@ class ParameterTable(ParameterDataObject):
def setValue(self, obj):
self.exported = None
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1371,10 +1320,10 @@ class ParameterTable(ParameterDataObject):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'table'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -1411,7 +1360,7 @@ class ParameterTableField(Parameter):
def setValue(self, value):
if not bool(value):
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1426,7 +1375,7 @@ class ParameterTableField(Parameter):
return True
def __str__(self):
return self.name + ' <' + self.__module__.split('.')[-1] + ' from ' \
return self.name() + ' <' + self.__module__.split('.')[-1] + ' from ' \
+ self.parent + '>'
def dataType(self):
@ -1441,10 +1390,10 @@ class ParameterTableField(Parameter):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'field'
return '##' + self.name + '=' + param_type + str(self.parent)
return '##' + self.name() + '=' + param_type + str(self.parent)
@classmethod
def fromScriptCode(self, line):
@ -1487,7 +1436,7 @@ class ParameterVector(ParameterDataObject):
def setValue(self, obj):
self.exported = None
if obj is None:
if not self.optional:
if not self.flags() & QgsProcessingParameterDefinition.FlagOptional:
return False
self.value = None
return True
@ -1543,10 +1492,10 @@ class ParameterVector(ParameterDataObject):
def getAsScriptCode(self):
param_type = ''
if self.optional:
if self.flags() & QgsProcessingParameterDefinition.FlagOptional:
param_type += 'optional '
param_type += 'vector'
return '##' + self.name + '=' + param_type
return '##' + self.name() + '=' + param_type
@classmethod
def fromScriptCode(self, line):
@ -1581,7 +1530,8 @@ def getParameterFromString(s):
try:
clazz = getattr(sys.modules[__name__], tokens[0])
param = clazz(*params)
param.isAdvanced = isAdvanced
if isAdvanced:
param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)
return param
except:
return None

View File

@ -130,7 +130,7 @@ class AlgorithmDialog(AlgorithmDialogBase):
context = dataobjects.createContext()
projectCRS = iface.mapCanvas().mapSettings().destinationCrs()
layers = QgsProcessingUtils.compatibleLayers(QgsProject.instance())
for param in self.alg.parameters:
for param in self.alg.parameterDefinitions():
if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)):
if param.value:
if isinstance(param, ParameterMultipleInput):
@ -151,7 +151,7 @@ class AlgorithmDialog(AlgorithmDialogBase):
if param.skip_crs_check:
continue
value = self.mainWidget.wrappers[param.name].widget.leText.text().strip()
value = self.mainWidget.wrappers[param.name()].widget.leText.text().strip()
if value:
hasExtent = True

View File

@ -47,8 +47,8 @@ class AutofillDialog(BASE, WIDGET):
self.cmbFillType.currentIndexChanged.connect(self.toggleParameters)
for param in alg.parameters:
self.cmbParameters.addItem(param.description)
for param in alg.parameterDefinitions():
self.cmbParameters.addItem(param.description())
def toggleParameters(self, index):
if index == self.FILL_WITH_PARAMETER:

View File

@ -91,7 +91,7 @@ class BatchAlgorithmDialog(AlgorithmDialogBase):
return
col += 1
for out in alg.destinationParameterDefinitions():
if out.hidden:
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
widget = self.mainWidget.tblParameters.cellWidget(row, col)
@ -101,7 +101,7 @@ class BatchAlgorithmDialog(AlgorithmDialogBase):
col += 1
else:
self.bar.pushMessage("", self.tr('Wrong or missing output value: {0} (row {1})').format(
out.description, row + 1),
out.description(), row + 1),
level=QgsMessageBar.WARNING, duration=5)
self.algs = None
return
@ -150,12 +150,12 @@ class BatchAlgorithmDialog(AlgorithmDialogBase):
def loadHTMLResults(self, alg, num):
for out in alg.outputs:
if out.hidden or not out.open:
if out.flags() & QgsProcessingParameterDefinition.FlagHidden or not out.open:
continue
if isinstance(out, OutputHTML):
ProcessingResults.addResult(
'{} [{}]'.format(out.description, num), out.value)
'{} [{}]'.format(out.description(), num), out.value)
def createSummaryTable(self):
createTable = False
@ -174,7 +174,7 @@ class BatchAlgorithmDialog(AlgorithmDialogBase):
f.write('<hr>\n')
for out in alg.outputs:
if isinstance(out, (OutputNumber, OutputString)):
f.write('<p>{}: {}</p>\n'.format(out.description, out.value))
f.write('<p>{}: {}</p>\n'.format(out.description(), out.value))
f.write('<hr>\n')
ProcessingResults.addResult(

View File

@ -35,6 +35,7 @@ from qgis.PyQt.QtWidgets import QTableWidgetItem, QComboBox, QHeaderView, QFileD
from qgis.core import (QgsApplication,
QgsProcessingParameterDefinition)
from qgis.gui import QgsMessageBar
from processing.gui.wrappers import WidgetWrapperFactory
from processing.gui.BatchOutputSelectionPanel import BatchOutputSelectionPanel
@ -94,7 +95,7 @@ class BatchPanel(BASE, WIDGET):
def initWidgets(self):
# If there are advanced parameters — show corresponding button
for param in self.alg.parameters:
if param.isAdvanced:
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
self.btnAdvanced.show()
break
@ -112,15 +113,15 @@ class BatchPanel(BASE, WIDGET):
if param.isDestination():
continue
self.tblParameters.setHorizontalHeaderItem(
column, QTableWidgetItem(param.description))
if param.isAdvanced:
column, QTableWidgetItem(param.description()))
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
self.tblParameters.setColumnHidden(column, True)
column += 1
for out in self.alg.destinationParameterDefinitions():
if not out.hidden:
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
self.tblParameters.setHorizontalHeaderItem(
column, QTableWidgetItem(out.description))
column, QTableWidgetItem(out.description()))
column += 1
# Last column for indicating if output will be added to canvas
@ -157,20 +158,20 @@ class BatchPanel(BASE, WIDGET):
params = alg[self.PARAMETERS]
outputs = alg[self.OUTPUTS]
column = 0
for param in self.alg.parameters:
if param.hidden:
for param in self.alg.parameterDefinitions():
if param.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
if param.name in params:
value = params[param.name].strip('"')
if param.name() in params:
value = params[param.name()].strip('"')
wrapper = self.wrappers[row][column]
wrapper.setValue(value)
column += 1
for out in self.alg.outputs:
if out.hidden:
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
if out.name in outputs:
value = outputs[out.name].strip('"')
if out.name() in outputs:
value = outputs[out.name()].strip('"')
widget = self.tblParameters.cellWidget(row, column)
widget.setValue(value)
column += 1
@ -200,7 +201,7 @@ class BatchPanel(BASE, WIDGET):
algParams[param.name()] = param.getValueAsCommandLineParameter()
col += 1
for out in alg.outputs:
if out.hidden:
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
widget = self.tblParameters.cellWidget(row, col)
text = widget.getValue()
@ -209,7 +210,7 @@ class BatchPanel(BASE, WIDGET):
col += 1
else:
self.parent.bar.pushMessage("", self.tr('Wrong or missing output value: {0} (row {1})').format(
out.description, row + 1),
out.description(), row + 1),
level=QgsMessageBar.WARNING, duration=5)
return
toSave.append({self.PARAMETERS: algParams, self.OUTPUTS: algOutputs})
@ -236,16 +237,16 @@ class BatchPanel(BASE, WIDGET):
row = self.tblParameters.rowCount() - 1
column = 0
for param in self.alg.parameterDefinitions():
if param.hidden or param.isDestination():
if param.flags() & QgsProcessingParameterDefinition.FlagHidden or param.isDestination():
continue
wrapper = param.wrapper(self.parent, row, column)
wrappers[param.name] = wrapper
wrapper = WidgetWrapperFactory.create_wrapper(param, self.parent, row, column)
wrappers[param.name()] = wrapper
self.setCellWrapper(row, column, wrapper)
column += 1
for out in self.alg.destinationParameterDefinitions():
if out.hidden:
if out.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
self.tblParameters.setCellWidget(
@ -275,5 +276,5 @@ class BatchPanel(BASE, WIDGET):
def toggleAdvancedMode(self, checked):
for column, param in enumerate(self.alg.parameters):
if param.isAdvanced:
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
self.tblParameters.setColumnHidden(column, not checked)

View File

@ -32,6 +32,8 @@ from qgis.PyQt import uic
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import QDialog, QHeaderView, QTableWidgetItem
from qgis.core import QgsProcessingParameterDefinition
from processing.gui.RenderingStyles import RenderingStyles
from processing.gui.RenderingStyleFilePanel import RenderingStyleFilePanel
from processing.core.outputs import OutputRaster
@ -61,25 +63,25 @@ class EditRenderingStylesDialog(BASE, WIDGET):
numOutputs = 0
for output in self.alg.outputs:
if isinstance(output, (OutputVector, OutputRaster)):
if not output.hidden:
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
numOutputs += 1
self.tblStyles.setRowCount(numOutputs)
i = 0
for output in self.alg.outputs:
if isinstance(output, (OutputVector, OutputRaster)):
if not output.hidden:
item = QTableWidgetItem(output.description + '<' +
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
item = QTableWidgetItem(output.description() + '<' +
output.__class__.__name__ + '>')
item.setFlags(Qt.ItemIsEnabled)
self.tblStyles.setItem(i, 0, item)
item = RenderingStyleFilePanel()
style = \
RenderingStyles.getStyle(self.alg.id(),
output.name)
output.name())
if style:
item.setText(str(style))
self.valueItems[output.name] = item
self.valueItems[output.name()] = item
self.tblStyles.setCellWidget(i, 1, item)
self.tblStyles.setRowHeight(i, 22)
i += 1

View File

@ -35,6 +35,7 @@ from qgis.PyQt.QtGui import QCursor
from qgis.gui import QgsMessageBar
from qgis.utils import iface
from qgis.core import (QgsProcessingUtils,
QgsProcessingParameterDefinition,
QgsProject)
from processing.gui.RectangleMapTool import RectangleMapTool
from processing.core.ProcessingConfig import ProcessingConfig
@ -52,7 +53,7 @@ class ExtentSelectionPanel(BASE, WIDGET):
self.dialog = dialog
self.param = param
if self.param.optional:
if self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
if hasattr(self.leText, 'setPlaceholderText'):
self.leText.setPlaceholderText(
self.tr('[Leave blank to use min covering extent]'))
@ -89,7 +90,7 @@ class ExtentSelectionPanel(BASE, WIDGET):
selectOnCanvasAction.triggered.connect(self.selectOnCanvas)
useLayerExtentAction.triggered.connect(self.useLayerExtent)
if self.param.optional:
if self.param.flags() & QgsProcessingParameterDefinition.FlagOptional:
useMincoveringExtentAction = QAction(
self.tr('Use min covering extent from input layers'),
self.btnSelect)

View File

@ -72,13 +72,13 @@ def getHtmlFromDescriptionsDict(alg, descriptions):
s = tr('<html><body><h2>Algorithm description</h2>\n')
s += '<p>' + getDescription(ALG_DESC, descriptions) + '</p>\n'
s += tr('<h2>Input parameters</h2>\n')
for param in alg.parameters:
s += '<h3>' + param.description + '</h3>\n'
s += '<p>' + getDescription(param.name, descriptions) + '</p>\n'
for param in alg.parameterDefinitions():
s += '<h3>' + param.description() + '</h3>\n'
s += '<p>' + getDescription(param.name(), descriptions) + '</p>\n'
s += tr('<h2>Outputs</h2>\n')
for out in alg.outputs:
s += '<h3>' + out.description + '</h3>\n'
s += '<p>' + getDescription(out.name, descriptions) + '</p>\n'
s += '<h3>' + out.description() + '</h3>\n'
s += '<p>' + getDescription(out.name(), descriptions) + '</p>\n'
s += '<br>'
s += tr('<p align="right">Algorithm author: {0}</p>').format(getDescription(ALG_CREATOR, descriptions))
s += tr('<p align="right">Help author: {0}</p>').format(getDescription(ALG_HELP_CREATOR, descriptions))

View File

@ -86,13 +86,13 @@ class HelpEditionDialog(BASE, WIDGET):
s = self.tr('<h2>Algorithm description</h2>\n')
s += '<p>' + self.getDescription(self.ALG_DESC) + '</p>\n'
s += self.tr('<h2>Input parameters</h2>\n')
for param in self.alg.parameters:
s += '<h3>' + param.description + '</h3>\n'
s += '<p>' + self.getDescription(param.name) + '</p>\n'
for param in self.alg.parameterDefinitions():
s += '<h3>' + param.description() + '</h3>\n'
s += '<p>' + self.getDescription(param.name()) + '</p>\n'
s += self.tr('<h2>Outputs</h2>\n')
for out in self.alg.outputs:
s += '<h3>' + out.description + '</h3>\n'
s += '<p>' + self.getDescription(out.name) + '</p>\n'
s += '<h3>' + out.description() + '</h3>\n'
s += '<p>' + self.getDescription(out.name()) + '</p>\n'
return s
def fillTree(self):
@ -100,13 +100,13 @@ class HelpEditionDialog(BASE, WIDGET):
self.tree.addTopLevelItem(item)
parametersItem = TreeDescriptionItem(self.tr('Input parameters'), None)
self.tree.addTopLevelItem(parametersItem)
for param in self.alg.parameters:
item = TreeDescriptionItem(param.description, param.name)
for param in self.alg.parameterDefinitions():
item = TreeDescriptionItem(param.description(), param.name())
parametersItem.addChild(item)
outputsItem = TreeDescriptionItem(self.tr('Outputs'), None)
self.tree.addTopLevelItem(outputsItem)
for out in self.alg.outputs:
item = TreeDescriptionItem(out.description, out.name)
item = TreeDescriptionItem(out.description(), out.name())
outputsItem.addChild(item)
item = TreeDescriptionItem(self.tr('Algorithm created by'), self.ALG_CREATOR)
self.tree.addTopLevelItem(item)

View File

@ -85,7 +85,7 @@ class ModellerNumberInputPanel(BASE, WIDGET):
name = "%s_%s" % (value.alg, value.output)
alg = self.modelParametersDialog.model.algs[value.alg]
out = alg.algorithm.getOutputFromName(value.output)
desc = self.tr("Output '{0}' from algorithm '{1}'").format(out.description, alg.description)
desc = self.tr("Output '{0}' from algorithm '{1}'").format(out.description(), alg.description)
variables[name] = desc
values = self.modelParametersDialog.getAvailableValuesOfType(ParameterVector, OutputVector)
values.extend(self.modelParametersDialog.getAvailableValuesOfType(ParameterRaster, OutputRaster))
@ -98,7 +98,7 @@ class ModellerNumberInputPanel(BASE, WIDGET):
name = "%s_%s" % (value.alg, value.output)
alg = self.modelParametersDialog.model.algs[value.alg]
element = alg.algorithm.getOutputFromName(value.output)
desc = self.tr("Output '{0}' from algorithm '{1}'").format(element.description, alg.description)
desc = self.tr("Output '{0}' from algorithm '{1}'").format(element.description(), alg.description)
variables['%s_minx' % name] = self.tr("Minimum X of {0}").format(desc)
variables['%s_miny' % name] = self.tr("Minimum Y of {0}").format(desc)
variables['%s_maxx' % name] = self.tr("Maximum X of {0}").format(desc)
@ -122,8 +122,8 @@ class ModellerNumberInputPanel(BASE, WIDGET):
values = []
for param in self.modelParametersDialog.model.parameters:
if isinstance(param, ParameterNumber):
if "@" + param.name in value:
values.append(ValueFromInput(param.name))
if "@" + param.name() in value:
values.append(ValueFromInput(param.name()))
for alg in list(self.modelParametersDialog.model.algs.values()):
for out in alg.algorithm.outputs:
if isinstance(out, OutputNumber) and "@%s_%s" % (alg.name(), out.name) in value:

View File

@ -57,28 +57,28 @@ def handleAlgorithmResults(alg, context, feedback=None, showResults=True):
i = 0
#for out in alg.outputs:
# feedback.setProgress(100 * i / float(len(alg.outputs)))
# if out.hidden or not out.open:
# if out.flags() & QgsProcessingParameterDefinition.FlagHidden or not out.open:
# continue
# if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
# try:
# layer = QgsProcessingUtils.mapLayerFromString(out.value, context)
# if layer:
# layer.setName(out.description)
# layer.setName(out.description())
# QgsProject.instance().addMapLayer(context.temporaryLayerStore().takeMapLayer(layer))
# else:
# if ProcessingConfig.getSetting(
# ProcessingConfig.USE_FILENAME_AS_LAYER_NAME):
# name = os.path.basename(out.value)
# else:
# name = out.description
# name = out.description()
# dataobjects.load(out.value, name, alg.crs,
# RenderingStyles.getStyle(alg.id(),
# out.name))
# except Exception:
# QgsMessageLog.logMessage("Error loading result layer:\n" + traceback.format_exc(), 'Processing', QgsMessageLog.CRITICAL)
# wrongLayers.append(out.description)
# wrongLayers.append(out.description())
# elif isinstance(out, OutputHTML):
# resultsList.addResult(alg.icon(), out.description, out.value)
# resultsList.addResult(alg.icon(), out.description(), out.value)
# i += 1
i = 0
for l in context.layersToLoadOnCompletion():
@ -87,7 +87,7 @@ def handleAlgorithmResults(alg, context, feedback=None, showResults=True):
layer = QgsProcessingUtils.mapLayerFromString(l, context)
if layer:
#TODO
#layer.setName(out.description)
#layer.setName(out.description())
QgsProject.instance().addMapLayer(context.temporaryLayerStore().takeMapLayer(layer))
else:
if ProcessingConfig.getSetting(
@ -101,7 +101,7 @@ def handleAlgorithmResults(alg, context, feedback=None, showResults=True):
#out.name))
except Exception:
QgsMessageLog.logMessage("Error loading result layer:\n" + traceback.format_exc(), 'Processing', QgsMessageLog.CRITICAL)
#wrongLayers.append(out.description)
#wrongLayers.append(out.description())
wrongLayers.append(l)
for out in alg.outputs:
feedback.setProgress(100 * i / float(len(alg.outputs)))

View File

@ -36,7 +36,8 @@ from osgeo.gdalconst import GA_ReadOnly
from numpy import nan_to_num
from qgis.core import QgsApplication
from qgis.core import (QgsApplication,
QgsProcessingParameterDefinition)
from qgis.PyQt.QtCore import QCoreApplication, QMetaObject
from qgis.PyQt.QtWidgets import QDialog, QVBoxLayout, QTextEdit, QMessageBox
@ -146,13 +147,13 @@ def createTest(text):
i = 0
for param in alg.parameterDefinitions():
if param.hidden or param.isDestination():
if param.flags() & QgsProcessingParameterDefinition.FlagHidden or param.isDestination():
continue
i += 1
token = tokens[i]
# Handle empty parameters that are optionals
if param.optional and token is None:
if param.flags() & QgsProcessingParameterDefinition.FlagOptional and token is None:
continue
if isinstance(param, ParameterVector):
@ -164,7 +165,7 @@ def createTest(text):
if not schema:
p['location'] = '[The source data is not in the testdata directory. Please use data in the processing/tests/testdata folder.]'
params[param.name] = p
params[param.name()] = p
elif isinstance(param, ParameterRaster):
schema, filepath = extractSchemaPath(token)
p = {
@ -174,7 +175,7 @@ def createTest(text):
if not schema:
p['location'] = '[The source data is not in the testdata directory. Please use data in the processing/tests/testdata folder.]'
params[param.name] = p
params[param.name()] = p
elif isinstance(param, ParameterTable):
schema, filepath = extractSchemaPath(token)
p = {
@ -184,7 +185,7 @@ def createTest(text):
if not schema:
p['location'] = '[The source data is not in the testdata directory. Please use data in the processing/tests/testdata folder.]'
params[param.name] = p
params[param.name()] = p
elif isinstance(param, ParameterMultipleInput):
multiparams = token.split(';')
newparam = []
@ -209,7 +210,7 @@ def createTest(text):
if not schema:
p['location'] = '[The source data is not in the testdata directory. Please use data in the processing/tests/testdata folder.]'
params[param.name] = p
params[param.name()] = p
elif isinstance(param, ParameterFile):
schema, filepath = extractSchemaPath(token)
p = {
@ -219,16 +220,16 @@ def createTest(text):
if not schema:
p['location'] = '[The source data is not in the testdata directory. Please use data in the processing/tests/testdata folder.]'
params[param.name] = p
params[param.name()] = p
elif isinstance(param, ParameterString):
params[param.name] = token
params[param.name()] = token
elif isinstance(param, ParameterBoolean):
params[param.name] = token
params[param.name()] = token
elif isinstance(param, ParameterNumber):
if param.isInteger:
params[param.name] = int(token)
params[param.name()] = int(token)
else:
params[param.name] = float(token)
params[param.name()] = float(token)
else:
if token[0] == '"':
token = token[1:]
@ -238,7 +239,7 @@ def createTest(text):
definition['params'] = params
for i, out in enumerate([out for out in alg.destinationParameterDefinitions() if not out.hidden]):
for i, out in enumerate([out for out in alg.destinationParameterDefinitions() if not out.flags() & QgsProcessingParameterDefinition.FlagHiddenn]):
token = tokens[i - len(alg.destinationParameterDefinitions())]
if isinstance(out, (OutputNumber, OutputString)):

View File

@ -35,7 +35,8 @@ import json
from qgis.PyQt.QtCore import QPointF
from operator import attrgetter
from qgis.core import QgsApplication
from qgis.core import (QgsApplication,
QgsProcessingParameterDefinition)
from qgis.gui import QgsMessageBar
from qgis.utils import iface
from processing.core.GeoAlgorithm import GeoAlgorithm
@ -147,9 +148,9 @@ class Algorithm(object):
return str(value)
params.append(_toString(value))
for out in self.algorithm.outputs:
if not out.hidden:
if out.name in self.outputs:
params.append(safeName(self.outputs[out.name].description).lower())
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
if out.name() in self.outputs:
params.append(safeName(self.outputs[out.name()].description()).lower())
else:
params.append(str(None))
s.append("outputs_%s=processing.run('%s', %s)" % (self.name, self.consoleName, ",".join(params)))
@ -258,7 +259,7 @@ class ModelerAlgorithm(GeoAlgorithm):
for out in alg.outputs:
modelOutput = copy.deepcopy(alg.algorithm.getOutputFromName(out))
modelOutput.name = self.getSafeNameForOutput(alg.modeler_name, out)
modelOutput.description = alg.outputs[out].description
modelOutput.description = alg.outputs[out].description()
self.outputs.append(modelOutput)
self.outputs.sort(key=attrgetter("description"))
@ -411,30 +412,30 @@ class ModelerAlgorithm(GeoAlgorithm):
def prepareAlgorithm(self, alg):
algInstance = alg.algorithm
for param in algInstance.parameters:
if not param.hidden:
if param.name in alg.params:
value = self.resolveValue(alg.params[param.name], param)
for param in algInstance.parameterDefinitions():
if not param.flags() & QgsProcessingParameterDefinition.FlagHidden:
if param.name() in alg.params:
value = self.resolveValue(alg.params[param.name()], param)
else:
if iface is not None:
iface.messageBar().pushMessage(self.tr("Warning"),
self.tr("Parameter {0} in algorithm {1} in the model is run with default value! Edit the model to make sure that this is correct.").format(param.name, alg.displayName()),
self.tr("Parameter {0} in algorithm {1} in the model is run with default value! Edit the model to make sure that this is correct.").format(param.name(), alg.displayName()),
QgsMessageBar.WARNING, 4)
value = param.default
value = param.defaultValue()
# We allow unexistent filepaths, since that allows
# algorithms to skip some conversion routines
if not param.setValue(value) and not isinstance(param,
ParameterDataObject):
raise GeoAlgorithmExecutionException(
self.tr('Wrong value {0} for {1} {2}', 'ModelerAlgorithm').format(
value, param.__class__.__name__, param.name
value, param.__class__.__name__, param.name()
)
)
for out in algInstance.outputs:
if not out.hidden:
if out.name in alg.outputs:
name = self.getSafeNameForOutput(alg.modeler_name, out.name)
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
if out.name() in alg.outputs:
name = self.getSafeNameForOutput(alg.modeler_name, out.name())
modelOut = self.getOutputFromName(name)
if modelOut:
out.value = modelOut.value
@ -501,9 +502,9 @@ class ModelerAlgorithm(GeoAlgorithm):
# copy algorithm output value(s) back to model in case the algorithm modified those
for out in alg.algorithm.outputs:
if not out.hidden:
if out.name in alg.outputs:
modelOut = self.getOutputFromName(self.getSafeNameForOutput(alg.modeler_name, out.name))
if not out.flags() & QgsProcessingParameterDefinition.FlagHidden:
if out.name() in alg.outputs:
modelOut = self.getOutputFromName(self.getSafeNameForOutput(alg.modeler_name, out.name()))
if modelOut:
modelOut.value = out.value
@ -636,7 +637,7 @@ class ModelerAlgorithm(GeoAlgorithm):
s.append(param.param.getAsScriptCode())
for alg in list(self.algs.values()):
for name, out in list(alg.outputs.items()):
s.append('##%s=%s' % (safeName(out.description).lower(), alg.getOutputType(name)))
s.append('##%s=%s' % (safeName(out.description()).lower(), alg.getOutputType(name)))
executed = []
toExecute = [alg for alg in list(self.algs.values()) if alg.active]

View File

@ -33,6 +33,7 @@ from qgis.PyQt.QtCore import Qt, QPointF, QRectF
from qgis.PyQt.QtGui import QFont, QFontMetricsF, QPen, QBrush, QColor, QPolygonF, QPicture, QPainter
from qgis.PyQt.QtWidgets import QGraphicsItem, QMessageBox, QMenu
from qgis.PyQt.QtSvg import QSvgRenderer
from qgis.core import QgsProcessingParameterDefinition
from processing.modeler.ModelerAlgorithm import ModelerParameter, Algorithm, ModelerOutput
from processing.modeler.ModelerParameterDefinitionDialog import ModelerParameterDefinitionDialog
from processing.modeler.ModelerParametersDialog import ModelerParametersDialog
@ -278,9 +279,9 @@ class ModelerGraphicItem(QGraphicsItem):
painter.drawText(pt, 'In')
i = 1
if not self.element.paramsFolded:
for param in self.element.algorithm.parameters:
if not param.hidden:
text = self.getAdjustedText(param.description)
for param in self.element.algorithm.parameterDefinitions():
if not param.flags() & QgsProcessingParameterDefinition.FlagHidden:
text = self.getAdjustedText(param.description())
h = -(fm.height() * 1.2) * (i + 1)
h = h - ModelerGraphicItem.BOX_HEIGHT / 2.0 + 5
pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 33, h)
@ -292,7 +293,7 @@ class ModelerGraphicItem(QGraphicsItem):
painter.drawText(pt, 'Out')
if not self.element.outputsFolded:
for i, out in enumerate(self.element.algorithm.outputs):
text = self.getAdjustedText(out.description)
text = self.getAdjustedText(out.description())
h = fm.height() * 1.2 * (i + 2)
h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 33, h)
@ -322,7 +323,7 @@ class ModelerGraphicItem(QGraphicsItem):
def getLinkPointForOutput(self, outputIndex):
if isinstance(self.element, Algorithm) and self.element.algorithm.outputs:
outputIndex = (outputIndex if not self.element.outputsFolded else -1)
text = self.getAdjustedText(self.element.algorithm.outputs[outputIndex].description)
text = self.getAdjustedText(self.element.algorithm.outputs[outputIndex].description())
font = QFont('Verdana', 8)
font.setPixelSize(12)
fm = QFontMetricsF(font)

View File

@ -29,7 +29,8 @@ __revision__ = '$Format:%H$'
import math
from qgis.gui import QgsExpressionLineEdit, QgsProjectionSelectionWidget
from qgis.core import QgsCoordinateReferenceSystem
from qgis.core import (QgsCoordinateReferenceSystem,
QgsProcessingParameterDefinition)
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import (QDialog,
QVBoxLayout,
@ -108,8 +109,8 @@ class ModelerParameterDefinitionDialog(QDialog):
self.nameTextBox = QLineEdit()
self.verticalLayout.addWidget(self.nameTextBox)
if isinstance(self.param, Parameter):
self.nameTextBox.setText(self.param.description)
if isinstance(self.param, QgsProcessingParameterDefinition):
self.nameTextBox.setText(self.param.description())
if self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or \
isinstance(self.param, ParameterBoolean):
@ -126,9 +127,9 @@ class ModelerParameterDefinitionDialog(QDialog):
idx = 0
for param in list(self.alg.inputs.values()):
if isinstance(param.param, (ParameterVector, ParameterTable)):
self.parentCombo.addItem(param.param.description, param.param.name)
self.parentCombo.addItem(param.param.description(), param.param.name())
if self.param is not None:
if self.param.parent == param.param.name:
if self.param.parent == param.param.name():
self.parentCombo.setCurrentIndex(idx)
idx += 1
self.verticalLayout.addWidget(self.parentCombo)
@ -205,7 +206,7 @@ class ModelerParameterDefinitionDialog(QDialog):
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
self.defaultEdit = QgsExpressionLineEdit()
if self.param is not None:
self.defaultEdit.setExpression(self.param.default)
self.defaultEdit.setExpression(self.param.defaultValue())
self.verticalLayout.addWidget(self.defaultEdit)
self.verticalLayout.addWidget(QLabel(self.tr('Parent layer')))
@ -214,9 +215,9 @@ class ModelerParameterDefinitionDialog(QDialog):
idx = 1
for param in list(self.alg.inputs.values()):
if isinstance(param.param, (ParameterVector, ParameterTable)):
self.parentCombo.addItem(param.param.description, param.param.name)
self.parentCombo.addItem(param.param.description(), param.param.name())
if self.param is not None:
if self.param.parent_layer == param.param.name:
if self.param.parent_layer == param.param.name():
self.parentCombo.setCurrentIndex(idx)
idx += 1
self.verticalLayout.addWidget(self.parentCombo)
@ -225,7 +226,7 @@ class ModelerParameterDefinitionDialog(QDialog):
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
self.defaultTextBox = QLineEdit()
if self.param is not None:
self.defaultTextBox.setText(self.param.default)
self.defaultTextBox.setText(self.param.defaultValue())
self.verticalLayout.addWidget(self.defaultTextBox)
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_FILE or
isinstance(self.param, ParameterFile)):
@ -242,14 +243,14 @@ class ModelerParameterDefinitionDialog(QDialog):
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
self.defaultTextBox = QLineEdit()
if self.param is not None:
self.defaultTextBox.setText(self.param.default)
self.defaultTextBox.setText(self.param.defaultValue())
self.verticalLayout.addWidget(self.defaultTextBox)
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
isinstance(self.param, ParameterCrs)):
self.verticalLayout.addWidget(QLabel(self.tr('Default value')))
self.selector = QgsProjectionSelectionWidget()
if self.param is not None:
self.selector.setCrs(QgsCoordinateReferenceSystem(self.param.default))
self.selector.setCrs(QgsCoordinateReferenceSystem(self.param.defaultValue()))
else:
self.selector.setCrs(QgsCoordinateReferenceSystem('EPSG:4326'))
self.verticalLayout.addWidget(self.selector)
@ -259,7 +260,7 @@ class ModelerParameterDefinitionDialog(QDialog):
self.requiredCheck.setText(self.tr('Mandatory'))
self.requiredCheck.setChecked(True)
if self.param is not None:
self.requiredCheck.setChecked(not self.param.optional)
self.requiredCheck.setChecked(not self.param.flags() & QgsProcessingParameterDefinition.FlagOptional)
self.verticalLayout.addWidget(self.requiredCheck)
self.buttonBox = QDialogButtonBox(self)
@ -290,7 +291,7 @@ class ModelerParameterDefinitionDialog(QDialog):
while name in self.alg.inputs:
name = safeName.lower() + str(i)
else:
name = self.param.name
name = self.param.name()
if (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_BOOLEAN or
isinstance(self.param, ParameterBoolean)):
self.param = ParameterBoolean(name, description, self.state.isChecked())
@ -364,7 +365,8 @@ class ModelerParameterDefinitionDialog(QDialog):
elif (self.paramType == ModelerParameterDefinitionDialog.PARAMETER_CRS or
isinstance(self.param, ParameterCrs)):
self.param = ParameterCrs(name, description, default=self.selector.crs().authid())
self.param.optional = not self.requiredCheck.isChecked()
if not self.requiredCheck.isChecked():
self.param.setFlags(self.param.flags() | QgsProcessingParameterDefinition.FlagOptional)
self.close()
def cancelPressed(self):

View File

@ -40,6 +40,7 @@ from qgis.core import (QgsNetworkAccessManager,
from qgis.gui import (QgsMessageBar,
QgsScrollArea)
from processing.gui.wrappers import WidgetWrapperFactory
from processing.gui.wrappers import InvalidParameterValue
from processing.gui.MultipleInputPanel import MultipleInputPanel
from processing.core.outputs import (OutputRaster,
@ -114,7 +115,7 @@ class ModelerParametersDialog(QDialog):
self.verticalLayout.addWidget(line)
for param in self._alg.parameters:
if param.isAdvanced:
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
self.advancedButton = QPushButton()
self.advancedButton.setText(self.tr('Show advanced parameters'))
self.advancedButton.clicked.connect(
@ -124,42 +125,42 @@ class ModelerParametersDialog(QDialog):
advancedButtonHLayout.addStretch()
self.verticalLayout.addLayout(advancedButtonHLayout)
break
for param in self._alg.parameters:
if param.hidden:
for param in self._alg.parameterDefinitions():
if param.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
desc = param.description
desc = param.description()
if isinstance(param, ParameterExtent):
desc += self.tr('(xmin, xmax, ymin, ymax)')
if isinstance(param, ParameterPoint):
desc += self.tr('(x, y)')
if param.optional:
if param.flags() & QgsProcessingParameterDefinition.FlagOptional:
desc += self.tr(' [optional]')
label = QLabel(desc)
self.labels[param.name] = label
self.labels[param.name()] = label
wrapper = param.wrapper(self)
self.wrappers[param.name] = wrapper
wrapper = WidgetWrapperFactory.create_wrapper(param, self)
self.wrappers[param.name()] = wrapper
widget = wrapper.widget
if widget is not None:
self.valueItems[param.name] = widget
self.valueItems[param.name()] = widget
tooltip = param.description()
label.setToolTip(tooltip)
widget.setToolTip(tooltip)
if param.isAdvanced:
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
label.setVisible(self.showAdvanced)
widget.setVisible(self.showAdvanced)
self.widgets[param.name] = widget
self.widgets[param.name()] = widget
self.verticalLayout.addWidget(label)
self.verticalLayout.addWidget(widget)
for output in self._alg.outputs:
if output.hidden:
if output.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
if isinstance(output, (OutputRaster, OutputVector, OutputTable,
OutputHTML, OutputFile, OutputDirectory)):
label = QLabel(output.description + '<' +
label = QLabel(output.description() + '<' +
output.__class__.__name__ + '>')
item = QLineEdit()
if hasattr(item, 'setPlaceholderText'):
@ -249,7 +250,7 @@ class ModelerParametersDialog(QDialog):
else:
self.advancedButton.setText(self.tr('Show advanced parameters'))
for param in self._alg.parameters:
if param.isAdvanced:
if param.flags() & QgsProcessingParameterDefinition.FlagAdvanced:
self.labels[param.name].setVisible(self.showAdvanced)
self.widgets[param.name].setVisible(self.showAdvanced)
@ -289,25 +290,25 @@ class ModelerParametersDialog(QDialog):
def resolveValueDescription(self, value):
if isinstance(value, ValueFromInput):
return self.model.inputs[value.name].param.description
return self.model.inputs[value.name].param.description()
else:
alg = self.model.algs[value.alg]
return self.tr("'{0}' from algorithm '{1}'").format(alg.algorithm.getOutputFromName(value.output).description, alg.description)
return self.tr("'{0}' from algorithm '{1}'").format(alg.algorithm.getOutputFromName(value.output).description(), alg.description)
def setPreviousValues(self):
if self._algName is not None:
alg = self.model.algs[self._algName]
self.descriptionBox.setText(alg.description)
for param in alg.algorithm.parameters:
if param.hidden:
for param in alg.algorithm.parameterDefinitions():
if param.flags() & QgsProcessingParameterDefinition.FlagHidden:
continue
if param.name in alg.params:
value = alg.params[param.name]
if param.name() in alg.params:
value = alg.params[param.name()]
else:
value = param.default
self.wrappers[param.name].setValue(value)
value = param.defaultValue()
self.wrappers[param.name()].setValue(value)
for name, out in list(alg.outputs.items()):
self.valueItems[name].setText(out.description)
self.valueItems[name].setText(out.description())
selected = []
dependencies = self.getAvailableDependencies() # spellok
@ -331,10 +332,10 @@ class ModelerParametersDialog(QDialog):
level=QgsMessageBar.WARNING)
return None
for output in outputs:
if not output.hidden:
name = str(self.valueItems[output.name].text())
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
name = str(self.valueItems[output.name()].text())
if name.strip() != '' and name != ModelerParametersDialog.ENTER_NAME:
alg.outputs[output.name] = ModelerOutput(name)
alg.outputs[output.name()] = ModelerOutput(name)
selectedOptions = self.dependenciesPanel.selectedoptions
availableDependencies = self.getAvailableDependencies() # spellok

View File

@ -28,6 +28,7 @@ __revision__ = '$Format:%H$'
from qgis.PyQt.QtCore import QPointF, Qt
from qgis.PyQt.QtWidgets import QGraphicsItem, QGraphicsScene
from qgis.core import QgsProcessingParameterDefinition
from processing.modeler.ModelerGraphicItem import ModelerGraphicItem
from processing.modeler.ModelerArrowItem import ModelerArrowItem
from processing.modeler.ModelerAlgorithm import ValueFromInput, ValueFromOutput, CompoundValue
@ -102,8 +103,8 @@ class ModelerScene(QGraphicsScene):
# And then the arrows
for alg in list(model.algs.values()):
idx = 0
for parameter in alg.algorithm.parameters:
if not parameter.hidden:
for parameter in alg.algorithm.parameterDefinitions():
if not parameter.flags() & QgsProcessingParameterDefinition.FlagHidden:
if parameter.name in alg.params:
value = alg.params[parameter.name]
else:

View File

@ -75,7 +75,7 @@ def createContext():
context.setFlags(QgsProcessingContext.UseSelectionIfPresent)
invalid_features_method = ProcessingConfig.getSetting(ProcessingConfig.FILTER_INVALID_GEOMETRIES)
if not invalid_features_method:
if invalid_features_method is None:
invalid_features_method = QgsFeatureRequest.GeometryAbortOnInvalid
context.setInvalidGeometryCheck(invalid_features_method)

View File

@ -47,9 +47,9 @@ def algorithmOptions(id):
alg = QgsApplication.processingRegistry().algorithmById(id)
if alg is not None:
opts = ''
for param in alg.parameters:
for param in alg.parameterDefinitions():
if isinstance(param, ParameterSelection):
opts += '{} ({})\n'.format(param.name, param.description)
opts += '{} ({})\n'.format(param.name(), param.description())
for option in enumerate(param.options):
opts += '\t{} - {}\n'.format(option[0], option[1])
print(opts)

View File

@ -26,7 +26,8 @@ __revision__ = '$Format:%H$'
import os
import codecs
from qgis.core import QgsApplication
from qgis.core import (QgsApplication,
QgsProcessingParameterDefinition)
from processing.core.Processing import Processing
from processing.core.parameters import ParameterMultipleInput, ParameterTableField, ParameterVector, ParameterSelection
from processing.tools.system import mkdir
@ -58,14 +59,14 @@ def baseHelpForAlgorithm(alg, folder):
# Algorithm parameters
f.write('Parameters\n')
f.write('----------\n\n')
for p in alg.parameters:
for p in alg.parameterDefinitions():
if isinstance(p, (ParameterMultipleInput, ParameterTableField, ParameterVector)):
f.write('``{}`` [{}: {}]\n'.format(p.description, p.typeName(), p.dataType()))
f.write('``{}`` [{}: {}]\n'.format(p.description(), p.type(), p.dataType()))
else:
f.write('``{}`` [{}]\n'.format(p.description, p.typeName()))
f.write('``{}`` [{}]\n'.format(p.description(), p.type()))
if hasattr(p, 'optional'):
if p.optional:
if p.flags() & QgsProcessingParameterDefinition.FlagOptional:
f.write(' Optional.\n\n')
f.write(' <put parameter description here>\n\n')
@ -76,14 +77,14 @@ def baseHelpForAlgorithm(alg, folder):
f.write(' * {} --- {}\n'.format(count, opt))
f.write('\n')
if hasattr(p, 'default'):
f.write(' Default: *{}*\n\n'.format(p.default if p.default != '' else '(not set)'))
if hasattr(p, 'defaultValue'):
f.write(' Default: *{}*\n\n'.format(p.defaultValue() if p.defaultValue() else '(not set)'))
# Algorithm outputs
f.write('Outputs\n')
f.write('-------\n\n')
for o in alg.outputs:
f.write('``{}`` [{}]\n'.format(o.description, o.typeName()))
f.write('``{}`` [{}]\n'.format(o.description(), o.type()))
f.write(' <put output description here>\n\n')
# Console usage
@ -91,12 +92,12 @@ def baseHelpForAlgorithm(alg, folder):
f.write('-------------\n')
f.write('\n::\n\n')
cmd = " processing.run('{}', ".format(alg.id())
for p in alg.parameters:
cmd += '{}, '.format(p.name.lower().strip())
for p in alg.parameterDefinitions():
cmd += '{}, '.format(p.name().lower().strip())
for o in alg.outputs:
if not o.hidden:
cmd += '{}, '.format(o.name.lower().strip())
if not o.flags() & QgsProcessingParameterDefinition.FlagHidden:
cmd += '{}, '.format(o.name().lower().strip())
cmd = cmd[:-2] + ')\n\n'
f.write(cmd)

View File

@ -23,7 +23,8 @@
#include "qgsvectorlayer.h"
QgsProcessingAlgRunnerTask::QgsProcessingAlgRunnerTask( const QgsProcessingAlgorithm *algorithm, const QVariantMap &parameters, QgsProcessingContext &context )
: mAlgorithm( algorithm )
: QgsTask( tr( "Running %1" ).arg( algorithm->name() ), QgsTask::CanCancel )
, mAlgorithm( algorithm )
, mParameters( parameters )
, mContext( context )
{