diff --git a/python/plugins/processing/algs/gdal/translate.py b/python/plugins/processing/algs/gdal/translate.py index e86ace62046..fb15aa88abb 100644 --- a/python/plugins/processing/algs/gdal/translate.py +++ b/python/plugins/processing/algs/gdal/translate.py @@ -109,7 +109,7 @@ class translate(GdalAlgorithm): outsize = str(self.getParameterValue(self.OUTSIZE)) outsizePerc = str(self.getParameterValue(self.OUTSIZE_PERC)) noData = self.getParameterValue(self.NO_DATA) - expand = self.getParameterFromName(self.EXPAND).options[self.getParameterValue(self.EXPAND)][1] + expand = parameters[self.EXPAND].options[self.getParameterValue(self.EXPAND)][1] projwin = str(self.getParameterValue(self.PROJWIN)) if not projwin: projwin = QgsProcessingUtils.combineLayerExtents([inLayer]) diff --git a/python/plugins/processing/algs/grass7/ext/i.py b/python/plugins/processing/algs/grass7/ext/i.py index cf4cef784c8..a320716b1f7 100644 --- a/python/plugins/processing/algs/grass7/ext/i.py +++ b/python/plugins/processing/algs/grass7/ext/i.py @@ -33,6 +33,7 @@ from processing.core.parameters import getParameterFromString from processing.tools.system import isWindows from ..Grass7Utils import Grass7Utils from os import path +from copy import deepcopy def multipleOutputDir(alg, field, basename=None): @@ -112,58 +113,44 @@ def regroupRasters(alg, parameters, field, groupField, subgroupField=None, extFi :param parameters: """ # List of rasters names + + new_parameters = deepcopy(parameters) + rasters = alg.getParameterFromName(field) rastersList = rasters.value.split(';') - alg.parameters.remove(rasters) + del new_parameters[field] # Insert a i.group command group = getParameterFromString("ParameterString|{}|group of rasters|None|False|False".format(groupField)) - group.value = alg.getTempFilename() - alg.addParameter(group) + new_parameters[group.name()] = alg.getTempFilename() if subgroupField: subgroup = getParameterFromString("ParameterString|{}|subgroup of rasters|None|False|False".format(subgroupField)) - subgroup.value = alg.getTempFilename() - alg.addParameter(subgroup) + new_parameters[subgroup.name()] = alg.getTempFilename() command = 'i.group group={}{} input={}'.format( - group.value, - ' subgroup={}'.format(subgroup.value) if subgroupField else '', + new_parameters[group.name()], + ' subgroup={}'.format(new_parameters[subgroup.name()]) if subgroupField else '', ','.join([alg.exportedLayers[f] for f in rastersList]) ) alg.commands.append(command) # Handle external files - origExtParams = {} if subgroupField and extFile: for ext in list(extFile.keys()): - extFileName = alg.getParameterValue(ext) + extFileName = new_parameters[ext] if extFileName: shortFileName = path.basename(extFileName) destPath = path.join(Grass7Utils.grassMapsetFolder(), 'PERMANENT', - 'group', group.value, - 'subgroup', subgroup.value, + 'group', new_parameters[group.name()], + 'subgroup', new_parameters[subgroup.name()], extFile[ext], shortFileName) copyFile(alg, extFileName, destPath) - origExtParams[ext] = extFileName - alg.setParameterValue(ext, shortFileName) + new_parameters[ext] = shortFileName # modify parameters values - alg.processCommand() - - # Re-add input rasters - alg.addParameter(rasters) - - # replace external files value with original value - for param in list(origExtParams.keys()): - alg.setParameterValue(param, origExtParams[param]) - - # Delete group: - alg.parameters.remove(group) - if subgroupField: - alg.parameters.remove(subgroup) - return group.value, subgroup.value + alg.processCommand(new_parameters) return group.value diff --git a/python/plugins/processing/algs/grass7/ext/r_colors.py b/python/plugins/processing/algs/grass7/ext/r_colors.py index ad73c812a00..377f36b404a 100644 --- a/python/plugins/processing/algs/grass7/ext/r_colors.py +++ b/python/plugins/processing/algs/grass7/ext/r_colors.py @@ -27,6 +27,7 @@ __copyright__ = '(C) 2016, Médéric Ribreux' __revision__ = '$Format:%H$' import os +from copy import deepcopy def checkParameterValuesBeforeExecuting(alg): @@ -74,32 +75,29 @@ def processInputs(alg): def processCommand(alg, parameters): # remove output before processCommand + new_parameters = deepcopy(parameters) + output = alg.getOutputFromName('output_dir') alg.removeOutputFromName('output_dir') color = alg.getParameterFromName('color') - if color.value == 0: - alg.parameters.remove(color) + if new_parameters[color.name()] == 0: + del new_parameters[color.name()] # Handle rules txtRules = alg.getParameterFromName('rules_txt') - if txtRules.value: + if new_parameters[txtRules.name()]: # Creates a temporary txt file tempRulesName = alg.getTempFilename() # Inject rules into temporary txt file with open(tempRulesName, "w") as tempRules: - tempRules.write(txtRules.value) + tempRules.write(new_parameters[txtRules.name()]) # Use temporary file as rules file - alg.setParameterValue('rules', tempRulesName) - alg.parameters.remove(txtRules) + new_parameters['rules'] = tempRulesName + del new_parameters[textRules.name()] - alg.processCommand() - - # re-add the previous output - alg.addOutput(output) - alg.addParameter(color) - alg.addParameter(txtRules) + alg.processCommand(new_parameters) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li.py b/python/plugins/processing/algs/grass7/ext/r_li.py index 5ea8fd148d5..51e00a55d00 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li.py +++ b/python/plugins/processing/algs/grass7/ext/r_li.py @@ -29,6 +29,7 @@ import shutil from processing.tools.system import isWindows, mkdir from processing.core.parameters import getParameterFromString import os +from copy import deepcopy # for MS-Windows users who have MBCS chars in their name: if os.name == 'nt': @@ -83,29 +84,33 @@ def checkMovingWindow(alg, outputTxt=False): return None -def configFile(alg, outputTxt=False): - """ Handle inline configuration """ +def configFile(alg, parameters, outputTxt=False): + """ Handle inline configuration + :param parameters: + """ # Where is the GRASS7 user directory ? + + new_parameters = deepcopy(parameters) + userGrass7Path = rliPath() if not os.path.isdir(userGrass7Path): mkdir(userGrass7Path) if not os.path.isdir(os.path.join(userGrass7Path, 'output')): mkdir(os.path.join(userGrass7Path, 'output')) - origConfigFile = alg.getParameterValue('config') + origConfigFile = new_parameters['config'] # Handle inline configuration - configTxt = alg.getParameterFromName('config_txt') - if configTxt.value: + if new_parameters['config_txt']: # Creates a temporary txt file in user r.li directory tempConfig = alg.getTempFilename() configFilePath = os.path.join(userGrass7Path, tempConfig) # Inject rules into temporary txt file with open(configFilePath, "w") as f: - f.write(configTxt.value) + f.write(new_parameters['config_txt']) # Use temporary file as rules file - alg.setParameterValue('config', os.path.basename(configFilePath)) - alg.parameters.remove(configTxt) + new_parameters['config'] = os.path.basename(configFilePath) + del new_parameters['config_txt'] # If we have a configuration file, we need to copy it into user dir if origConfigFile: @@ -114,26 +119,21 @@ def configFile(alg, outputTxt=False): shutil.copy(origConfigFile, configFilePath) # Change the parameter value - alg.setParameterValue('config', os.path.basename(configFilePath)) + new_parameters['config'] = os.path.basename(configFilePath) origOutput = alg.getOutputFromName('output') - if outputTxt: + if new_parameters['output']: param = getParameterFromString("ParameterString|output|txt output|None|False|True") - param.value = os.path.basename(origOutput.value) - alg.addParameter(param) + new_parameters[param.name()] = origOutput.value alg.removeOutputFromName('output') - alg.processCommand() + alg.processCommand(new_parameters) # Remove Config file: removeConfigFile(alg) # re-add configTxt - alg.addParameter(configTxt) - alg.setParameterValue('config', origConfigFile) if outputTxt: - for param in [f for f in alg.parameters if f.name == 'output']: - alg.parameters.remove(param) alg.addOutput(origOutput) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_cwed.py b/python/plugins/processing/algs/grass7/ext/r_li_cwed.py index be7a3a3c4f1..44b01a061a8 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_cwed.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_cwed.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_cwed_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_cwed_ascii.py index ce3111ea298..38d9230c437 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_cwed_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_cwed_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_dominance.py b/python/plugins/processing/algs/grass7/ext/r_li_dominance.py index 288b435d783..89a511d07f2 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_dominance.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_dominance.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_dominance_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_dominance_ascii.py index 4d1a7b2a451..224e61a1881 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_dominance_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_dominance_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_edgedensity.py b/python/plugins/processing/algs/grass7/ext/r_li_edgedensity.py index 1760fab2947..1fb4e8f82af 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_edgedensity.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_edgedensity.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_edgedensity_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_edgedensity_ascii.py index 1a06254e0de..4517b6df50b 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_edgedensity_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_edgedensity_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_mpa.py b/python/plugins/processing/algs/grass7/ext/r_li_mpa.py index 12fcadee99a..f3c0ebd6422 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_mpa.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_mpa.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_mpa_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_mpa_ascii.py index a82f8bad431..afffe6e6981 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_mpa_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_mpa_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_mps.py b/python/plugins/processing/algs/grass7/ext/r_li_mps.py index 5d93a3f974e..c79632deec9 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_mps.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_mps.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_mps_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_mps_ascii.py index 5a6790b937e..34bf9e74fc1 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_mps_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_mps_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_orig.py b/python/plugins/processing/algs/grass7/ext/r_li_orig.py index 31918ae2350..9995eecd999 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_orig.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_orig.py @@ -28,6 +28,7 @@ __revision__ = '$Format:%H$' import shutil from processing.tools.system import isWindows, userFolder, mkdir from os import path +from copy import deepcopy def rliPath(): @@ -73,26 +74,29 @@ def checkMovingWindow(alg): return None -def configFile(alg, outputTxt=False): - """ Handle inline configuration """ +def configFile(alg, parameters, outputTxt=False): + """ Handle inline configuration + :param parameters: + """ + new_parameters = deepcopy(parameters) + # Where is the GRASS7 user directory ? userGrass7Path = rliPath() mkdir(userGrass7Path) - origConfigFile = alg.getParameterValue('config') + origConfigFile = new_parameters['config'] # Handle inline configuration - configTxt = alg.getParameterFromName('config_txt') - if configTxt.value: + if new_parameters['config_txt']: # Creates a temporary txt file in user r.li directory tempConfig = alg.getTempFilename() configFilePath = path.join(userGrass7Path, tempConfig) # Inject rules into temporary txt file with open(configFilePath, "w") as f: - f.write(configTxt.value) + f.write(new_parameters['config_txt']) # Use temporary file as rules file - alg.setParameterValue('config', configFilePath) - alg.parameters.remove(configTxt) + new_parameters['config'] = configFilePath + del new_parameters['config_txt'] # If we have a configuration file, we need to copy it into user dir if origConfigFile: @@ -101,21 +105,17 @@ def configFile(alg, outputTxt=False): shutil.copy(origConfigFile, configFilePath) # Change the parameter value - alg.setParameterValue('config', configFilePath) + new_parameters['config'] = configFilePath if outputTxt: origOutput = alg.getOutputValue('output') alg.setOutputValue('output', path.basename(origOutput)) - alg.processCommand() + alg.processCommand(new_parameters) # Remove Config file: removeConfigFile(alg) - # re-add configTxt - alg.addParameter(configTxt) - alg.setParameterValue('config', origConfigFile) - def moveOutputTxtFile(alg): # Find output file name: diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padcv.py b/python/plugins/processing/algs/grass7/ext/r_li_padcv.py index 35d914248cc..65a351db319 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padcv.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padcv.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padcv_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_padcv_ascii.py index 93ae202cb1e..1ca1547fb2e 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padcv_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padcv_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padrange.py b/python/plugins/processing/algs/grass7/ext/r_li_padrange.py index a16d0acdf0a..942dce3615b 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padrange.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padrange.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padrange_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_padrange_ascii.py index e011219fbf6..4d37a2af1d8 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padrange_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padrange_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padsd.py b/python/plugins/processing/algs/grass7/ext/r_li_padsd.py index 59e3164d3c8..5afe277f52a 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padsd.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padsd.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_padsd_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_padsd_ascii.py index 891dc221edd..99a7f78886c 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_padsd_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_padsd_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_patchdensity.py b/python/plugins/processing/algs/grass7/ext/r_li_patchdensity.py index 78a02ccf363..72f69fe6fcf 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_patchdensity.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_patchdensity.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_patchnum.py b/python/plugins/processing/algs/grass7/ext/r_li_patchnum.py index 94ee8b10467..759e5c0aa24 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_patchnum.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_patchnum.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_patchnum_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_patchnum_ascii.py index fea7e507194..361e2144c5f 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_patchnum_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_patchnum_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_pielou.py b/python/plugins/processing/algs/grass7/ext/r_li_pielou.py index 458d6eecdbb..28ef305b0ea 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_pielou.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_pielou.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_pielou_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_pielou_ascii.py index b43a27e8b67..6a0cede4b9b 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_pielou_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_pielou_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_renyi.py b/python/plugins/processing/algs/grass7/ext/r_li_renyi.py index 15696a4ba20..57b5112ac9c 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_renyi.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_renyi.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_renyi_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_renyi_ascii.py index cd011448e59..e9b190bebc4 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_renyi_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_renyi_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_richness.py b/python/plugins/processing/algs/grass7/ext/r_li_richness.py index 392d3e1cbd4..9f03b4408a7 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_richness.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_richness.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_richness_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_richness_ascii.py index c0cffd16300..1368520259a 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_richness_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_richness_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_shannon.py b/python/plugins/processing/algs/grass7/ext/r_li_shannon.py index a8e450bf251..a83dc6016af 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_shannon.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_shannon.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_shannon_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_shannon_ascii.py index 047940644ae..14eee682f3c 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_shannon_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_shannon_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_shape.py b/python/plugins/processing/algs/grass7/ext/r_li_shape.py index 2a4fc580f52..daf7eef50fe 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_shape.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_shape.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_shape_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_shape_ascii.py index 733835fb297..1841b10d12c 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_shape_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_shape_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/r_li_simpson.py b/python/plugins/processing/algs/grass7/ext/r_li_simpson.py index eae2abbe665..50f2aa31c7d 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_simpson.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_simpson.py @@ -34,4 +34,4 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg) + configFile(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/r_li_simpson_ascii.py b/python/plugins/processing/algs/grass7/ext/r_li_simpson_ascii.py index 1956303a3db..0e7d8cd8f89 100644 --- a/python/plugins/processing/algs/grass7/ext/r_li_simpson_ascii.py +++ b/python/plugins/processing/algs/grass7/ext/r_li_simpson_ascii.py @@ -34,7 +34,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - configFile(alg, True) + configFile(alg, parameters, True) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/v_net.py b/python/plugins/processing/algs/grass7/ext/v_net.py index 48c4b341016..177dfe86215 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net.py +++ b/python/plugins/processing/algs/grass7/ext/v_net.py @@ -30,31 +30,31 @@ __copyright__ = '(C) 2015, Médéric Ribreux' __revision__ = '$Format:%H$' import os +from copy import deepcopy -def incorporatePoints(alg, pointLayerName=u'points', networkLayerName=u'input'): +def incorporatePoints(alg, parameters, pointLayerName=u'points', networkLayerName=u'input'): """ incorporate points with lines to form a GRASS network """ - paramsToDelete = [] + new_parameters = deepcopy(parameters) # Create an intermediate GRASS layer which is the combination of network + centers intLayer = alg.getTempFilename() # Grab the point layer and delete this parameter (not used by v.net.alloc) - pointLayer = alg.getParameterValue(pointLayerName) + pointLayer = new_parameters[pointLayerName] if pointLayer: pointLayer = alg.exportedLayers[pointLayer] - paramsToDelete.append(alg.getParameterFromName(u'points')) + new_parameters['points'] = pointLayer # Grab the network layer and tell to v.net.alloc to use the temp layer instead - lineLayer = alg.getParameterValue(networkLayerName) + lineLayer = new_parameters[networkLayerName] if lineLayer: lineLayer = alg.exportedLayers[lineLayer] - alg.setParameterValue(networkLayerName, intLayer) + new_parameters[networkLayerName] = lineLayer - threshold = alg.getParameterValue(u'threshold') - paramsToDelete.append(alg.getParameterFromName(u'threshold')) + threshold = parameters['threshold'] # Create the v.net connect command for point layer integration command = u"v.net -s input={} points={} out={} op=connect threshold={}".format( @@ -65,15 +65,7 @@ def incorporatePoints(alg, pointLayerName=u'points', networkLayerName=u'input'): command = u"v.db.connect -o map={} table={} layer=2".format(intLayer, pointLayer) alg.commands.append(command) - # Delete some unnecessary parameters - for param in paramsToDelete: - alg.parameters.remove(param) - - alg.processCommand() - - # Bring back the parameters: - for param in paramsToDelete: - alg.parameters.append(param) + alg.processCommand(new_parameters) def variableOutput(alg, params, nocats=True): diff --git a/python/plugins/processing/algs/grass7/ext/v_net_alloc.py b/python/plugins/processing/algs/grass7/ext/v_net_alloc.py index 201de8bbb43..c1d2d1c0fc2 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_alloc.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_alloc.py @@ -30,7 +30,7 @@ from .v_net import incorporatePoints, variableOutput def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/v_net_allpairs.py b/python/plugins/processing/algs/grass7/ext/v_net_allpairs.py index c4ae9860da7..a66e636943e 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_allpairs.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_allpairs.py @@ -30,4 +30,4 @@ from .v_net import incorporatePoints def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/v_net_connectivity.py b/python/plugins/processing/algs/grass7/ext/v_net_connectivity.py index f54f43c916e..5a947046ae8 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_connectivity.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_connectivity.py @@ -44,7 +44,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/v_net_distance.py b/python/plugins/processing/algs/grass7/ext/v_net_distance.py index a4b57677deb..457ac0f9c17 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_distance.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_distance.py @@ -27,6 +27,7 @@ __revision__ = '$Format:%H$' from processing.core.parameters import getParameterFromString +from copy import deepcopy def processCommand(alg, parameters): @@ -36,12 +37,12 @@ def processCommand(alg, parameters): * Delete the threshold parameter. * If where statement, connect to the db """ - paramsToDelete = [] + new_parameters = deepcopy(parameters) # Grab the threshold value for our v.net connect command threshold = alg.getParameterValue(u'threshold') if threshold: - paramsToDelete.append(alg.getParameterFromName(u'threshold')) + del new_parameters['threshold'] # Grab the network layer and tell to v.net.alloc to use the temp layer instead line_layer = alg.getParameterValue(u'input') @@ -57,7 +58,7 @@ def processCommand(alg, parameters): point_layer = alg.getParameterValue(layer + u'_points') if point_layer: point_layer = alg.exportedLayers[point_layer] - paramsToDelete.append(alg.getParameterFromName(layer + u'_points')) + del new_parameters[layer + u'_points'] # Create the v.net connect command for point layer integration command = u"v.net -s input={} points={} out={} op=connect threshold={} arc_layer=1 node_layer={}".format(line_layer, point_layer, intLayer, threshold, i + 2) @@ -69,24 +70,11 @@ def processCommand(alg, parameters): if not parameter: parameter = getParameterFromString(u'ParameterNumber|{0}_layer|{0} layer number|1|3|2|False'.format(layer)) alg.addParameter(parameter) - parameter.setValue(i + 2) + new_parameters[parameter.name()] = i + 2 # Make the connection with attribute table command = u"v.db.connect -o map={} table={} layer={}".format(line_layer, point_layer, i + 2) alg.commands.append(command) - alg.setParameterValue(u'input', line_layer) - - # Delete some unnecessary parameters - for param in paramsToDelete: - alg.parameters.remove(param) - - alg.processCommand(parameters, context) - - # Bring back the parameters: - for param in paramsToDelete: - alg.parameters.append(param) - - # Delete from_layer and to_layer - for word in [u'from', u'to']: - alg.parameters.remove(alg.getParameterFromName(u'{}_layer'.format(word))) + new_parameters['input'] = line_layer + alg.processCommand(new_parameters, context) diff --git a/python/plugins/processing/algs/grass7/ext/v_net_flow.py b/python/plugins/processing/algs/grass7/ext/v_net_flow.py index 69e176b6d49..fa34a1ff4e5 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_flow.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_flow.py @@ -44,7 +44,7 @@ def checkParameterValuesBeforeExecuting(alg): def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) def processOutputs(alg): diff --git a/python/plugins/processing/algs/grass7/ext/v_net_iso.py b/python/plugins/processing/algs/grass7/ext/v_net_iso.py index 1f04a6bdd96..974fda51587 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_iso.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_iso.py @@ -29,4 +29,4 @@ from .v_net import incorporatePoints def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/v_net_path.py b/python/plugins/processing/algs/grass7/ext/v_net_path.py index 09d34533e5d..9c5286274c3 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_path.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_path.py @@ -29,4 +29,4 @@ from .v_net import incorporatePoints def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) diff --git a/python/plugins/processing/algs/grass7/ext/v_net_salesman.py b/python/plugins/processing/algs/grass7/ext/v_net_salesman.py index dd32b7e9cfc..720626bae64 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_salesman.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_salesman.py @@ -27,10 +27,12 @@ __revision__ = '$Format:%H$' from processing.core.parameters import getParameterFromString from .v_net import incorporatePoints +from copy import deepcopy def processCommand(alg, parameters): # We temporary remove the output 'sequence' + new_parameters = deepcopy(parameters) sequence = alg.getOutputFromName(u'sequence') sequenceFile = alg.getOutputValue(u'sequence') alg.exportedLayers[sequence.value] = sequence.name + alg.uniqueSuffix @@ -38,12 +40,10 @@ def processCommand(alg, parameters): # We create a new parameter with the same name param = getParameterFromString(u"ParameterString|sequence|sequence|None|False|False") - param.setValue(sequenceFile) - alg.addParameter(param) + new_parameters[param.name()] = sequenceFile # Let's do the incorporation and command generation - incorporatePoints(alg) + incorporatePoints(alg, new_parameters) # then we delete the input parameter and add the old output - alg.parameters.remove(param) alg.addOutput(sequence) diff --git a/python/plugins/processing/algs/grass7/ext/v_net_steiner.py b/python/plugins/processing/algs/grass7/ext/v_net_steiner.py index f92b9f4d476..2d90b72dec4 100644 --- a/python/plugins/processing/algs/grass7/ext/v_net_steiner.py +++ b/python/plugins/processing/algs/grass7/ext/v_net_steiner.py @@ -29,4 +29,4 @@ from .v_net import incorporatePoints def processCommand(alg, parameters): - incorporatePoints(alg) + incorporatePoints(alg, parameters) diff --git a/python/plugins/processing/algs/saga/SagaAlgorithm.py b/python/plugins/processing/algs/saga/SagaAlgorithm.py index 5b1a30ec56f..a05bd7ac624 100644 --- a/python/plugins/processing/algs/saga/SagaAlgorithm.py +++ b/python/plugins/processing/algs/saga/SagaAlgorithm.py @@ -145,38 +145,38 @@ class SagaAlgorithm(GeoAlgorithm): # 1: Export rasters to sgrd and vectors to shp # Tables must be in dbf format. We check that. - for param in self.parameters: + for param in self.parameterDefinitions(): if isinstance(param, ParameterRaster): - if param.value is None: + if param.name() not in parameters or parameters[param.name()] is None: continue - if param.value.endswith('sdat'): - param.value = param.value[:-4] + "sgrd" - elif not param.value.endswith('sgrd'): - exportCommand = self.exportRasterLayer(param.value) + if parameters[param.name()].endswith('sdat'): + parameters[param.name()] = parameters[param.name()][:-4] + "sgrd" + elif not parameters[param.name()].endswith('sgrd'): + exportCommand = self.exportRasterLayer(parameters[param.name()]) if exportCommand is not None: commands.append(exportCommand) if isinstance(param, ParameterVector): - if param.value is None: + if param.name() not in parameters or parameters[param.name()] is None: continue - layer = QgsProcessingUtils.mapLayerFromString(param.value, context, False) + layer = QgsProcessingUtils.mapLayerFromString(parameters[param.name()], context, False) if layer: filename = dataobjects.exportVectorLayer(layer) self.exportedLayers[param.value] = filename - elif not param.value.endswith('shp'): + elif not parameteres[param.name()].endswith('shp'): raise GeoAlgorithmExecutionException( self.tr('Unsupported file format')) if isinstance(param, ParameterTable): - if param.value is None: + if param.name() not in parameters or parameters[param.name()] is None: continue - table = QgsProcessingUtils.mapLayerFromString(param.value, context, False) + table = QgsProcessingUtils.mapLayerFromString(parameters[param.name()], context, False) if table: filename = dataobjects.exportTable(table) - self.exportedLayers[param.value] = filename - elif not param.value.endswith('shp'): + self.exportedLayers[parameters[param.name()]] = filename + elif not parameters[param.name()].endswith('shp'): raise GeoAlgorithmExecutionException( self.tr('Unsupported file format')) if isinstance(param, ParameterMultipleInput): - if param.value is None: + if param.name() not in parameters or parameters[param.name()] is None: continue layers = param.value.split(';') if layers is None or len(layers) == 0: @@ -212,23 +212,23 @@ class SagaAlgorithm(GeoAlgorithm): command = self.undecoratedGroup + ' "' + self.cmdname + '"' command += ' ' + ' '.join(self.hardcodedStrings) - for param in self.parameters: - if param.value is None: + for param in self.parameterDefinitions(): + if not param.name() in parameters or parameters[param.name()] is None: continue if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable)): - value = param.value + value = parameters[param.name()] if value in list(self.exportedLayers.keys()): command += ' -' + param.name() + ' "' \ + self.exportedLayers[value] + '"' else: command += ' -' + param.name() + ' "' + value + '"' elif isinstance(param, ParameterMultipleInput): - s = param.value + s = parameters[param.name()] for layer in list(self.exportedLayers.keys()): s = s.replace(layer, self.exportedLayers[layer]) command += ' -' + param.name() + ' "' + s + '"' elif isinstance(param, ParameterBoolean): - if param.value: + if parameters[param.name()]: command += ' -' + param.name().strip() + " true" else: command += ' -' + param.name().strip() + " false" @@ -236,7 +236,7 @@ class SagaAlgorithm(GeoAlgorithm): tempTableFile = getTempFilename('txt') with open(tempTableFile, 'w') as f: f.write('\t'.join([col for col in param.cols]) + '\n') - values = param.value.split(',') + values = parameters[param.name()].split(',') for i in range(0, len(values), 3): s = values[i] + '\t' + values[i + 1] + '\t' + values[i + 2] + '\n' f.write(s) @@ -244,9 +244,9 @@ class SagaAlgorithm(GeoAlgorithm): elif isinstance(param, ParameterExtent): # 'We have to substract/add half cell size, since SAGA is # center based, not corner based - halfcell = self.getOutputCellsize() / 2 + halfcell = self.getOutputCellsize(parameters) / 2 offset = [halfcell, -halfcell, halfcell, -halfcell] - values = param.value.split(',') + values = parameters[param.name()].split(',') for i in range(4): command += ' -' + self.extentParamNames[i] + ' ' \ + str(float(values[i]) + offset[i]) @@ -310,15 +310,16 @@ class SagaAlgorithm(GeoAlgorithm): else: return commands - def getOutputCellsize(self): + def getOutputCellsize(self, parameters): """Tries to guess the cell size of the output, searching for a parameter with an appropriate name for it. + :param parameters: """ cellsize = 0 - for param in self.parameters: - if param.value is not None and param.name == 'USER_SIZE': - cellsize = float(param.value) + for param in self.parameterDefinitions(): + if param.name() in parameters and param.name() == 'USER_SIZE': + cellsize = float(parameters[param.name()]) break return cellsize diff --git a/python/plugins/processing/core/GeoAlgorithm.py b/python/plugins/processing/core/GeoAlgorithm.py index d35ce04bbb3..4e89003af2e 100755 --- a/python/plugins/processing/core/GeoAlgorithm.py +++ b/python/plugins/processing/core/GeoAlgorithm.py @@ -55,9 +55,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm): def __init__(self): super().__init__() - # Parameters needed by the algorithm - self.parameters = list() - # Outputs generated by the algorithm self.outputs = list() @@ -241,7 +238,7 @@ class GeoAlgorithm(QgsProcessingAlgorithm): def setOutputCRS(self): context = dataobjects.createContext() layers = QgsProcessingUtils.compatibleLayers(QgsProject.instance()) - for param in self.parameters: + for param in self.parameterDefinitions(): if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)): if param.value: if isinstance(param, ParameterMultipleInput): @@ -265,23 +262,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm): except: pass - def resolveDataObjects(self): - layers = QgsProcessingUtils.compatibleLayers(QgsProject.instance()) - for param in self.parameters: - if isinstance(param, (ParameterRaster, ParameterVector, ParameterTable, - ParameterMultipleInput)): - if param.value: - if isinstance(param, ParameterMultipleInput): - inputlayers = param.value.split(';') - else: - inputlayers = [param.value] - for i, inputlayer in enumerate(inputlayers): - for layer in layers: - if layer.name() == inputlayer: - inputlayers[i] = layer.source() - break - param.setValue(";".join(inputlayers)) - def checkInputCRS(self, context=None): """It checks that all input layers use the same CRS. If so, returns True. False otherwise. @@ -289,7 +269,7 @@ class GeoAlgorithm(QgsProcessingAlgorithm): if context is None: context = dataobjects.createContext() crsList = [] - for param in self.parameters: + for param in self.parameterDefinitions(): if isinstance(param, (ParameterRaster, ParameterVector, ParameterMultipleInput)): if param.value: if isinstance(param, ParameterMultipleInput): @@ -312,11 +292,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm): if isinstance(param, Parameter): self.parameters.append(param) - def setParameterValue(self, paramName, value): - for param in self.parameters: - if param.name == paramName: - return param.setValue(value) - def setOutputValue(self, outputName, value): for out in self.outputs: if out.name == outputName: @@ -337,16 +312,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm): d[out.name] = out.value return d - def __str__(self): - s = 'ALGORITHM: ' + self.name() + '\n' - for param in self.parameters: - s += '\t' + str(param) + '\n' - for out in self.outputs: - if not out.flags() & QgsProcessingParameterDefinition.FlagHidden: - s += '\t' + str(out) + '\n' - s += '\n' - return s - def removeOutputFromName(self, name): for out in self.outputs: if out.name == name: @@ -357,11 +322,6 @@ class GeoAlgorithm(QgsProcessingAlgorithm): if out.name == name: return out - def getParameterFromName(self, name): - for param in self.parameters: - if param.name == name: - return param - def getParameterValue(self, name): for param in self.parameters: if param.name == name: @@ -383,7 +343,7 @@ class GeoAlgorithm(QgsProcessingAlgorithm): """ s = 'processing.run("' + self.id() + '",' - for param in self.parameters: + for param in self.parameterDefinitions(): s += param.getValueAsCommandLineParameter() + ',' for out in self.outputs: if not out.flags() & QgsProcessingParameterDefinition.FlagHidden: diff --git a/python/plugins/processing/core/parameters.py b/python/plugins/processing/core/parameters.py index 9d5e81ff130..93e3cf3b73a 100644 --- a/python/plugins/processing/core/parameters.py +++ b/python/plugins/processing/core/parameters.py @@ -83,22 +83,6 @@ class Parameter(object): metadata={}): self.value = default - def setValue(self, obj): - """ - Sets the value of the parameter. - - Returns true if the value passed is correct for the type - of parameter. - """ - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - self.value = str(obj) - return True - def __str__(self): return u'{} <{}>'.format(self.name(), self.__class__.__name__) @@ -123,26 +107,9 @@ class Parameter(object): class ParameterBoolean(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.BooleanWidgetWrapper' - } - def __init__(self, name='', description='', default=None, optional=False, metadata={}): Parameter.__init__(self, name, description, parseBool(default), optional, metadata) - def setValue(self, value): - if value is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(value, str): - self.value = str(value).lower() == str(True).lower() - else: - self.value = bool(value) - return True - def getAsScriptCode(self): param_type = '' if self.flags() & QgsProcessingParameterDefinition.FlagOptional: @@ -169,10 +136,6 @@ class ParameterBoolean(Parameter): class ParameterCrs(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.CrsWidgetWrapper' - } - def __init__(self, name='', description='', default=None, optional=False, metadata={}): '''The value is a string that uniquely identifies the coordinate reference system. Typically it is the auth id of the CRS @@ -182,35 +145,6 @@ class ParameterCrs(Parameter): if self.value == 'ProjectCrs': self.value = QgsProject.instance().crs().authid() - def setValue(self, value): - context = dataobjects.createContext() - if not bool(value): - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(value, QgsCoordinateReferenceSystem): - self.value = value.authid() - return True - if isinstance(value, QgsMapLayer): - self.value = value.crs().authid() - return True - try: - layer = QgsProcessingUtils.mapLayerFromString(value, context) - if layer is not None: - self.value = layer.crs().authid() - return True - except: - pass - if value == 'ProjectCrs': - self.value = QgsProject.instance().crs().authid() - return True - - # TODO: check it is a valid authid - self.value = value - return True - def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' @@ -248,10 +182,6 @@ class ParameterDataObject(Parameter): class ParameterExtent(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.ExtentWidgetWrapper' - } - USE_MIN_COVERING_EXTENT = 'USE_MIN_COVERING_EXTENT' def __init__(self, name='', description='', default=None, optional=True): @@ -259,43 +189,6 @@ class ParameterExtent(Parameter): # The value is a string in the form "xmin, xmax, ymin, ymax" self.skip_crs_check = False - def setValue(self, value): - context = dataobjects.createContext() - if not value: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(value, QgsMapLayer): - rect = value.extent() - self.value = '{},{},{},{}'.format( - rect.xMinimum(), rect.xMaximum(), rect.yMinimum(), rect.yMaximum()) - return True - - try: - layer = QgsProcessingUtils.mapLayerFromString(value, context) - if layer is not None: - rect = layer.extent() - self.value = '{},{},{},{}'.format( - rect.xMinimum(), rect.xMaximum(), rect.yMinimum(), rect.yMaximum()) - return True - except: - pass - - tokens = str(value).split(',') - if len(tokens) != 4: - return False - try: - float(tokens[0]) - float(tokens[1]) - float(tokens[2]) - float(tokens[3]) - self.value = value - return True - except: - return False - def getValueAsCommandLineParameter(self): if self.value is not None: return '"' + str(self.value) + '"' @@ -320,32 +213,10 @@ class ParameterExtent(Parameter): class ParameterPoint(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.PointWidgetWrapper' - } - def __init__(self, name='', description='', default=None, optional=False): Parameter.__init__(self, name, description, default, optional) # The value is a string in the form "x, y" - def setValue(self, text): - if text is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - tokens = str(text).split(',') - if len(tokens) != 2: - return False - try: - float(tokens[0]) - float(tokens[1]) - self.value = text - return True - except: - return False - def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' @@ -367,10 +238,6 @@ class ParameterPoint(Parameter): class ParameterFile(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.FileWidgetWrapper' - } - def __init__(self, name='', description='', isFolder=False, optional=True, ext=None): Parameter.__init__(self, name, description, None, parseBool(optional)) self.ext = ext @@ -379,18 +246,6 @@ class ParameterFile(Parameter): def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' - def setValue(self, obj): - if obj is None or obj.strip() == '': - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None if obj is None else obj.strip() - return True - - if self.ext is not None and obj != '' and not obj.endswith(self.ext): - return False - self.value = str(obj) - return True - def getAsScriptCode(self): param_type = '' if self.flags() & QgsProcessingParameterDefinition.FlagOptional: @@ -420,20 +275,6 @@ class ParameterFixedTable(Parameter): self.numRows = int(numRows) self.fixedNumOfRows = parseBool(fixedNumOfRows) - def setValue(self, obj): - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - # TODO: check that it contains a correct number of elements - if isinstance(obj, str): - self.value = obj - else: - self.value = ParameterFixedTable.tableToString(obj) - return True - def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' @@ -469,10 +310,6 @@ class ParameterMultipleInput(ParameterDataObject): each of which represents the data source location of each element. """ - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.MultipleInputWidgetWrapper' - } - exported = None def __init__(self, name='', description='', datatype=-1, optional=False, metadata={}): @@ -512,31 +349,6 @@ class ParameterMultipleInput(ParameterDataObject): def getMinNumInputs(self): return self.minNumInputs - def setValue(self, obj): - self.exported = None - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(obj, list): - if len(obj) == 0: - if self.flags() & QgsProcessingParameterDefinition.FlagOptional: - self.value = None - return True - else: - return False - # prevent setting value if we didn't provide required minimal number of inputs - elif len(obj) < self.minNumInputs: - return False - - self.value = ";".join([self.getAsString(lay) for lay in obj]) - return True - else: - self.value = str(obj) - return True - def getSafeExportedLayers(self): """ Returns not the value entered by the user, but a string with @@ -667,10 +479,6 @@ class ParameterMultipleInput(ParameterDataObject): class ParameterNumber(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.NumberWidgetWrapper' - } - def __init__(self, name='', description='', minValue=None, maxValue=None, default=None, optional=False, metadata={}): Parameter.__init__(self, name, description, default, optional, metadata) @@ -695,39 +503,6 @@ class ParameterNumber(Parameter): self.max = None self.value = self.default - def setValue(self, n): - if n is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(n, str): - try: - self.value = float(n) - if self.isInteger: - self.value = int(math.floor(self.value)) - return True - except: - return False - else: - try: - if float(n) - int(float(n)) == 0: - value = int(float(n)) - else: - value = float(n) - if self.min is not None: - if value < self.min: - return False - if self.max is not None: - if value > self.max: - return False - self.value = value - return True - except: - raise - return False - def getAsScriptCode(self): param_type = '' if self.flags() & QgsProcessingParameterDefinition.FlagOptional: @@ -812,34 +587,12 @@ class ParameterRange(Parameter): else: self.isInteger = False - def setValue(self, text): - if text is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - tokens = text.split(',') - if len(tokens) != 2: - return False - try: - float(tokens[0]) - float(tokens[1]) - self.value = text - return True - except: - return False - def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' if self.value is not None else str(None) class ParameterRaster(ParameterDataObject): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.RasterWidgetWrapper' - } - def __init__(self, name='', description='', optional=False, showSublayersDialog=True): ParameterDataObject.__init__(self, name, description, None, optional) self.showSublayersDialog = parseBool(showSublayersDialog) @@ -874,21 +627,6 @@ class ParameterRaster(ParameterDataObject): self.exported = self.value return self.exported - def setValue(self, obj): - self.exported = None - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(obj, QgsRasterLayer): - self.value = str(obj.dataProvider().dataSourceUri()) - return True - else: - self.value = str(obj) - return True - def getFileFilter(self): exts = dataobjects.getSupportedOutputRasterLayerExtensions() for i in range(len(exts)): @@ -912,10 +650,6 @@ class ParameterRaster(ParameterDataObject): class ParameterSelection(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.SelectionWidgetWrapper' - } - def __init__(self, name='', description='', options=[], default=None, isSource=False, multiple=False, optional=False): Parameter.__init__(self, name, description, default, optional) @@ -947,47 +681,6 @@ class ParameterSelection(Parameter): self.values = [option[0] for option in options] self.value = None - if default is not None: - self.setValue(self.defaultValue()) - - def setValue(self, value): - if value is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(value, list): - if not self.multiple: - return False - values = [] - for v in value: - if v in self.values: - values.append(v) - continue - try: - v = int(v) - except: - pass - if v not in self.values: - return False - values.append(v) - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional and len(values) == 0: - return False - self.value = values - return True - else: - if value in self.values: - self.value = value - return True - try: - value = int(value) - except: - pass - if value not in self.values: - return False - self.value = value - return True @classmethod def fromScriptCode(self, line): @@ -1017,10 +710,6 @@ class ParameterEvaluationException(Exception): class ParameterString(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.StringWidgetWrapper' - } - NEWLINE = '\n' ESCAPED_NEWLINE = '\\n' @@ -1029,19 +718,6 @@ class ParameterString(Parameter): Parameter.__init__(self, name, description, default, optional, metadata) self.multiline = parseBool(multiline) - def setValue(self, obj): - if not bool(obj): - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - self.value = str(obj).replace( - ParameterString.ESCAPED_NEWLINE, - ParameterString.NEWLINE - ) - return True - def getValueAsCommandLineParameter(self): return ('"' + str(self.value.replace(ParameterString.NEWLINE, ParameterString.ESCAPED_NEWLINE)) + '"' @@ -1078,10 +754,6 @@ class ParameterString(Parameter): class ParameterExpression(Parameter): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.ExpressionWidgetWrapper' - } - NEWLINE = '\n' ESCAPED_NEWLINE = '\\n' @@ -1089,19 +761,6 @@ class ParameterExpression(Parameter): Parameter.__init__(self, name, description, default, optional) self.parent_layer = parent_layer - def setValue(self, obj): - if not bool(obj): - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - self.value = str(obj).replace( - ParameterString.ESCAPED_NEWLINE, - ParameterString.NEWLINE - ) - return True - def getValueAsCommandLineParameter(self): return ('"' + str(self.value.replace(ParameterExpression.NEWLINE, ParameterExpression.ESCAPED_NEWLINE)) + '"' @@ -1130,38 +789,10 @@ class ParameterExpression(Parameter): class ParameterTable(ParameterDataObject): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.TableWidgetWrapper' - } - def __init__(self, name='', description='', optional=False): ParameterDataObject.__init__(self, name, description, None, optional) self.exported = None - def setValue(self, obj): - self.exported = None - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(obj, QgsVectorLayer): - source = str(obj.source()) - self.value = source - return True - else: - self.value = str(obj) - layers = QgsProcessingUtils.compatibleVectorLayers(QgsProject.instance()) - for layer in layers: - if layer.name() == self.value or layer.source() == self.value: - source = str(layer.source()) - self.value = source - return True - val = str(obj) - self.value = val - return os.path.exists(self.value) - def getSafeExportedTable(self): """Returns not the value entered by the user, but a string with a filename which contains the data of this table, but saved in @@ -1217,10 +848,6 @@ class ParameterTableField(Parameter): Its value is a string that represents the name of the field. """ - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.TableFieldWidgetWrapper' - } - DATA_TYPE_NUMBER = 0 DATA_TYPE_STRING = 1 DATA_TYPE_DATETIME = 2 @@ -1236,22 +863,6 @@ class ParameterTableField(Parameter): def getValueAsCommandLineParameter(self): return '"' + str(self.value) + '"' if self.value is not None else str(None) - def setValue(self, value): - if not bool(value): - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(value, list): - if not self.multiple and len(value) > 1: - return False - self.value = ";".join(value) - return True - else: - self.value = str(value) - return True - def __str__(self): return self.name() + ' <' + self.__module__.split('.')[-1] + ' from ' \ + self.parent + '>' @@ -1296,10 +907,6 @@ class ParameterTableField(Parameter): class ParameterVector(ParameterDataObject): - default_metadata = { - 'widget_wrapper': 'processing.gui.wrappers.VectorWidgetWrapper' - } - def __init__(self, name='', description='', datatype=[-1], optional=False): ParameterDataObject.__init__(self, name, description, None, optional) @@ -1311,21 +918,6 @@ class ParameterVector(ParameterDataObject): self.exported = None self.allowOnlyOpenedLayers = False - def setValue(self, obj): - self.exported = None - if obj is None: - if not self.flags() & QgsProcessingParameterDefinition.FlagOptional: - return False - self.value = None - return True - - if isinstance(obj, QgsVectorLayer): - self.value = str(obj.source()) - return True - else: - self.value = str(obj) - return True - def getSafeExportedLayer(self): """Returns not the value entered by the user, but a string with a filename which contains the data of this layer, but saved in diff --git a/python/plugins/processing/modeler/ModelerAlgorithm.py b/python/plugins/processing/modeler/ModelerAlgorithm.py index d72b04e4ce5..18b55b80d2e 100644 --- a/python/plugins/processing/modeler/ModelerAlgorithm.py +++ b/python/plugins/processing/modeler/ModelerAlgorithm.py @@ -424,8 +424,8 @@ class ModelerAlgorithm(GeoAlgorithm): 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): + if not param.checkValueIsAcceptable(value) and not isinstance(param, + ParameterDataObject): raise GeoAlgorithmExecutionException( self.tr('Wrong value {0} for {1} {2}', 'ModelerAlgorithm').format( value, param.__class__.__name__, param.name() diff --git a/python/plugins/processing/preconfigured/PreconfiguredAlgorithm.py b/python/plugins/processing/preconfigured/PreconfiguredAlgorithm.py index bb54ea5140a..6eef494fb6d 100644 --- a/python/plugins/processing/preconfigured/PreconfiguredAlgorithm.py +++ b/python/plugins/processing/preconfigured/PreconfiguredAlgorithm.py @@ -30,6 +30,7 @@ import os from qgis.core import (QgsProcessingAlgorithm, QgsApplication) from processing.core.GeoAlgorithm import GeoAlgorithm +from copy import deepcopy import json @@ -57,10 +58,11 @@ class PreconfiguredAlgorithm(GeoAlgorithm): return QgsProcessingAlgorithm.FlagHideFromModeler def execute(self, parameters, context=None, feedback=None, model=None): + new_parameters = deepcopy(parameters) self.alg = QgsApplication.processingRegistry().algorithmById(self.description["algname"]) for name, value in list(self.description["parameters"].items()): - self.alg.setParameterValue(name, value) + new_parameters[name] = value for name, value in list(self.description["outputs"].items()): self.alg.setOutputValue(name, value) - self.alg.execute(parameters, feedback) + self.alg.execute(new_parameters, feedback) self.outputs = self.alg.outputs diff --git a/python/plugins/processing/script/ScriptAlgorithm.py b/python/plugins/processing/script/ScriptAlgorithm.py index 0d465836c5d..498c263f4b0 100644 --- a/python/plugins/processing/script/ScriptAlgorithm.py +++ b/python/plugins/processing/script/ScriptAlgorithm.py @@ -174,8 +174,8 @@ class ScriptAlgorithm(GeoAlgorithm): ns['scriptDescriptionFile'] = self.descriptionFile ns['context'] = context - for param in self.parameters: - ns[param.name] = param.value + for param in self.parameterDefinitions(): + ns[param.name] = parameters[param.name()] for out in self.outputs: ns[out.name] = out.value @@ -230,9 +230,9 @@ class ScriptAlgorithm(GeoAlgorithm): with open(helpFile) as f: try: descriptions = json.load(f) - for param in self.parameters: - if param.name in descriptions: - descs[param.name] = str(descriptions[param.name]) + for param in self.parameterDefinitions(): + if param.name() in descriptions: + descs[param.name()] = str(descriptions[param.name()]) except: return descs return descs diff --git a/python/plugins/processing/tests/AlgorithmsTestBase.py b/python/plugins/processing/tests/AlgorithmsTestBase.py index 62e335fd6f0..6d7fa1cfb56 100644 --- a/python/plugins/processing/tests/AlgorithmsTestBase.py +++ b/python/plugins/processing/tests/AlgorithmsTestBase.py @@ -105,8 +105,8 @@ class AlgorithmsTest(object): parameters = {} if isinstance(params, list): - for param in zip(alg.parameters, params): - parameters[param[0].name] = param[1] + for param in zip(alg.parameterDefinitions(), params): + parameters[param[0].name()] = param[1] else: for k, p in list(params.items()): parameters[k] = p