[processing] correctly handle advanced parameters when exporting model

to Python (fix #32579)
This commit is contained in:
Alexander Bruy 2019-11-02 11:51:04 +02:00
parent 213df8df23
commit 7fa054c19b

View File

@ -427,13 +427,21 @@ QStringList QgsProcessingModelAlgorithm::asPythonCode( const QgsProcessing::Pyth
importLines << QStringLiteral( "from qgis.core import QgsProcessing" );
importLines << QStringLiteral( "from qgis.core import QgsProcessingAlgorithm" );
importLines << QStringLiteral( "from qgis.core import QgsProcessingMultiStepFeedback" );
bool hasAdvancedParams = false;
for ( const QgsProcessingParameterDefinition *def : params )
{
if ( def->flags() & QgsProcessingParameterDefinition::FlagAdvanced )
hasAdvancedParams = true;
const QString importString = QgsApplication::processingRegistry()->parameterType( def->type() )->pythonImportString();
if ( !importString.isEmpty() && !importLines.contains( importString ) )
importLines << importString;
}
if ( hasAdvancedParams )
importLines << QStringLiteral( "from qgis.core import QgsProcessingParameterDefinition" );
lines << QStringLiteral( "import processing" );
lines << QString() << QString();
@ -460,9 +468,18 @@ QStringList QgsProcessingModelAlgorithm::asPythonCode( const QgsProcessing::Pyth
defClone->setName( friendlyName );
}
if ( defClone->flags() & QgsProcessingParameterDefinition::FlagAdvanced )
{
lines << indent + indent + QStringLiteral( "param = %1" ).arg( defClone->asPythonString() );
lines << indent + indent + QStringLiteral( "param.setFlags(param.flags() | QgsProcessingParameterDefinition.FlagAdvanced)" );
lines << indent + indent + QStringLiteral( "self.addParameter(param)" );
}
else
{
lines << indent + indent + QStringLiteral( "self.addParameter(%1)" ).arg( defClone->asPythonString() );
}
}
}
lines << QString();
lines << indent + QStringLiteral( "def processAlgorithm(self, parameters, context, model_feedback):" );