mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[Processing] Manage default value for parameter
To finalize commit 3472ac80d8bdd030090ce81cb686f3cfcbd913cd update processing to well manage default value
This commit is contained in:
parent
2415e37d19
commit
7754f17a0b
@ -299,7 +299,7 @@ class Processing:
|
||||
# fill any missing parameters with default values if allowed
|
||||
for param in alg.parameters:
|
||||
if param.name not in setParams:
|
||||
if not param.setValue(None):
|
||||
if not param.setDefaultValue():
|
||||
print ('Error: Missing parameter value for parameter %s.' % (param.name))
|
||||
QgsMessageLog.logMessage(Processing.tr('Error: Missing parameter value for parameter {0}.').format(param.name), Processing.tr("Processing"))
|
||||
ProcessingLog.addToLog(
|
||||
|
@ -57,10 +57,11 @@ class Parameter:
|
||||
take as input.
|
||||
"""
|
||||
|
||||
def __init__(self, name='', description='', optional=False):
|
||||
def __init__(self, name='', description='', default=None, optional=False):
|
||||
self.name = name
|
||||
self.description = description
|
||||
self.value = None
|
||||
self.default = default
|
||||
self.value = default
|
||||
|
||||
self.isAdvanced = False
|
||||
|
||||
@ -83,9 +84,19 @@ class Parameter:
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
self.value = unicode(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__)
|
||||
|
||||
@ -112,16 +123,15 @@ class Parameter:
|
||||
class ParameterBoolean(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', default=True, optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
self.default = parseBool(default)
|
||||
self.value = None
|
||||
Parameter.__init__(self, name, description, parseBool(default), optional)
|
||||
|
||||
def setValue(self, value):
|
||||
if value is None:
|
||||
if not self.optional:
|
||||
return False
|
||||
self.value = self.default
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
if isinstance(value, basestring):
|
||||
self.value = unicode(value).lower() == unicode(True).lower()
|
||||
else:
|
||||
@ -134,20 +144,18 @@ class ParameterBoolean(Parameter):
|
||||
|
||||
class ParameterCrs(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', default='EPSG:4326', optional=False):
|
||||
def __init__(self, name='', description='', default=None, optional=False):
|
||||
'''The value is a string that uniquely identifies the
|
||||
coordinate reference system. Typically it is the auth id of the CRS
|
||||
(if the authority is EPSG) or proj4 string of the CRS (in case
|
||||
of other authorities or user defined projections).'''
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
self.value = None
|
||||
self.default = default
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
|
||||
def setValue(self, value):
|
||||
if value is None:
|
||||
if not self.optional:
|
||||
return False
|
||||
self.value = self.default
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
# TODO: check it is a valid authid
|
||||
@ -176,11 +184,9 @@ class ParameterExtent(Parameter):
|
||||
|
||||
USE_MIN_COVERING_EXTENT = 'USE_MIN_COVERING_EXTENT'
|
||||
|
||||
def __init__(self, name='', description='', default='0,1,0,1', optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
self.default = default
|
||||
def __init__(self, name='', description='', default=None, optional=False):
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
# The value is a string in the form "xmin, xmax, ymin, ymax"
|
||||
self.value = None
|
||||
|
||||
def setValue(self, text):
|
||||
if text is None:
|
||||
@ -188,6 +194,7 @@ class ParameterExtent(Parameter):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
tokens = text.split(',')
|
||||
if len(tokens) != 4:
|
||||
return False
|
||||
@ -211,8 +218,7 @@ class ParameterExtent(Parameter):
|
||||
class ParameterFile(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', isFolder=False, optional=True, ext=None):
|
||||
Parameter.__init__(self, name, description, parseBool(optional))
|
||||
self.value = None
|
||||
Parameter.__init__(self, name, description, '', parseBool(optional))
|
||||
self.ext = ext
|
||||
self.isFolder = parseBool(isFolder)
|
||||
|
||||
@ -220,13 +226,15 @@ class ParameterFile(Parameter):
|
||||
return '"' + unicode(self.value) + '"'
|
||||
|
||||
def setValue(self, obj):
|
||||
self.value = unicode(obj)
|
||||
if self.value.strip() == '' or self.value is None:
|
||||
if obj is None or obj.strip() == '':
|
||||
if not self.optional:
|
||||
return False
|
||||
self.value = ''
|
||||
if self.ext is not None and self.value != '':
|
||||
return self.value.endswith(self.ext)
|
||||
return True
|
||||
|
||||
if self.ext is not None and obj != '' and not obj.endswith(self.ext):
|
||||
return False
|
||||
self.value = unicode(obj)
|
||||
return True
|
||||
|
||||
def typeName(self):
|
||||
@ -246,13 +254,12 @@ class ParameterFixedTable(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', numRows=3,
|
||||
cols=['value'], fixedNumOfRows=False, optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
Parameter.__init__(self, name, description, None, optional)
|
||||
self.cols = cols
|
||||
if isinstance(cols, basestring):
|
||||
self.cols = self.cols.split(";")
|
||||
self.numRows = int(numRows)
|
||||
self.fixedNumOfRows = parseBool(fixedNumOfRows)
|
||||
self.value = None
|
||||
|
||||
def setValue(self, obj):
|
||||
if obj is None:
|
||||
@ -260,6 +267,7 @@ class ParameterFixedTable(Parameter):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
# TODO: check that it contains a correct number of elements
|
||||
if isinstance(obj, (str, unicode)):
|
||||
self.value = obj
|
||||
@ -298,9 +306,8 @@ class ParameterMultipleInput(ParameterDataObject):
|
||||
TYPE_FILE = 4
|
||||
|
||||
def __init__(self, name='', description='', datatype=-1, optional=False):
|
||||
ParameterDataObject.__init__(self, name, description, optional)
|
||||
ParameterDataObject.__init__(self, name, description, None, optional)
|
||||
self.datatype = int(float(datatype))
|
||||
self.value = None
|
||||
self.exported = None
|
||||
|
||||
def setValue(self, obj):
|
||||
@ -434,14 +441,19 @@ class ParameterMultipleInput(ParameterDataObject):
|
||||
class ParameterNumber(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', minValue=None, maxValue=None,
|
||||
default=0.0, optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
try:
|
||||
self.default = int(unicode(default))
|
||||
self.isInteger = True
|
||||
except:
|
||||
self.default = float(default)
|
||||
default=None, optional=False):
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
|
||||
if default is not None:
|
||||
try:
|
||||
self.default = int(float(default))
|
||||
self.isInteger = True
|
||||
except:
|
||||
self.default = float(default)
|
||||
self.isInteger = False
|
||||
else:
|
||||
self.isInteger = False
|
||||
|
||||
if minValue is not None:
|
||||
self.min = int(float(minValue)) if self.isInteger else float(minValue)
|
||||
else:
|
||||
@ -450,14 +462,15 @@ class ParameterNumber(Parameter):
|
||||
self.max = int(float(maxValue)) if self.isInteger else float(maxValue)
|
||||
else:
|
||||
self.max = None
|
||||
self.value = None
|
||||
self.value = self.default
|
||||
|
||||
def setValue(self, n):
|
||||
if n is None:
|
||||
if not self.optional:
|
||||
return False
|
||||
self.value = self.default
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
try:
|
||||
if float(n) - int(float(n)) == 0:
|
||||
value = int(float(n))
|
||||
@ -480,17 +493,18 @@ class ParameterNumber(Parameter):
|
||||
|
||||
class ParameterRange(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', default='0,1', optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
self.default = default
|
||||
self.value = None
|
||||
def __init__(self, name='', description='', default=None, optional=False):
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
|
||||
values = default.split(',')
|
||||
try:
|
||||
int(values[0])
|
||||
int(values[1])
|
||||
self.isInteger = True
|
||||
except:
|
||||
if default is not None:
|
||||
values = default.split(',')
|
||||
try:
|
||||
int(values[0])
|
||||
int(values[1])
|
||||
self.isInteger = True
|
||||
except:
|
||||
self.isInteger = False
|
||||
else:
|
||||
self.isInteger = False
|
||||
|
||||
def setValue(self, text):
|
||||
@ -499,6 +513,7 @@ class ParameterRange(Parameter):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
tokens = text.split(',')
|
||||
if len(tokens) != 2:
|
||||
return False
|
||||
@ -517,9 +532,8 @@ class ParameterRange(Parameter):
|
||||
class ParameterRaster(ParameterDataObject):
|
||||
|
||||
def __init__(self, name='', description='', optional=False, showSublayersDialog=True):
|
||||
ParameterDataObject.__init__(self, name, description, optional)
|
||||
ParameterDataObject.__init__(self, name, description, None, optional)
|
||||
self.showSublayersDialog = parseBool(showSublayersDialog)
|
||||
self.value = None
|
||||
self.exported = None
|
||||
|
||||
def getSafeExportedLayer(self):
|
||||
@ -557,6 +571,7 @@ class ParameterRaster(ParameterDataObject):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
if isinstance(obj, QgsRasterLayer):
|
||||
self.value = unicode(obj.dataProvider().dataSourceUri())
|
||||
return True
|
||||
@ -578,7 +593,7 @@ class ParameterSelection(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', options=[], default=0, isSource=False,
|
||||
optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
isSource = parseBool(isSource)
|
||||
self.options = options
|
||||
if isSource:
|
||||
@ -594,15 +609,20 @@ class ParameterSelection(Parameter):
|
||||
pass
|
||||
elif isinstance(self.options, basestring):
|
||||
self.options = self.options.split(";")
|
||||
self.value = None
|
||||
self.default = int(default)
|
||||
|
||||
try:
|
||||
self.default = int(default)
|
||||
except:
|
||||
self.default = 0
|
||||
self.value = self.default
|
||||
|
||||
def setValue(self, n):
|
||||
if n is None:
|
||||
if not self.optional:
|
||||
return False
|
||||
self.value = self.default
|
||||
self.value = 0
|
||||
return True
|
||||
|
||||
try:
|
||||
n = int(n)
|
||||
self.value = n
|
||||
@ -618,17 +638,16 @@ class ParameterString(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', default='', multiline=False,
|
||||
optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
self.default = default
|
||||
self.value = None
|
||||
Parameter.__init__(self, name, description, default, optional)
|
||||
self.multiline = parseBool(multiline)
|
||||
|
||||
def setValue(self, obj):
|
||||
if obj is None:
|
||||
if not self.optional:
|
||||
if not self.optional and self.default is None:
|
||||
return False
|
||||
self.value = ''
|
||||
return True
|
||||
|
||||
self.value = unicode(obj).replace(
|
||||
ParameterString.ESCAPED_NEWLINE,
|
||||
ParameterString.NEWLINE
|
||||
@ -647,8 +666,7 @@ class ParameterString(Parameter):
|
||||
class ParameterTable(ParameterDataObject):
|
||||
|
||||
def __init__(self, name='', description='', optional=False):
|
||||
ParameterDataObject.__init__(self, name, description, optional)
|
||||
self.value = None
|
||||
ParameterDataObject.__init__(self, name, description, None, optional)
|
||||
self.exported = None
|
||||
|
||||
def setValue(self, obj):
|
||||
@ -658,6 +676,7 @@ class ParameterTable(ParameterDataObject):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
if isinstance(obj, QgsVectorLayer):
|
||||
source = unicode(obj.source())
|
||||
self.value = source
|
||||
@ -720,9 +739,8 @@ class ParameterTableField(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', parent=None, datatype=-1,
|
||||
optional=False):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
Parameter.__init__(self, name, description, None, optional)
|
||||
self.parent = parent
|
||||
self.value = None
|
||||
self.datatype = int(datatype)
|
||||
|
||||
def getValueAsCommandLineParameter(self):
|
||||
@ -734,10 +752,10 @@ class ParameterTableField(Parameter):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
elif len(value) > 0:
|
||||
self.value = unicode(value)
|
||||
else:
|
||||
return self.optional
|
||||
|
||||
elif len(value) == 0 and not self.optional:
|
||||
return False
|
||||
self.value = unicode(value)
|
||||
return True
|
||||
|
||||
def __str__(self):
|
||||
@ -765,13 +783,12 @@ class ParameterVector(ParameterDataObject):
|
||||
|
||||
def __init__(self, name='', description='', shapetype=[-1],
|
||||
optional=False):
|
||||
ParameterDataObject.__init__(self, name, description, optional)
|
||||
ParameterDataObject.__init__(self, name, description, None, optional)
|
||||
if isinstance(shapetype, int):
|
||||
shapetype = [shapetype]
|
||||
elif isinstance(shapetype, basestring):
|
||||
shapetype = [int(t) for t in shapetype.split(',')]
|
||||
self.shapetype = shapetype
|
||||
self.value = None
|
||||
self.exported = None
|
||||
|
||||
def setValue(self, obj):
|
||||
@ -781,6 +798,7 @@ class ParameterVector(ParameterDataObject):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
|
||||
if isinstance(obj, QgsVectorLayer):
|
||||
self.value = unicode(obj.source())
|
||||
return True
|
||||
@ -857,11 +875,10 @@ class ParameterGeometryPredicate(Parameter):
|
||||
|
||||
def __init__(self, name='', description='', left=None, right=None,
|
||||
optional=False, enabledPredicates=None):
|
||||
Parameter.__init__(self, name, description, optional)
|
||||
Parameter.__init__(self, name, description, [], optional)
|
||||
self.left = left
|
||||
self.right = right
|
||||
self.value = None
|
||||
self.default = []
|
||||
self.enabledPredicates = enabledPredicates
|
||||
if self.enabledPredicates is None:
|
||||
self.enabledPredicates = self.predicates
|
||||
@ -875,8 +892,9 @@ class ParameterGeometryPredicate(Parameter):
|
||||
return False
|
||||
self.value = None
|
||||
return True
|
||||
elif len(value) == 0:
|
||||
return self.optional
|
||||
elif len(value) == 0 and not self.optional:
|
||||
return False
|
||||
|
||||
if isinstance(value, unicode):
|
||||
self.value = value.split(';') # relates to ModelerAlgorithm.resolveValue
|
||||
else:
|
||||
|
Loading…
x
Reference in New Issue
Block a user