diff --git a/python/core/processing/qgsprocessingalgorithm.sip b/python/core/processing/qgsprocessingalgorithm.sip index 2141a644fee..13e1e1c506a 100644 --- a/python/core/processing/qgsprocessingalgorithm.sip +++ b/python/core/processing/qgsprocessingalgorithm.sip @@ -376,7 +376,7 @@ class QgsProcessingAlgorithm :rtype: QgsFeatureSink %End - QgsFeatureSource *parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const /Factory/; + QgsProcessingFeatureSource *parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const /Factory/; %Docstring Evaluates the parameter with matching ``definition`` to a feature source. @@ -384,7 +384,7 @@ class QgsProcessingAlgorithm sources and stored temporarily in the ``context``. This function creates a new object and the caller takes responsibility for deleting the returned object. - :rtype: QgsFeatureSource + :rtype: QgsProcessingFeatureSource %End QgsMapLayer *parameterAsLayer( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const; diff --git a/python/core/processing/qgsprocessingparameters.sip b/python/core/processing/qgsprocessingparameters.sip index 955f8e6e0a6..c7f0c74cc9e 100644 --- a/python/core/processing/qgsprocessingparameters.sip +++ b/python/core/processing/qgsprocessingparameters.sip @@ -436,7 +436,7 @@ class QgsProcessingParameters :rtype: QgsFeatureSink %End - static QgsFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) /Factory/; + static QgsProcessingFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) /Factory/; %Docstring Evaluates the parameter with matching ``definition`` to a feature source. @@ -444,7 +444,7 @@ class QgsProcessingParameters sources and stored temporarily in the ``context``. This function creates a new object and the caller takes responsibility for deleting the returned object. - :rtype: QgsFeatureSource + :rtype: QgsProcessingFeatureSource %End static QgsMapLayer *parameterAsLayer( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ); diff --git a/python/core/processing/qgsprocessingutils.sip b/python/core/processing/qgsprocessingutils.sip index 9b6fa0b98e7..73c4c2e9298 100644 --- a/python/core/processing/qgsprocessingutils.sip +++ b/python/core/processing/qgsprocessingutils.sip @@ -160,6 +160,59 @@ class QgsProcessingUtils }; +class QgsProcessingFeatureSource : QgsFeatureSource +{ +%Docstring + QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying + results according to the settings in a QgsProcessingContext. +.. versionadded:: 3.0 +%End + +%TypeHeaderCode +#include "qgsprocessingutils.h" +%End + public: + + enum Flag + { + FlagSkipGeometryValidityChecks, + }; + typedef QFlags Flags; + + + QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false ); +%Docstring + Constructor for QgsProcessingFeatureSource, accepting an original feature source ``originalSource`` + and processing ``context``. + Ownership of ``originalSource`` is dictated by ``ownsOriginalSource``. If ``ownsOriginalSource`` is false, + ownership is not transferred, and callers must ensure that ``originalSource`` exists for the lifetime of this object. + If ``ownsOriginalSource`` is true, then this object will take ownership of ``originalSource``. +%End + + ~QgsProcessingFeatureSource(); + + QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const; +%Docstring + Returns an iterator for the features in the source, respecting the supplied feature ``flags``. + An optional ``request`` can be used to optimise the returned + iterator, eg by restricting the returned attributes or geometry. + :rtype: QgsFeatureIterator +%End + + virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const; + + virtual QgsCoordinateReferenceSystem sourceCrs() const; + + virtual QgsFields fields() const; + + virtual QgsWkbTypes::Type wkbType() const; + + virtual long featureCount() const; + + virtual QString sourceName() const; + + +}; diff --git a/src/core/processing/qgsprocessingalgorithm.cpp b/src/core/processing/qgsprocessingalgorithm.cpp index fe2ef3e4465..2ad9189138f 100644 --- a/src/core/processing/qgsprocessingalgorithm.cpp +++ b/src/core/processing/qgsprocessingalgorithm.cpp @@ -374,7 +374,7 @@ QgsFeatureSink *QgsProcessingAlgorithm::parameterAsSink( const QVariantMap ¶ return QgsProcessingParameters::parameterAsSink( parameterDefinition( name ), parameters, fields, geometryType, crs, context, destinationIdentifier ); } -QgsFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const +QgsProcessingFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const { return QgsProcessingParameters::parameterAsSource( parameterDefinition( name ), parameters, context ); } diff --git a/src/core/processing/qgsprocessingalgorithm.h b/src/core/processing/qgsprocessingalgorithm.h index 2339421f0f5..6fdec722d9a 100644 --- a/src/core/processing/qgsprocessingalgorithm.h +++ b/src/core/processing/qgsprocessingalgorithm.h @@ -370,7 +370,7 @@ class CORE_EXPORT QgsProcessingAlgorithm * * This function creates a new object and the caller takes responsibility for deleting the returned object. */ - QgsFeatureSource *parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const SIP_FACTORY; + QgsProcessingFeatureSource *parameterAsSource( const QVariantMap ¶meters, const QString &name, QgsProcessingContext &context ) const SIP_FACTORY; /** * Evaluates the parameter with matching \a name to a map layer. diff --git a/src/core/processing/qgsprocessingparameters.cpp b/src/core/processing/qgsprocessingparameters.cpp index 36d6e7f89d0..f388cb8bb2d 100644 --- a/src/core/processing/qgsprocessingparameters.cpp +++ b/src/core/processing/qgsprocessingparameters.cpp @@ -258,7 +258,7 @@ QgsFeatureSink *QgsProcessingParameters::parameterAsSink( const QgsProcessingPar return sink.release(); } -QgsFeatureSource *QgsProcessingParameters::parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) +QgsProcessingFeatureSource *QgsProcessingParameters::parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) { if ( !definition ) return nullptr; diff --git a/src/core/processing/qgsprocessingparameters.h b/src/core/processing/qgsprocessingparameters.h index 0dc7d122d15..0213e443859 100644 --- a/src/core/processing/qgsprocessingparameters.h +++ b/src/core/processing/qgsprocessingparameters.h @@ -30,6 +30,7 @@ class QgsRasterLayer; class QgsVectorLayer; class QgsFeatureSink; class QgsFeatureSource; +class QgsProcessingFeatureSource; class QgsProcessingOutputDefinition; /** @@ -479,7 +480,7 @@ class CORE_EXPORT QgsProcessingParameters * * This function creates a new object and the caller takes responsibility for deleting the returned object. */ - static QgsFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) SIP_FACTORY; + static QgsProcessingFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap ¶meters, QgsProcessingContext &context ) SIP_FACTORY; /** * Evaluates the parameter with matching \a definition to a map layer. diff --git a/src/core/processing/qgsprocessingutils.h b/src/core/processing/qgsprocessingutils.h index 135444a6abe..6f14d2192d4 100644 --- a/src/core/processing/qgsprocessingutils.h +++ b/src/core/processing/qgsprocessingutils.h @@ -219,17 +219,14 @@ class CORE_EXPORT QgsProcessingUtils }; -#ifndef SIP_RUN - /** * \class QgsProcessingFeatureSource * \ingroup core * QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying * results according to the settings in a QgsProcessingContext. - * \note not available in Python bindings * \since QGIS 3.0 */ -class QgsProcessingFeatureSource : public QgsFeatureSource +class CORE_EXPORT QgsProcessingFeatureSource : public QgsFeatureSource { public: @@ -261,8 +258,6 @@ class QgsProcessingFeatureSource : public QgsFeatureSource }; -#endif - #endif // QGSPROCESSINGUTILS_H