Show more detailed help for models in qgis_process

Include any examples, author and version information in help output
This commit is contained in:
Nyall Dawson 2022-02-28 14:15:11 +10:00
parent 9b52cdc555
commit 8ceaf00f98
3 changed files with 47 additions and 5 deletions

View File

@ -805,13 +805,41 @@ int QgsProcessingExec::showAlgorithmHelp( const QString &inputId, bool useJson )
if ( !useJson ) if ( !useJson )
{ {
std::cout << QStringLiteral( "%1 (%2)\n" ).arg( alg->displayName(), alg->id() ).toLocal8Bit().constData(); std::cout << QStringLiteral( "%1 (%2)\n" ).arg( alg->displayName(), alg->id() ).toLocal8Bit().constData();
std::cout << "\n----------------\n"; std::cout << "\n----------------\n";
std::cout << "Description\n"; std::cout << "Description\n";
std::cout << "----------------\n"; std::cout << "----------------\n";
if ( const QgsProcessingModelAlgorithm *model = dynamic_cast< const QgsProcessingModelAlgorithm * >( alg ) )
{
// show finer help content for models
const QVariantMap help = model->helpContent();
std::cout << help.value( QStringLiteral( "ALG_DESC" ) ).toString().toLocal8Bit().constData() << '\n';
if ( !help.value( QStringLiteral( "ALG_CREATOR" ) ).toString().isEmpty() ||
!help.value( QStringLiteral( "ALG_VERSION" ) ).toString().isEmpty() )
std::cout << '\n';
if ( !help.value( QStringLiteral( "ALG_CREATOR" ) ).toString().isEmpty() )
std::cout << "Algorithm author:\t" << help.value( QStringLiteral( "ALG_CREATOR" ) ).toString().toLocal8Bit().constData() << '\n';
if ( !help.value( QStringLiteral( "ALG_VERSION" ) ).toString().isEmpty() )
std::cout << "Algorithm version:\t" << help.value( QStringLiteral( "ALG_VERSION" ) ).toString().toLocal8Bit().constData() << '\n';
if ( !help.value( QStringLiteral( "EXAMPLES" ) ).toString().isEmpty() )
{
std::cout << "\n----------------\n";
std::cout << "Examples\n";
std::cout << "----------------\n";
std::cout << help.value( QStringLiteral( "EXAMPLES" ) ).toString().toLocal8Bit().constData() << '\n';
}
}
else
{
if ( !alg->shortDescription().isEmpty() ) if ( !alg->shortDescription().isEmpty() )
std::cout << alg->shortDescription().toLocal8Bit().constData() << '\n'; std::cout << alg->shortDescription().toLocal8Bit().constData() << '\n';
if ( !alg->shortHelpString().isEmpty() && alg->shortHelpString() != alg->shortDescription() ) if ( !alg->shortHelpString().isEmpty() && alg->shortHelpString() != alg->shortDescription() )
std::cout << alg->shortHelpString().toLocal8Bit().constData() << '\n'; std::cout << alg->shortHelpString().toLocal8Bit().constData() << '\n';
}
std::cout << "\n----------------\n"; std::cout << "\n----------------\n";
std::cout << "Arguments\n"; std::cout << "Arguments\n";

View File

@ -402,6 +402,10 @@ class TestQgsProcessExecutable(unittest.TestCase):
self.assertFalse(err) self.assertFalse(err)
self.assertEqual(rc, 0) self.assertEqual(rc, 0)
self.assertIn('model description', output.lower()) self.assertIn('model description', output.lower())
self.assertIn('author of model', output.lower())
self.assertIn('version 2.1', output.lower())
self.assertIn('examples', output.lower())
self.assertIn('this is an example of running the model', output.lower())
def testModelRun(self): def testModelRun(self):
output_file = self.TMP_DIR + '/model_output.shp' output_file = self.TMP_DIR + '/model_output.shp'

View File

@ -71,7 +71,12 @@
<Option name="designerParameterValues"/> <Option name="designerParameterValues"/>
<Option name="groupBoxes"/> <Option name="groupBoxes"/>
<Option name="help" type="Map"> <Option name="help" type="Map">
<Option name="ALG_DESC" type="QString" value="model description"/> <Option name="ALG_CREATOR" type="QString" value="Author of model"/>
<Option name="ALG_DESC" type="QString" value="This is the model description"/>
<Option name="ALG_VERSION" type="QString" value="Version 2.1"/>
<Option name="EXAMPLES" type="QString" value="this is an example of running the model"/>
<Option name="HELP_URL" type="QString" value=""/>
<Option name="SHORT_DESCRIPTION" type="QString" value=""/>
</Option> </Option>
<Option name="modelVariables"/> <Option name="modelVariables"/>
<Option name="model_group" type="QString" value=""/> <Option name="model_group" type="QString" value=""/>
@ -82,8 +87,10 @@
<Option type="int" value="-1"/> <Option type="int" value="-1"/>
</Option> </Option>
<Option name="default" type="invalid"/> <Option name="default" type="invalid"/>
<Option name="defaultGui" type="invalid"/>
<Option name="description" type="QString" value="FEATS"/> <Option name="description" type="QString" value="FEATS"/>
<Option name="flags" type="int" value="0"/> <Option name="flags" type="int" value="0"/>
<Option name="help" type="QString" value=""/>
<Option name="metadata"/> <Option name="metadata"/>
<Option name="name" type="QString" value="FEATS"/> <Option name="name" type="QString" value="FEATS"/>
<Option name="parameter_type" type="QString" value="source"/> <Option name="parameter_type" type="QString" value="source"/>
@ -92,8 +99,10 @@
<Option name="create_by_default" type="bool" value="true"/> <Option name="create_by_default" type="bool" value="true"/>
<Option name="data_type" type="int" value="0"/> <Option name="data_type" type="int" value="0"/>
<Option name="default" type="invalid"/> <Option name="default" type="invalid"/>
<Option name="defaultGui" type="invalid"/>
<Option name="description" type="QString" value="CENTROIDS"/> <Option name="description" type="QString" value="CENTROIDS"/>
<Option name="flags" type="int" value="0"/> <Option name="flags" type="int" value="0"/>
<Option name="help" type="QString" value=""/>
<Option name="metadata"/> <Option name="metadata"/>
<Option name="name" type="QString" value="native:centroids_1:CENTROIDS"/> <Option name="name" type="QString" value="native:centroids_1:CENTROIDS"/>
<Option name="parameter_type" type="QString" value="sink"/> <Option name="parameter_type" type="QString" value="sink"/>
@ -101,6 +110,7 @@
<Option name="supports_non_file_outputs" type="bool" value="true"/> <Option name="supports_non_file_outputs" type="bool" value="true"/>
</Option> </Option>
</Option> </Option>
<Option name="parameterOrder"/>
<Option name="parameters" type="Map"> <Option name="parameters" type="Map">
<Option name="FEATS" type="Map"> <Option name="FEATS" type="Map">
<Option name="color" type="QString" value=""/> <Option name="color" type="QString" value=""/>