mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-19 00:04:52 -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':
|
if tokens[1].lower().strip() == 'group':
|
||||||
self.group = tokens[0]
|
self.group = tokens[0]
|
||||||
return
|
return
|
||||||
if tokens[1].lower().strip().startswith('raster'):
|
|
||||||
param = ParameterRaster(tokens[0], desc, False)
|
if tokens[1].lower().strip().startswith('output'):
|
||||||
elif tokens[1].lower().strip() == 'vector':
|
outToken = tokens[1].strip()[len('output') + 1:]
|
||||||
param = ParameterVector(tokens[0], desc,
|
out = self.processOutputParameterToken(outToken)
|
||||||
[ParameterVector.VECTOR_TYPE_ANY])
|
|
||||||
elif tokens[1].lower().strip() == 'vector point':
|
elif tokens[1].lower().strip().startswith('optional'):
|
||||||
param = ParameterVector(tokens[0], desc,
|
optToken = tokens[1].strip()[len('optional') + 1:]
|
||||||
[ParameterVector.VECTOR_TYPE_POINT])
|
param = self.processInputParameterToken(optToken, tokens[0])
|
||||||
elif tokens[1].lower().strip() == 'vector line':
|
if param:
|
||||||
param = ParameterVector(tokens[0], desc,
|
param.optional = True
|
||||||
[ParameterVector.VECTOR_TYPE_LINE])
|
|
||||||
elif tokens[1].lower().strip() == 'vector polygon':
|
else:
|
||||||
param = ParameterVector(tokens[0], desc,
|
param = self.processInputParameterToken(tokens[1], tokens[0])
|
||||||
[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 param is not None:
|
if param is not None:
|
||||||
self.addParameter(param)
|
self.addParameter(param)
|
||||||
@ -235,6 +178,102 @@ class RAlgorithm(GeoAlgorithm):
|
|||||||
raise WrongScriptException(
|
raise WrongScriptException(
|
||||||
self.tr('Could not load R script: %s.\n Problem with line %s' % (self.descriptionFile, line)))
|
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):
|
def processAlgorithm(self, progress):
|
||||||
if isWindows():
|
if isWindows():
|
||||||
path = RUtils.RFolder()
|
path = RUtils.RFolder()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user