Skip to content

Commit 0081f78

Browse files
authored
Merge pull request #6487 from alexbruy/processing-output-file
[processing] fix QgsProcessingParameterFileDestination handling in models
2 parents dc3353e + a217904 commit 0081f78

18 files changed

+29
-50
lines changed

python/plugins/processing/algs/gdal/gdal2xyz.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@
2929
QgsProcessingParameterRasterLayer,
3030
QgsProcessingParameterBand,
3131
QgsProcessingParameterBoolean,
32-
QgsProcessingParameterFileDestination,
33-
QgsProcessingOutputFile)
32+
QgsProcessingParameterFileDestination
33+
)
3434
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
3535
from processing.algs.gdal.GdalUtils import GdalUtils
3636
from processing.tools.system import isWindows
@@ -58,7 +58,6 @@ def initAlgorithm(self, config=None):
5858
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT,
5959
self.tr('XYZ ASCII file'),
6060
self.tr('CSV files (*.csv)')))
61-
self.addOutput(QgsProcessingOutputFile(self.OUTPUT, self.tr('XYZ ASCII file')))
6261

6362
def name(self):
6463
return 'gdal2xyz'

python/plugins/processing/algs/gdal/gdalinfo.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@
3030
from qgis.PyQt.QtGui import QIcon
3131
from qgis.core import (QgsProcessingParameterRasterLayer,
3232
QgsProcessingParameterBoolean,
33-
QgsProcessingParameterFileDestination,
34-
QgsProcessingOutputHtml)
33+
QgsProcessingParameterFileDestination)
3534
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
3635
from processing.algs.gdal.GdalUtils import GdalUtils
3736

@@ -69,7 +68,6 @@ def initAlgorithm(self, config=None):
6968
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT,
7069
self.tr('Layer information'),
7170
self.tr('HTML files (*.html)')))
72-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Layer information')))
7371

7472
def name(self):
7573
return 'gdalinfo'

python/plugins/processing/algs/gdal/ogrinfo.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@
2828

2929
from qgis.core import (QgsProcessingParameterVectorLayer,
3030
QgsProcessingParameterBoolean,
31-
QgsProcessingParameterFileDestination,
32-
QgsProcessingOutputHtml)
31+
QgsProcessingParameterFileDestination)
3332
from processing.algs.gdal.GdalAlgorithm import GdalAlgorithm
3433
from processing.algs.gdal.GdalUtils import GdalUtils
3534

@@ -57,7 +56,6 @@ def initAlgorithm(self, config=None):
5756
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT,
5857
self.tr('Layer information'),
5958
self.tr('HTML files (*.html)')))
60-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Layer information')))
6159

6260
def name(self):
6361
return 'ogrinfo'

python/plugins/processing/algs/grass7/Grass7Algorithm.py

-8
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,6 @@
5959
QgsProcessingParameterFileDestination,
6060
QgsProcessingParameterFile,
6161
QgsProcessingParameterFolderDestination,
62-
QgsProcessingOutputFolder,
63-
QgsProcessingOutputVectorLayer,
64-
QgsProcessingOutputRasterLayer,
65-
QgsProcessingOutputHtml,
6662
QgsProcessingUtils)
6763
from qgis.utils import iface
6864

@@ -178,10 +174,6 @@ def initAlgorithm(self, config=None):
178174
for p in self.params:
179175
# We use createOutput argument for automatic output creation
180176
res = self.addParameter(p, True)
181-
# File destinations are not automatically added as outputs
182-
if (isinstance(p, QgsProcessingParameterFileDestination)
183-
and p.defaultFileExtension().lower() == 'html'):
184-
self.addOutput(QgsProcessingOutputHtml(p.name(), p.description()))
185177

186178
def defineCharacteristicsFromFile(self):
187179
"""

python/plugins/processing/algs/qgis/BarPlot.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131

3232
from qgis.core import (QgsProcessingParameterFeatureSource,
3333
QgsProcessingParameterField,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736
from processing.tools import vector
3837

@@ -65,8 +64,6 @@ def initAlgorithm(self, config=None):
6564

6665
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Bar plot'), self.tr('HTML files (*.html)')))
6766

68-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Bar plot')))
69-
7067
def name(self):
7168
return 'barplot'
7269

python/plugins/processing/algs/qgis/BasicStatistics.py

-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
QgsProcessingParameterFeatureSource,
3939
QgsProcessingParameterField,
4040
QgsProcessingParameterFileDestination,
41-
QgsProcessingOutputHtml,
4241
QgsProcessingOutputNumber)
4342

4443
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
@@ -98,7 +97,6 @@ def initAlgorithm(self, config=None):
9897
None, self.INPUT_LAYER, QgsProcessingParameterField.Any))
9998

10099
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT_HTML_FILE, self.tr('Statistics'), self.tr('HTML files (*.html)'), None, True))
101-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT_HTML_FILE, self.tr('Statistics')))
102100

103101
self.addOutput(QgsProcessingOutputNumber(self.COUNT, self.tr('Count')))
104102
self.addOutput(QgsProcessingOutputNumber(self.UNIQUE, self.tr('Number of unique values')))

python/plugins/processing/algs/qgis/BoxPlot.py

-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
QgsProcessingParameterField,
3333
QgsProcessingParameterEnum,
3434
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml,
3635
QgsFeatureRequest)
3736
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3837
from processing.tools import vector
@@ -76,7 +75,6 @@ def initAlgorithm(self, config=None):
7675
options=msd, defaultValue=0))
7776

7877
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Box plot'), self.tr('HTML files (*.html)')))
79-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Box plot')))
8078

8179
def name(self):
8280
return 'boxplot'

python/plugins/processing/algs/qgis/MeanAndStdDevPlot.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
from qgis.core import (QgsProcessingParameterFeatureSource,
3232
QgsProcessingParameterField,
3333
QgsProcessingUtils,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736

3837
from processing.tools import vector
@@ -64,7 +63,6 @@ def initAlgorithm(self, config=None):
6463
self.tr('Value field'), parentLayerParameterName=self.INPUT))
6564

6665
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Plot'), self.tr('HTML files (*.html)')))
67-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Plot')))
6866

6967
def name(self):
7068
return 'meanandstandarddeviationplot'

python/plugins/processing/algs/qgis/NearestNeighbourAnalysis.py

-2
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
QgsProcessing,
3838
QgsProcessingParameterFeatureSource,
3939
QgsProcessingParameterFileDestination,
40-
QgsProcessingOutputHtml,
4140
QgsProcessingOutputNumber,
4241
QgsSpatialIndex)
4342

@@ -73,7 +72,6 @@ def initAlgorithm(self, config=None):
7372
self.tr('Input layer'), [QgsProcessing.TypeVectorPoint]))
7473

7574
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT_HTML_FILE, self.tr('Nearest neighbour'), self.tr('HTML files (*.html)'), None, True))
76-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT_HTML_FILE, self.tr('Nearest neighbour')))
7775

7876
self.addOutput(QgsProcessingOutputNumber(self.OBSERVED_MD,
7977
self.tr('Observed mean distance')))

python/plugins/processing/algs/qgis/PolarPlot.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131

3232
from qgis.core import (QgsProcessingParameterFeatureSource,
3333
QgsProcessingParameterField,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736
from processing.tools import vector
3837

@@ -62,7 +61,6 @@ def initAlgorithm(self, config=None):
6261
self.tr('Value field'), parentLayerParameterName=self.INPUT))
6362

6463
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Polar plot'), self.tr('HTML files (*.html)')))
65-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Polar plot')))
6664

6765
def name(self):
6866
return 'polarplot'

python/plugins/processing/algs/qgis/RasterLayerHistogram.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
from qgis.core import (QgsProcessingParameterRasterLayer,
3232
QgsProcessingParameterBand,
3333
QgsProcessingParameterNumber,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736
from processing.tools import raster
3837

@@ -64,7 +63,6 @@ def initAlgorithm(self, config=None):
6463
self.tr('number of bins'), minValue=2, defaultValue=10))
6564

6665
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Histogram'), self.tr('HTML files (*.html)')))
67-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Histogram')))
6866

6967
def name(self):
7068
return 'rasterlayerhistogram'

python/plugins/processing/algs/qgis/RasterLayerStatistics.py

-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
QgsProcessingParameterRasterLayer,
3333
QgsProcessingParameterBand,
3434
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml,
3635
QgsProcessingOutputNumber)
3736
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3837

@@ -68,7 +67,6 @@ def initAlgorithm(self, config=None):
6867
1,
6968
self.INPUT))
7069
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT_HTML_FILE, self.tr('Statistics'), self.tr('HTML files (*.html)'), None, True))
71-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT_HTML_FILE, self.tr('Statistics')))
7270

7371
self.addOutput(QgsProcessingOutputNumber(self.MIN, self.tr('Minimum value')))
7472
self.addOutput(QgsProcessingOutputNumber(self.MAX, self.tr('Maximum value')))

python/plugins/processing/algs/qgis/UniqueValues.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,7 @@
4242
QgsProcessingParameterFeatureSink,
4343
QgsProcessingOutputNumber,
4444
QgsProcessingOutputString,
45-
QgsProcessingParameterFileDestination,
46-
QgsProcessingOutputHtml)
45+
QgsProcessingParameterFileDestination)
4746

4847
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
4948

@@ -81,7 +80,6 @@ def initAlgorithm(self, config=None):
8180
self.addParameter(QgsProcessingParameterFeatureSink(self.OUTPUT, self.tr('Unique values'), optional=True, defaultValue=''))
8281

8382
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT_HTML_FILE, self.tr('HTML report'), self.tr('HTML files (*.html)'), None, True))
84-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT_HTML_FILE, self.tr('HTML report')))
8583
self.addOutput(QgsProcessingOutputNumber(self.TOTAL_VALUES, self.tr('Total unique values')))
8684
self.addOutput(QgsProcessingOutputString(self.UNIQUE_VALUES, self.tr('Unique values')))
8785

python/plugins/processing/algs/qgis/VectorLayerHistogram.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
from qgis.core import (QgsProcessingParameterFeatureSource,
3232
QgsProcessingParameterField,
3333
QgsProcessingParameterNumber,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736
from processing.tools import vector
3837

@@ -63,7 +62,6 @@ def initAlgorithm(self, config=None):
6362
self.tr('number of bins'), minValue=2, defaultValue=10))
6463

6564
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Histogram'), self.tr('HTML files (*.html)')))
66-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Histogram')))
6765

6866
def name(self):
6967
return 'vectorlayerhistogram'

python/plugins/processing/algs/qgis/VectorLayerScatterplot.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
from qgis.core import (QgsProcessingParameterFeatureSource,
3232
QgsProcessingParameterField,
3333
QgsProcessingUtils,
34-
QgsProcessingParameterFileDestination,
35-
QgsProcessingOutputHtml)
34+
QgsProcessingParameterFileDestination)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736
from processing.tools import vector
3837

@@ -66,7 +65,6 @@ def initAlgorithm(self, config=None):
6665
type=QgsProcessingParameterField.Numeric))
6766

6867
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Scatterplot'), self.tr('HTML files (*.html)')))
69-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Scatterplot')))
7068

7169
def name(self):
7270
return 'vectorlayerscatterplot'

python/plugins/processing/algs/qgis/VectorLayerScatterplot3D.py

-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
from qgis.core import (QgsProcessingParameterFeatureSource,
3232
QgsProcessingParameterField,
3333
QgsProcessingParameterFileDestination,
34-
QgsProcessingOutputHtml,
3534
QgsProcessingUtils)
3635
from processing.algs.qgis.QgisAlgorithm import QgisAlgorithm
3736

@@ -72,7 +71,6 @@ def initAlgorithm(self, config=None):
7271
type=QgsProcessingParameterField.Numeric))
7372

7473
self.addParameter(QgsProcessingParameterFileDestination(self.OUTPUT, self.tr('Histogram'), self.tr('HTML files (*.html)')))
75-
self.addOutput(QgsProcessingOutputHtml(self.OUTPUT, self.tr('Histogram')))
7674

7775
def name(self):
7876
return 'scatter3dplot'

src/core/processing/qgsprocessingparameters.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -3402,7 +3402,14 @@ QString QgsProcessingParameterFileDestination::valueAsPythonString( const QVaria
34023402

34033403
QgsProcessingOutputDefinition *QgsProcessingParameterFileDestination::toOutputDefinition() const
34043404
{
3405-
return nullptr;
3405+
if ( !mFileFilter.isEmpty() && mFileFilter.contains( QStringLiteral( "htm" ), Qt::CaseInsensitive ) )
3406+
{
3407+
return new QgsProcessingOutputHtml( name(), description() );
3408+
}
3409+
else
3410+
{
3411+
return new QgsProcessingOutputFile( name(), description() );
3412+
}
34063413
}
34073414

34083415
QString QgsProcessingParameterFileDestination::defaultFileExtension() const

tests/src/analysis/testqgsprocessing.cpp

+10
Original file line numberDiff line numberDiff line change
@@ -4398,6 +4398,16 @@ void TestQgsProcessing::parameterFileOut()
43984398
QCOMPARE( fromCode->description(), QStringLiteral( "optional" ) );
43994399
QCOMPARE( fromCode->flags(), def->flags() );
44004400
QCOMPARE( fromCode->defaultValue(), def->defaultValue() );
4401+
4402+
// outputs definitio test
4403+
def.reset( new QgsProcessingParameterFileDestination( "html", QString(), QString( "HTML files" ), QString(), false ) );
4404+
QVERIFY( dynamic_cast< QgsProcessingOutputHtml *>( def->toOutputDefinition() ) );
4405+
def.reset( new QgsProcessingParameterFileDestination( "html", QString(), QString( "Text files (*.htm)" ), QString(), false ) );
4406+
QVERIFY( dynamic_cast< QgsProcessingOutputHtml *>( def->toOutputDefinition() ) );
4407+
def.reset( new QgsProcessingParameterFileDestination( "file", QString(), QString( "Text files (*.txt)" ), QString(), false ) );
4408+
QVERIFY( dynamic_cast< QgsProcessingOutputFile *>( def->toOutputDefinition() ) );
4409+
def.reset( new QgsProcessingParameterFileDestination( "file", QString(), QString(), QString(), false ) );
4410+
QVERIFY( dynamic_cast< QgsProcessingOutputFile *>( def->toOutputDefinition() ) );
44014411
}
44024412

44034413
void TestQgsProcessing::parameterFolderOut()

0 commit comments

Comments
 (0)