mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
[Processing] Add optional capabilities to R scripts
This commit is contained in:
parent
ab28d527d5
commit
fda06c0c45
@ -154,76 +154,19 @@ class RAlgorithm(GeoAlgorithm):
|
||||
if tokens[1].lower().strip() == 'group':
|
||||
self.group = tokens[0]
|
||||
return
|
||||
if tokens[1].lower().strip().startswith('raster'):
|
||||
param = ParameterRaster(tokens[0], desc, False)
|
||||
elif tokens[1].lower().strip() == 'vector':
|
||||
param = ParameterVector(tokens[0], desc,
|
||||
[ParameterVector.VECTOR_TYPE_ANY])
|
||||
elif tokens[1].lower().strip() == 'vector point':
|
||||
param = ParameterVector(tokens[0], desc,
|
||||
[ParameterVector.VECTOR_TYPE_POINT])
|
||||
elif tokens[1].lower().strip() == 'vector line':
|
||||
param = ParameterVector(tokens[0], desc,
|
||||
[ParameterVector.VECTOR_TYPE_LINE])
|
||||
elif tokens[1].lower().strip() == 'vector polygon':
|
||||
param = ParameterVector(tokens[0], desc,
|
||||
[ParameterVector.VECTOR_TYPE_POLYGON])
|
||||
elif tokens[1].lower().strip() == 'table':
|
||||
param = ParameterTable(tokens[0], desc, False)
|
||||
elif tokens[1].lower().strip().startswith('multiple raster'):
|
||||
param = ParameterMultipleInput(tokens[0], desc,
|
||||
ParameterMultipleInput.TYPE_RASTER)
|
||||
param.optional = False
|
||||
elif tokens[1].lower().strip() == 'multiple vector':
|
||||
param = ParameterMultipleInput(tokens[0], desc,
|
||||
ParameterMultipleInput.TYPE_VECTOR_ANY)
|
||||
param.optional = False
|
||||
elif tokens[1].lower().strip().startswith('selection'):
|
||||
options = tokens[1].strip()[len('selection'):].split(';')
|
||||
param = ParameterSelection(tokens[0], desc, options)
|
||||
elif tokens[1].lower().strip().startswith('boolean'):
|
||||
default = tokens[1].strip()[len('boolean') + 1:]
|
||||
param = ParameterBoolean(tokens[0], desc, default)
|
||||
elif tokens[1].lower().strip().startswith('number'):
|
||||
try:
|
||||
default = float(tokens[1].strip()[len('number') + 1:])
|
||||
param = ParameterNumber(tokens[0], desc, default=default)
|
||||
except:
|
||||
raise WrongScriptException(
|
||||
self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
|
||||
elif tokens[1].lower().strip().startswith('field'):
|
||||
field = tokens[1].strip()[len('field') + 1:]
|
||||
found = False
|
||||
for p in self.parameters:
|
||||
if p.name == field:
|
||||
found = True
|
||||
break
|
||||
if found:
|
||||
param = ParameterTableField(tokens[0], tokens[0], field)
|
||||
elif tokens[1].lower().strip() == 'extent':
|
||||
param = ParameterExtent(tokens[0], desc)
|
||||
elif tokens[1].lower().strip() == 'crs':
|
||||
param = ParameterCrs(tokens[0], desc)
|
||||
elif tokens[1].lower().strip() == 'point':
|
||||
param = ParameterPoint(tokens[0], desc)
|
||||
elif tokens[1].lower().strip() == 'file':
|
||||
param = ParameterFile(tokens[0], desc, False)
|
||||
elif tokens[1].lower().strip() == 'folder':
|
||||
param = ParameterFile(tokens[0], desc, True)
|
||||
elif tokens[1].lower().strip().startswith('string'):
|
||||
default = tokens[1].strip()[len('string') + 1:]
|
||||
param = ParameterString(tokens[0], desc, default)
|
||||
elif tokens[1].lower().strip().startswith('longstring'):
|
||||
default = tokens[1].strip()[len('longstring') + 1:]
|
||||
param = ParameterString(tokens[0], desc, default, multiline=True)
|
||||
elif tokens[1].lower().strip().startswith('output raster'):
|
||||
out = OutputRaster()
|
||||
elif tokens[1].lower().strip().startswith('output vector'):
|
||||
out = OutputVector()
|
||||
elif tokens[1].lower().strip().startswith('output table'):
|
||||
out = OutputTable()
|
||||
elif tokens[1].lower().strip().startswith('output file'):
|
||||
out = OutputFile()
|
||||
|
||||
if tokens[1].lower().strip().startswith('output'):
|
||||
outToken = tokens[1].strip()[len('output') + 1:]
|
||||
out = self.processOutputParameterToken(outToken)
|
||||
|
||||
elif tokens[1].lower().strip().startswith('optional'):
|
||||
optToken = tokens[1].strip()[len('optional') + 1:]
|
||||
param = self.processInputParameterToken(optToken, tokens[0])
|
||||
if param:
|
||||
param.optional = True
|
||||
|
||||
else:
|
||||
param = self.processInputParameterToken(tokens[1], tokens[0])
|
||||
|
||||
if param is not None:
|
||||
self.addParameter(param)
|
||||
@ -235,6 +178,102 @@ class RAlgorithm(GeoAlgorithm):
|
||||
raise WrongScriptException(
|
||||
self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
|
||||
|
||||
def processInputParameterToken(self, token, name):
|
||||
param = None
|
||||
|
||||
desc = self.createDescriptiveName(name)
|
||||
|
||||
if token.lower().strip().startswith('raster'):
|
||||
param = ParameterRaster(name, desc, False)
|
||||
elif token.lower().strip() == 'vector':
|
||||
param = ParameterVector(name, desc,
|
||||
[ParameterVector.VECTOR_TYPE_ANY])
|
||||
elif token.lower().strip() == 'vector point':
|
||||
param = ParameterVector(name, desc,
|
||||
[ParameterVector.VECTOR_TYPE_POINT])
|
||||
elif token.lower().strip() == 'vector line':
|
||||
param = ParameterVector(name, desc,
|
||||
[ParameterVector.VECTOR_TYPE_LINE])
|
||||
elif token.lower().strip() == 'vector polygon':
|
||||
param = ParameterVector(name, desc,
|
||||
[ParameterVector.VECTOR_TYPE_POLYGON])
|
||||
elif token.lower().strip() == 'table':
|
||||
param = ParameterTable(name, desc, False)
|
||||
elif token.lower().strip().startswith('multiple raster'):
|
||||
param = ParameterMultipleInput(name, desc,
|
||||
ParameterMultipleInput.TYPE_RASTER)
|
||||
param.optional = False
|
||||
elif token.lower().strip() == 'multiple vector':
|
||||
param = ParameterMultipleInput(name, desc,
|
||||
ParameterMultipleInput.TYPE_VECTOR_ANY)
|
||||
param.optional = False
|
||||
elif token.lower().strip().startswith('selection'):
|
||||
options = token.strip()[len('selection'):].split(';')
|
||||
param = ParameterSelection(name, desc, options)
|
||||
elif token.lower().strip().startswith('boolean'):
|
||||
default = token.strip()[len('boolean') + 1:]
|
||||
if default:
|
||||
param = ParameterBoolean(name, desc, default)
|
||||
else:
|
||||
param = ParameterBoolean(name, desc)
|
||||
elif token.lower().strip().startswith('number'):
|
||||
default = token.strip()[len('number') + 1:]
|
||||
if default:
|
||||
param = ParameterNumber(name, desc, default=default)
|
||||
else:
|
||||
param = ParameterNumber(name, desc)
|
||||
elif token.lower().strip().startswith('field'):
|
||||
field = token.strip()[len('field') + 1:]
|
||||
found = False
|
||||
for p in self.parameters:
|
||||
if p.name == field:
|
||||
found = True
|
||||
break
|
||||
if found:
|
||||
param = ParameterTableField(name, desc, field)
|
||||
elif token.lower().strip() == 'extent':
|
||||
param = ParameterExtent(name, desc)
|
||||
elif token.lower().strip() == 'point':
|
||||
param = ParameterPoint(name, desc)
|
||||
elif token.lower().strip() == 'file':
|
||||
param = ParameterFile(name, desc, False)
|
||||
elif token.lower().strip() == 'folder':
|
||||
param = ParameterFile(name, desc, True)
|
||||
elif token.lower().strip().startswith('string'):
|
||||
default = token.strip()[len('string') + 1:]
|
||||
if default:
|
||||
param = ParameterString(name, desc, default)
|
||||
else:
|
||||
param = ParameterString(name, desc)
|
||||
elif token.lower().strip().startswith('longstring'):
|
||||
default = token.strip()[len('longstring') + 1:]
|
||||
if default:
|
||||
param = ParameterString(name, desc, default, multiline=True)
|
||||
else:
|
||||
param = ParameterString(name, desc, multiline=True)
|
||||
elif token.lower().strip() == 'crs':
|
||||
default = token.strip()[len('crs') + 1:]
|
||||
if default:
|
||||
param = ParameterCrs(name, desc, default)
|
||||
else:
|
||||
param = ParameterCrs(name, desc)
|
||||
|
||||
return param
|
||||
|
||||
def processOutputParameterToken(self, token):
|
||||
out = None
|
||||
|
||||
if token.lower().strip().startswith('raster'):
|
||||
out = OutputRaster()
|
||||
elif token.lower().strip().startswith('vector'):
|
||||
out = OutputVector()
|
||||
elif token.lower().strip().startswith('table'):
|
||||
out = OutputTable()
|
||||
elif token.lower().strip().startswith('file'):
|
||||
out = OutputFile()
|
||||
|
||||
return out
|
||||
|
||||
def processAlgorithm(self, progress):
|
||||
if isWindows():
|
||||
path = RUtils.RFolder()
|
||||
|
Loading…
x
Reference in New Issue
Block a user