Skip to content

Commit 3fb1b48

Browse files
committed
Export QgsProcessingFeatureSource to Python
1 parent 255fe0b commit 3fb1b48

File tree

8 files changed

+63
-14
lines changed

8 files changed

+63
-14
lines changed

python/core/processing/qgsprocessingalgorithm.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,15 +376,15 @@ class QgsProcessingAlgorithm
376376
:rtype: QgsFeatureSink
377377
%End
378378

379-
QgsFeatureSource *parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const /Factory/;
379+
QgsProcessingFeatureSource *parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const /Factory/;
380380
%Docstring
381381
Evaluates the parameter with matching ``definition`` to a feature source.
382382

383383
Sources will either be taken from ``context``'s active project, or loaded from external
384384
sources and stored temporarily in the ``context``.
385385

386386
This function creates a new object and the caller takes responsibility for deleting the returned object.
387-
:rtype: QgsFeatureSource
387+
:rtype: QgsProcessingFeatureSource
388388
%End
389389

390390
QgsMapLayer *parameterAsLayer( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const;

python/core/processing/qgsprocessingparameters.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,15 +436,15 @@ class QgsProcessingParameters
436436
:rtype: QgsFeatureSink
437437
%End
438438

439-
static QgsFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context ) /Factory/;
439+
static QgsProcessingFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context ) /Factory/;
440440
%Docstring
441441
Evaluates the parameter with matching ``definition`` to a feature source.
442442

443443
Sources will either be taken from ``context``'s active project, or loaded from external
444444
sources and stored temporarily in the ``context``.
445445

446446
This function creates a new object and the caller takes responsibility for deleting the returned object.
447-
:rtype: QgsFeatureSource
447+
:rtype: QgsProcessingFeatureSource
448448
%End
449449

450450
static QgsMapLayer *parameterAsLayer( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context );

python/core/processing/qgsprocessingutils.sip

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,59 @@ class QgsProcessingUtils
160160

161161
};
162162

163+
class QgsProcessingFeatureSource : QgsFeatureSource
164+
{
165+
%Docstring
166+
QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying
167+
results according to the settings in a QgsProcessingContext.
168+
.. versionadded:: 3.0
169+
%End
170+
171+
%TypeHeaderCode
172+
#include "qgsprocessingutils.h"
173+
%End
174+
public:
175+
176+
enum Flag
177+
{
178+
FlagSkipGeometryValidityChecks,
179+
};
180+
typedef QFlags<QgsProcessingFeatureSource::Flag> Flags;
181+
182+
183+
QgsProcessingFeatureSource( QgsFeatureSource *originalSource, const QgsProcessingContext &context, bool ownsOriginalSource = false );
184+
%Docstring
185+
Constructor for QgsProcessingFeatureSource, accepting an original feature source ``originalSource``
186+
and processing ``context``.
187+
Ownership of ``originalSource`` is dictated by ``ownsOriginalSource``. If ``ownsOriginalSource`` is false,
188+
ownership is not transferred, and callers must ensure that ``originalSource`` exists for the lifetime of this object.
189+
If ``ownsOriginalSource`` is true, then this object will take ownership of ``originalSource``.
190+
%End
191+
192+
~QgsProcessingFeatureSource();
193+
194+
QgsFeatureIterator getFeatures( const QgsFeatureRequest &request, Flags flags ) const;
195+
%Docstring
196+
Returns an iterator for the features in the source, respecting the supplied feature ``flags``.
197+
An optional ``request`` can be used to optimise the returned
198+
iterator, eg by restricting the returned attributes or geometry.
199+
:rtype: QgsFeatureIterator
200+
%End
201+
202+
virtual QgsFeatureIterator getFeatures( const QgsFeatureRequest &request = QgsFeatureRequest() ) const;
203+
204+
virtual QgsCoordinateReferenceSystem sourceCrs() const;
205+
206+
virtual QgsFields fields() const;
207+
208+
virtual QgsWkbTypes::Type wkbType() const;
209+
210+
virtual long featureCount() const;
211+
212+
virtual QString sourceName() const;
213+
214+
215+
};
163216

164217

165218

src/core/processing/qgsprocessingalgorithm.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ QgsFeatureSink *QgsProcessingAlgorithm::parameterAsSink( const QVariantMap &para
374374
return QgsProcessingParameters::parameterAsSink( parameterDefinition( name ), parameters, fields, geometryType, crs, context, destinationIdentifier );
375375
}
376376

377-
QgsFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
377+
QgsProcessingFeatureSource *QgsProcessingAlgorithm::parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const
378378
{
379379
return QgsProcessingParameters::parameterAsSource( parameterDefinition( name ), parameters, context );
380380
}

src/core/processing/qgsprocessingalgorithm.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ class CORE_EXPORT QgsProcessingAlgorithm
370370
*
371371
* This function creates a new object and the caller takes responsibility for deleting the returned object.
372372
*/
373-
QgsFeatureSource *parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const SIP_FACTORY;
373+
QgsProcessingFeatureSource *parameterAsSource( const QVariantMap &parameters, const QString &name, QgsProcessingContext &context ) const SIP_FACTORY;
374374

375375
/**
376376
* Evaluates the parameter with matching \a name to a map layer.

src/core/processing/qgsprocessingparameters.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,7 @@ QgsFeatureSink *QgsProcessingParameters::parameterAsSink( const QgsProcessingPar
258258
return sink.release();
259259
}
260260

261-
QgsFeatureSource *QgsProcessingParameters::parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context )
261+
QgsProcessingFeatureSource *QgsProcessingParameters::parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context )
262262
{
263263
if ( !definition )
264264
return nullptr;

src/core/processing/qgsprocessingparameters.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class QgsRasterLayer;
3030
class QgsVectorLayer;
3131
class QgsFeatureSink;
3232
class QgsFeatureSource;
33+
class QgsProcessingFeatureSource;
3334
class QgsProcessingOutputDefinition;
3435

3536
/**
@@ -479,7 +480,7 @@ class CORE_EXPORT QgsProcessingParameters
479480
*
480481
* This function creates a new object and the caller takes responsibility for deleting the returned object.
481482
*/
482-
static QgsFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context ) SIP_FACTORY;
483+
static QgsProcessingFeatureSource *parameterAsSource( const QgsProcessingParameterDefinition *definition, const QVariantMap &parameters, QgsProcessingContext &context ) SIP_FACTORY;
483484

484485
/**
485486
* Evaluates the parameter with matching \a definition to a map layer.

src/core/processing/qgsprocessingutils.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -219,17 +219,14 @@ class CORE_EXPORT QgsProcessingUtils
219219

220220
};
221221

222-
#ifndef SIP_RUN
223-
224222
/**
225223
* \class QgsProcessingFeatureSource
226224
* \ingroup core
227225
* QgsFeatureSource subclass which proxies methods to an underlying QgsFeatureSource, modifying
228226
* results according to the settings in a QgsProcessingContext.
229-
* \note not available in Python bindings
230227
* \since QGIS 3.0
231228
*/
232-
class QgsProcessingFeatureSource : public QgsFeatureSource
229+
class CORE_EXPORT QgsProcessingFeatureSource : public QgsFeatureSource
233230
{
234231
public:
235232

@@ -261,8 +258,6 @@ class QgsProcessingFeatureSource : public QgsFeatureSource
261258

262259
};
263260

264-
#endif
265-
266261
#endif // QGSPROCESSINGUTILS_H
267262

268263

0 commit comments

Comments
 (0)