Skip to content

Commit dbf21d1

Browse files
committed
Reorder arguments in parameterAsSink to avoid requiring wkb type and crs
1 parent 46b4f24 commit dbf21d1

File tree

4 files changed

+23
-26
lines changed

4 files changed

+23
-26
lines changed

python/core/processing/qgsprocessingalgorithm.sip

+2-3
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,8 @@ class QgsProcessingAlgorithm
357357
:rtype: bool
358358
%End
359359

360-
QgsFeatureSink *parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context,
361-
const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs,
362-
QString &destinationIdentifier /Out/ ) const /Factory/;
360+
QgsFeatureSink *parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QString &destinationIdentifier /Out/,
361+
const QgsFields &fields, QgsWkbTypes::Type geometryType = QgsWkbTypes::NoGeometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) const /Factory/;
363362
%Docstring
364363
Evaluates the parameter with matching ``name`` to a feature sink.
365364

src/core/processing/qgsnativealgorithms.cpp

+18-19
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ QVariantMap QgsCentroidAlgorithm::processAlgorithm( const QVariantMap &parameter
9191
return QVariantMap();
9292

9393
QString dest;
94-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT_LAYER" ), context, source->fields(), QgsWkbTypes::Point, source->sourceCrs(), dest ) );
94+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT_LAYER" ), context, dest, source->fields(), QgsWkbTypes::Point, source->sourceCrs() ) );
9595
if ( !sink )
9696
return QVariantMap();
9797

@@ -166,7 +166,7 @@ QVariantMap QgsBufferAlgorithm::processAlgorithm( const QVariantMap &parameters,
166166
return QVariantMap();
167167

168168
QString dest;
169-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT_LAYER" ), context, source->fields(), QgsWkbTypes::Polygon, source->sourceCrs(), dest ) );
169+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT_LAYER" ), context, dest, source->fields(), QgsWkbTypes::Polygon, source->sourceCrs() ) );
170170
if ( !sink )
171171
return QVariantMap();
172172

@@ -270,7 +270,7 @@ QVariantMap QgsDissolveAlgorithm::processAlgorithm( const QVariantMap &parameter
270270
return QVariantMap();
271271

272272
QString dest;
273-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(), QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs(), dest ) );
273+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(), QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs() ) );
274274

275275
if ( !sink )
276276
return QVariantMap();
@@ -417,7 +417,7 @@ QVariantMap QgsClipAlgorithm::processAlgorithm( const QVariantMap &parameters, Q
417417
return QVariantMap();
418418

419419
QString dest;
420-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, featureSource->fields(), QgsWkbTypes::multiType( featureSource->wkbType() ), featureSource->sourceCrs(), dest ) );
420+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, featureSource->fields(), QgsWkbTypes::multiType( featureSource->wkbType() ), featureSource->sourceCrs() ) );
421421

422422
if ( !sink )
423423
return QVariantMap();
@@ -563,7 +563,7 @@ QVariantMap QgsTransformAlgorithm::processAlgorithm( const QVariantMap &paramete
563563
QgsCoordinateReferenceSystem targetCrs = parameterAsCrs( parameters, QStringLiteral( "TARGET_CRS" ), context );
564564

565565
QString dest;
566-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(), source->wkbType(), targetCrs, dest ) );
566+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(), source->wkbType(), targetCrs ) );
567567
if ( !sink )
568568
return QVariantMap();
569569

@@ -626,8 +626,8 @@ QVariantMap QgsSubdivideAlgorithm::processAlgorithm( const QVariantMap &paramete
626626

627627
int maxNodes = parameterAsInt( parameters, QStringLiteral( "MAX_NODES" ), context );
628628
QString dest;
629-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(),
630-
QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs(), dest ) );
629+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(),
630+
QgsWkbTypes::multiType( source->wkbType() ), source->sourceCrs() ) );
631631
if ( !sink )
632632
return QVariantMap();
633633

@@ -693,8 +693,8 @@ QVariantMap QgsMultipartToSinglepartAlgorithm::processAlgorithm( const QVariantM
693693
QgsWkbTypes::Type sinkType = QgsWkbTypes::singleType( source->wkbType() );
694694

695695
QString dest;
696-
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(),
697-
sinkType, source->sourceCrs(), dest ) );
696+
std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, dest, source->fields(),
697+
sinkType, source->sourceCrs() ) );
698698
if ( !sink )
699699
return QVariantMap();
700700

@@ -775,20 +775,19 @@ QVariantMap QgsExtractByExpressionAlgorithm::processAlgorithm( const QVariantMap
775775
QString expressionString = parameterAsExpression( parameters, QStringLiteral( "EXPRESSION" ), context );
776776

777777
QString matchingSinkId;
778-
std::unique_ptr< QgsFeatureSink > matchingSink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(),
779-
source->wkbType(), source->sourceCrs(), matchingSinkId ) );
778+
std::unique_ptr< QgsFeatureSink > matchingSink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, matchingSinkId, source->fields(),
779+
source->wkbType(), source->sourceCrs() ) );
780780
if ( !matchingSink )
781781
return QVariantMap();
782782

783783
QString nonMatchingSinkId;
784-
std::unique_ptr< QgsFeatureSink > nonMatchingSink( parameterAsSink( parameters, QStringLiteral( "FAIL_OUTPUT" ), context, source->fields(),
785-
source->wkbType(), source->sourceCrs(), nonMatchingSinkId ) );
784+
std::unique_ptr< QgsFeatureSink > nonMatchingSink( parameterAsSink( parameters, QStringLiteral( "FAIL_OUTPUT" ), context, nonMatchingSinkId, source->fields(),
785+
source->wkbType(), source->sourceCrs() ) );
786786

787787
QgsExpression expression( expressionString );
788788
if ( expression.hasParserError() )
789789
{
790-
// raise GeoAlgorithmExecutionException(expression.parserErrorString())
791-
return QVariantMap();
790+
throw QgsProcessingException( expression.parserErrorString() );
792791
}
793792

794793
QgsExpressionContext expressionContext = createExpressionContext( parameters, context );
@@ -904,14 +903,14 @@ QVariantMap QgsExtractByAttributeAlgorithm::processAlgorithm( const QVariantMap
904903
QString value = parameterAsString( parameters, QStringLiteral( "VALUE" ), context );
905904

906905
QString matchingSinkId;
907-
std::unique_ptr< QgsFeatureSink > matchingSink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, source->fields(),
908-
source->wkbType(), source->sourceCrs(), matchingSinkId ) );
906+
std::unique_ptr< QgsFeatureSink > matchingSink( parameterAsSink( parameters, QStringLiteral( "OUTPUT" ), context, matchingSinkId, source->fields(),
907+
source->wkbType(), source->sourceCrs() ) );
909908
if ( !matchingSink )
910909
return QVariantMap();
911910

912911
QString nonMatchingSinkId;
913-
std::unique_ptr< QgsFeatureSink > nonMatchingSink( parameterAsSink( parameters, QStringLiteral( "FAIL_OUTPUT" ), context, source->fields(),
914-
source->wkbType(), source->sourceCrs(), nonMatchingSinkId ) );
912+
std::unique_ptr< QgsFeatureSink > nonMatchingSink( parameterAsSink( parameters, QStringLiteral( "FAIL_OUTPUT" ), context, nonMatchingSinkId, source->fields(),
913+
source->wkbType(), source->sourceCrs() ) );
915914

916915

917916
int idx = source->fields().lookupField( fieldName );

src/core/processing/qgsprocessingalgorithm.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ bool QgsProcessingAlgorithm::parameterAsBool( const QVariantMap &parameters, con
369369
return QgsProcessingParameters::parameterAsBool( parameterDefinition( name ), parameters, context );
370370
}
371371

372-
QgsFeatureSink *QgsProcessingAlgorithm::parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs, QString &destinationIdentifier ) const
372+
QgsFeatureSink *QgsProcessingAlgorithm::parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QString &destinationIdentifier, const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs ) const
373373
{
374374
return QgsProcessingParameters::parameterAsSink( parameterDefinition( name ), parameters, fields, geometryType, crs, context, destinationIdentifier );
375375
}

src/core/processing/qgsprocessingalgorithm.h

+2-3
Original file line numberDiff line numberDiff line change
@@ -358,9 +358,8 @@ class CORE_EXPORT QgsProcessingAlgorithm
358358
*
359359
* This function creates a new object and the caller takes responsibility for deleting the returned object.
360360
*/
361-
QgsFeatureSink *parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context,
362-
const QgsFields &fields, QgsWkbTypes::Type geometryType, const QgsCoordinateReferenceSystem &crs,
363-
QString &destinationIdentifier SIP_OUT ) const SIP_FACTORY;
361+
QgsFeatureSink *parameterAsSink( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context, QString &destinationIdentifier SIP_OUT,
362+
const QgsFields &fields, QgsWkbTypes::Type geometryType = QgsWkbTypes::NoGeometry, const QgsCoordinateReferenceSystem &crs = QgsCoordinateReferenceSystem() ) const SIP_FACTORY;
364363

365364
/**
366365
* Evaluates the parameter with matching \a definition to a feature source.

0 commit comments

Comments
 (0)